summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitattributes8
-rw-r--r--.github/workflows/build.yml73
-rw-r--r--.github/workflows/clang10_test.yml78
-rw-r--r--.github/workflows/gcc10_test.yml77
-rw-r--r--.github/workflows/gcc9_test.yml77
-rw-r--r--.github/workflows/mariadb.yml80
-rw-r--r--.github/workflows/mysql.yml75
-rw-r--r--.gitignore5
-rw-r--r--.gitlab-ci.yml48
-rw-r--r--.mailmap8
-rw-r--r--.travis.yml104
-rw-r--r--3rdparty/libbacktrace/LICENSE29
-rw-r--r--3rdparty/libbacktrace/Makefile.in75
-rw-r--r--3rdparty/libbacktrace/README.md33
-rw-r--r--3rdparty/libbacktrace/acinclude.m472
-rw-r--r--3rdparty/libbacktrace/aclocal.m4843
-rw-r--r--3rdparty/libbacktrace/alloc.c156
-rw-r--r--3rdparty/libbacktrace/atomic.c113
-rw-r--r--3rdparty/libbacktrace/backtrace-supported.h.in66
-rw-r--r--3rdparty/libbacktrace/backtrace.c129
-rw-r--r--3rdparty/libbacktrace/backtrace.h182
-rw-r--r--3rdparty/libbacktrace/btest.c500
-rw-r--r--3rdparty/libbacktrace/config.h0
-rw-r--r--3rdparty/libbacktrace/dwarf.c3126
-rw-r--r--3rdparty/libbacktrace/edtest.c121
-rw-r--r--3rdparty/libbacktrace/edtest2.c43
-rw-r--r--3rdparty/libbacktrace/elf.c3340
-rw-r--r--3rdparty/libbacktrace/fileline.c201
-rw-r--r--3rdparty/libbacktrace/filenames.h49
-rw-r--r--3rdparty/libbacktrace/filetype.awk11
-rw-r--r--3rdparty/libbacktrace/internal.h304
-rw-r--r--3rdparty/libbacktrace/ltmain.sh11156
-rw-r--r--3rdparty/libbacktrace/macho.c1432
-rw-r--r--3rdparty/libbacktrace/mmap.c325
-rw-r--r--3rdparty/libbacktrace/mmapio.c100
-rw-r--r--3rdparty/libbacktrace/nounwind.c66
-rw-r--r--3rdparty/libbacktrace/pecoff.c943
-rw-r--r--3rdparty/libbacktrace/posix.c100
-rw-r--r--3rdparty/libbacktrace/print.c92
-rw-r--r--3rdparty/libbacktrace/read.c96
-rw-r--r--3rdparty/libbacktrace/simple.c108
-rw-r--r--3rdparty/libbacktrace/sort.c108
-rw-r--r--3rdparty/libbacktrace/state.c72
-rw-r--r--3rdparty/libbacktrace/stest.c137
-rw-r--r--3rdparty/libbacktrace/testlib.c234
-rw-r--r--3rdparty/libbacktrace/testlib.h110
-rw-r--r--3rdparty/libbacktrace/ttest.c161
-rw-r--r--3rdparty/libbacktrace/unknown.c65
-rw-r--r--3rdparty/libbacktrace/xcoff.c1642
-rw-r--r--3rdparty/libbacktrace/ztest.c537
-rw-r--r--3rdparty/libconfig/extra/.gitignore2
-rw-r--r--3rdparty/libconfig/extra/gen/Makefile4
-rw-r--r--3rdparty/libconfig/extra/gen/clangwarnings.patch14
-rw-r--r--3rdparty/libconfig/extra/gen/grammar.y72
-rw-r--r--3rdparty/libconfig/extra/gen/scanner.l146
-rw-r--r--3rdparty/libconfig/grammar.c360
-rw-r--r--3rdparty/libconfig/grammar.h80
-rw-r--r--3rdparty/libconfig/libconfig.c58
-rw-r--r--3rdparty/libconfig/libconfig.h2
-rw-r--r--3rdparty/libconfig/scanner.c1154
-rw-r--r--3rdparty/libconfig/scanner.h457
-rw-r--r--3rdparty/libconfig/wincompat.h4
-rw-r--r--AUTHORS221
-rw-r--r--CHANGELOG.md325
-rw-r--r--Makefile.in60
-rw-r--r--conf/common/inter-server.conf4
-rw-r--r--conf/map/battle/client.conf36
-rw-r--r--conf/map/battle/guild.conf12
-rw-r--r--conf/map/battle/items.conf12
-rw-r--r--conf/map/battle/party.conf27
-rw-r--r--conf/map/battle/pet.conf22
-rw-r--r--conf/map/battle/player.conf9
-rw-r--r--conf/map/battle/skill.conf13
-rw-r--r--conf/map/script.conf10
-rw-r--r--conf/messages.conf6
-rwxr-xr-xconfigure951
-rw-r--r--configure.ac283
-rw-r--r--db/constants.conf50
-rw-r--r--db/job_db2.txt2
-rw-r--r--db/map_index.txt6
-rw-r--r--db/mob_db2.conf6
-rw-r--r--db/mob_skill_db2.conf8
-rw-r--r--db/pet_db2.conf41
-rw-r--r--db/pre-re/attr_fix.txt4
-rw-r--r--db/pre-re/item_db.conf253
-rw-r--r--db/pre-re/mob_db.conf50
-rw-r--r--db/pre-re/mob_skill_db.conf8
-rw-r--r--db/pre-re/pet_db.conf915
-rw-r--r--db/pre-re/skill_db.conf286
-rw-r--r--db/re/attr_fix.txt4
-rw-r--r--db/re/item_combo_db.conf8
-rw-r--r--db/re/item_db.conf531
-rw-r--r--db/re/mob_db.conf906
-rw-r--r--db/re/mob_skill_db.conf73
-rw-r--r--db/re/pet_db.conf2356
-rw-r--r--db/re/skill_db.conf266
-rw-r--r--db/sc_config.conf54
-rw-r--r--doc/atcommands.txt17
-rw-r--r--doc/constants.md162
-rw-r--r--doc/mob_skill_db.md224
-rw-r--r--doc/pet_db.txt196
-rw-r--r--doc/script_commands.txt334
-rw-r--r--npc/custom/battleground/bg_common.txt140
-rw-r--r--npc/custom/battleground/bg_kvm01.txt52
-rw-r--r--npc/custom/battleground/bg_kvm02.txt52
-rw-r--r--npc/custom/battleground/bg_kvm03.txt52
-rw-r--r--npc/custom/itembind.txt10
-rw-r--r--npc/dev/test.txt49
-rw-r--r--npc/jobs/2-1/wizard.txt17
-rw-r--r--npc/mapflag/night.txt4
-rw-r--r--npc/mapflag/nobranch.txt4
-rw-r--r--npc/mapflag/nomemo.txt4
-rw-r--r--npc/mapflag/nopet.txt78
-rw-r--r--npc/mapflag/noteleport.txt4
-rw-r--r--npc/quests/quests_amatsu.txt33
-rw-r--r--npc/quests/quests_juperos.txt22
-rw-r--r--npc/quests/quests_lighthalzen.txt12
-rw-r--r--npc/quests/quests_moscovia.txt7
-rw-r--r--npc/quests/seals/god_weapon_creation.txt40
-rw-r--r--npc/quests/the_sign_quest.txt18
-rw-r--r--npc/re/merchants/hd_refiner.txt36
-rw-r--r--npc/re/quests/quests_brasilis.txt6
-rw-r--r--npc/scripts.conf3
-rw-r--r--npc/scripts_dev.conf2
-rw-r--r--npc/scripts_mapflags.conf1
-rw-r--r--sql-files/item_db.sql66
-rw-r--r--sql-files/item_db_re.sql162
-rw-r--r--sql-files/main.sql37
-rw-r--r--sql-files/mob_db.sql1
-rw-r--r--sql-files/mob_db_re.sql35
-rw-r--r--sql-files/mob_skill_db_re.sql8
-rw-r--r--sql-files/upgrades/2020-03-22--01-56.sql23
-rw-r--r--sql-files/upgrades/2020-03-22--03-09.sql24
-rw-r--r--sql-files/upgrades/2020-05-01--04-44.sql25
-rw-r--r--sql-files/upgrades/2020-05-10--23-11.sql43
-rw-r--r--sql-files/upgrades/index.txt4
-rw-r--r--src/char/Makefile.in25
-rw-r--r--src/char/char.c203
-rw-r--r--src/char/int_party.c3
-rw-r--r--src/char/int_pet.c232
-rw-r--r--src/char/inter.c8
-rw-r--r--src/char/mapif.c9
-rw-r--r--src/common/HPMDataCheck.h3
-rw-r--r--src/common/Makefile.in27
-rw-r--r--src/common/atomic.h3
-rw-r--r--src/common/cbasetypes.h17
-rw-r--r--src/common/core.c2
-rw-r--r--src/common/hercules.h12
-rw-r--r--src/common/mmo.h44
-rw-r--r--src/common/nullpo.c133
-rw-r--r--src/common/nullpo.h7
-rw-r--r--src/common/packets/packets2020_len_main.h82
-rw-r--r--src/common/packets/packets2020_len_re.h82
-rw-r--r--src/common/packets/packets2020_len_zero.h82
-rw-r--r--src/common/packets/packets_len_main.h4
-rw-r--r--src/common/packets/packets_len_re.h4
-rw-r--r--src/common/packets/packets_len_zero.h4
-rw-r--r--src/login/Makefile.in25
-rw-r--r--src/login/account.c15
-rw-r--r--src/login/login.c10
-rw-r--r--src/map/Makefile.in25
-rw-r--r--src/map/achievement.c4
-rw-r--r--src/map/atcommand.c413
-rw-r--r--src/map/atcommand.h10
-rw-r--r--src/map/battle.c100
-rw-r--r--src/map/battle.h14
-rw-r--r--src/map/buyingstore.c13
-rw-r--r--src/map/chrif.c2
-rw-r--r--src/map/clif.c1570
-rw-r--r--src/map/clif.h22
-rw-r--r--src/map/elemental.c4
-rw-r--r--src/map/guild.c17
-rw-r--r--src/map/instance.c4
-rw-r--r--src/map/intif.c14
-rw-r--r--src/map/itemdb.h2
-rw-r--r--src/map/mail.c4
-rw-r--r--src/map/map.c214
-rw-r--r--src/map/map.h21
-rw-r--r--src/map/mapdefines.h8
-rw-r--r--src/map/mapreg.h67
-rw-r--r--src/map/mapreg_sql.c818
-rw-r--r--src/map/messages_main.h143
-rw-r--r--src/map/messages_re.h139
-rw-r--r--src/map/messages_zero.h148
-rw-r--r--src/map/mob.c700
-rw-r--r--src/map/mob.h12
-rw-r--r--src/map/npc.c175
-rw-r--r--src/map/npc.h10
-rw-r--r--src/map/npc_chat.c3
-rw-r--r--src/map/packets.h5
-rw-r--r--src/map/packets_keys_main.h21
-rw-r--r--src/map/packets_keys_zero.h19
-rw-r--r--src/map/packets_shuffle_main.h17139
-rw-r--r--src/map/packets_shuffle_re.h16966
-rw-r--r--src/map/packets_shuffle_zero.h1329
-rw-r--r--src/map/packets_struct.h64
-rw-r--r--src/map/party.c56
-rw-r--r--src/map/party.h2
-rw-r--r--src/map/pc.c1466
-rw-r--r--src/map/pc.h70
-rw-r--r--src/map/pet.c1059
-rw-r--r--src/map/pet.h6
-rw-r--r--src/map/quest.c2
-rw-r--r--src/map/rodex.c3
-rw-r--r--src/map/script.c1747
-rw-r--r--src/map/script.h32
-rw-r--r--src/map/skill.c5420
-rw-r--r--src/map/skill.h174
-rw-r--r--src/map/status.c591
-rw-r--r--src/map/status.h11
-rw-r--r--src/map/trade.c9
-rw-r--r--src/map/unit.c830
-rw-r--r--src/map/unit.h23
-rw-r--r--src/map/unitdefines.h58
-rw-r--r--src/map/vending.c6
-rw-r--r--src/plugins/HPMHooking/HPMHooking.Defs.inc348
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc8
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc2
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.Hooks.inc52
-rw-r--r--src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc8
-rw-r--r--src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc2
-rw-r--r--src/plugins/HPMHooking/HPMHooking_login.Hooks.inc52
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc480
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc122
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.Hooks.inc2913
-rw-r--r--src/plugins/Makefile.in4
-rw-r--r--src/plugins/db2sql.c27
-rw-r--r--src/plugins/mapcache.c1
-rw-r--r--src/test/Makefile.in25
-rwxr-xr-xtools/HPMHookGen/HPMHookGen.pl2
-rwxr-xr-xtools/authors.sh4
-rwxr-xr-xtools/ci/travis.sh67
-rwxr-xr-xtools/ci/uncomment.sh4
-rw-r--r--tools/doxygen/doxygen.conf2065
-rw-r--r--tools/utils/libconf.py31
-rwxr-xr-xtools/validateinterfaces.py35
236 files changed, 71729 insertions, 27031 deletions
diff --git a/.gitattributes b/.gitattributes
index a839a28c9..d565bc7ac 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -2,4 +2,10 @@
*.c diff=cpp
*.sln merge=union
*.vcproj merge=union
-*.vcxproj merge=union \ No newline at end of file
+*.vcxproj merge=union
+
+# libconfig generated files
+3rdparty/libconfig/grammar.c linguist-generated=true
+3rdparty/libconfig/grammar.h linguist-generated=true
+3rdparty/libconfig/scanner.c linguist-generated=true
+3rdparty/libconfig/scanner.h linguist-generated=true
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 000000000..f136e1bdb
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,73 @@
+name: build
+
+on: [push, pull_request]
+
+env:
+ MYSQL_DATABASE: 'ragnarok'
+ MYSQL_USER: 'ragnarok'
+ MYSQL_PASSWORD: 'ragnarok'
+ MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
+ DEBIAN_COMMON_PACKAGES: make zlib1g-dev libpcre3-dev git python
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ # gcc, clang-8, clang-9 removed for reduce number of jobs
+ CC: ["gcc-10", "clang-10"]
+ RENEWAL: [""]
+ CLIENT_TYPE: ["", "--enable-packetver-re", "--enable-packetver-zero"]
+ SANITIZER: [""]
+ PACKET_VERSION: ["--enable-packetver=20100105", "--enable-packetver=20171018"]
+ LTO: ["", "--enable-lto"]
+ exclude:
+ - PACKET_VERSION: "--enable-packetver=20100105"
+ CLIENT_TYPE: "--enable-packetver-zero"
+ - CC: "clang-10"
+ LTO: "--enable-lto"
+ container:
+ image: debian:unstable
+ services:
+ mariadb:
+ image: mariadb:latest
+ ports:
+ - 33306:3306
+ env:
+ MYSQL_DATABASE: 'ragnarok'
+ MYSQL_USER: 'ragnarok'
+ MYSQL_PASSWORD: 'ragnarok'
+ MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
+ options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
+ env:
+ INSTALL_PACKAGES: ${{ matrix.CC }} mariadb-client libmariadbclient-dev-compat
+ SQLHOST: mariadb
+ CC: ${{ matrix.CC }}
+ CONFIGURE_FLAGS: CC=${{ matrix.CC }} --enable-debug --enable-Werror --enable-buildbot ${{ matrix.RENEWAL }} ${{ matrix.CLIENT_TYPE }} ${{ matrix.SANITIZER }} ${{ matrix.PACKET_VERSION }} --enable-epoll
+ steps:
+ - uses: actions/checkout@v1
+ with:
+ fetch-depth: 1
+
+ - name: info
+ run: |
+ uname -a
+
+ - name: install packages
+ run: |
+ ./tools/ci/retry.sh apt-get update
+ ./tools/ci/retry.sh apt-get install -y -qq $INSTALL_PACKAGES $DEBIAN_COMMON_PACKAGES
+
+ - name: init database
+ run: |
+ ./tools/ci/travis.sh importdb ragnarok ragnarok ragnarok $SQLHOST
+
+ - name: get plugins
+ run: |
+ ./tools/ci/travis.sh getplugins || true
+
+ - name: build
+ run: |
+ ./tools/ci/travis.sh build $CONFIGURE_FLAGS
+
+ # for run default config will show warnings
diff --git a/.github/workflows/clang10_test.yml b/.github/workflows/clang10_test.yml
new file mode 100644
index 000000000..5fd53c371
--- /dev/null
+++ b/.github/workflows/clang10_test.yml
@@ -0,0 +1,78 @@
+name: clang10_test
+
+on: [push, pull_request]
+
+env:
+ MYSQL_DATABASE: 'ragnarok'
+ MYSQL_USER: 'ragnarok'
+ MYSQL_PASSWORD: 'ragnarok'
+ MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
+ DEBIAN_COMMON_PACKAGES: make zlib1g-dev libpcre3-dev git python
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ # clang-8, clang-9 removed for reduce number of jobs
+ CC: [clang-10]
+ RENEWAL: ["", "--disable-renewal"]
+ CLIENT_TYPE: ["", "--enable-packetver-re", "--enable-packetver-zero"]
+ SANITIZER: ["--disable-manager", "--disable-manager --enable-sanitize=full"]
+ PACKET_VERSION: ["--enable-packetver=20200304", "--enable-packetver=20130724"]
+ exclude:
+ - PACKET_VERSION: "--enable-packetver=20130724"
+ CLIENT_TYPE: "--enable-packetver-zero"
+ container:
+ image: debian:unstable
+ services:
+ mariadb:
+ image: mariadb:latest
+ ports:
+ - 33306:3306
+ env:
+ MYSQL_DATABASE: 'ragnarok'
+ MYSQL_USER: 'ragnarok'
+ MYSQL_PASSWORD: 'ragnarok'
+ MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
+ options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
+ env:
+ INSTALL_PACKAGES: ${{ matrix.CC }} mariadb-client libmariadbclient-dev-compat
+ SQLHOST: mariadb
+ CC: ${{ matrix.CC }}
+ CONFIGURE_FLAGS: CC=${{ matrix.CC }} --enable-debug --enable-Werror --enable-buildbot ${{ matrix.RENEWAL }} ${{ matrix.CLIENT_TYPE }} ${{ matrix.SANITIZER }} ${{ matrix.PACKET_VERSION }}
+ PACKET_VERSION: ${{ matrix.PACKET_VERSION }}
+ steps:
+ - uses: actions/checkout@v1
+ with:
+ fetch-depth: 1
+
+ - name: info
+ run: |
+ uname -a
+
+ - name: install packages
+ run: |
+ ./tools/ci/retry.sh apt-get update
+ ./tools/ci/retry.sh apt-get install -y -qq $INSTALL_PACKAGES $DEBIAN_COMMON_PACKAGES
+
+ - name: init database
+ run: |
+ ./tools/ci/travis.sh importdb ragnarok ragnarok ragnarok $SQLHOST
+
+ - name: get plugins
+ run: |
+ ./tools/ci/travis.sh getplugins || true
+
+ - name: build
+ run: |
+ ./tools/ci/travis.sh build $CONFIGURE_FLAGS
+
+ - name: test
+ run: |
+ ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
+
+ - name: extra test
+ if: env.PACKET_VERSION != '--enable-packetver=20130724'
+ run: |
+ ./tools/ci/travis.sh extratest
diff --git a/.github/workflows/gcc10_test.yml b/.github/workflows/gcc10_test.yml
new file mode 100644
index 000000000..2225fbba1
--- /dev/null
+++ b/.github/workflows/gcc10_test.yml
@@ -0,0 +1,77 @@
+name: gcc10_test
+
+on: [push, pull_request]
+
+env:
+ MYSQL_DATABASE: 'ragnarok'
+ MYSQL_USER: 'ragnarok'
+ MYSQL_PASSWORD: 'ragnarok'
+ MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
+ DEBIAN_COMMON_PACKAGES: make zlib1g-dev libpcre3-dev git python
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ CC: [gcc-10]
+ RENEWAL: ["", "--disable-renewal"]
+ CLIENT_TYPE: ["", "--enable-packetver-re", "--enable-packetver-zero"]
+ SANITIZER: ["--disable-manager", "--disable-manager --enable-sanitize=full"]
+ PACKET_VERSION: ["--enable-packetver=20200304", "--enable-packetver=20130724"]
+ exclude:
+ - PACKET_VERSION: "--enable-packetver=20130724"
+ CLIENT_TYPE: "--enable-packetver-zero"
+ container:
+ image: debian:unstable
+ services:
+ mariadb:
+ image: mariadb:latest
+ ports:
+ - 33306:3306
+ env:
+ MYSQL_DATABASE: 'ragnarok'
+ MYSQL_USER: 'ragnarok'
+ MYSQL_PASSWORD: 'ragnarok'
+ MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
+ options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
+ env:
+ INSTALL_PACKAGES: ${{ matrix.CC }} mariadb-client libmariadbclient-dev-compat
+ SQLHOST: mariadb
+ CC: ${{ matrix.CC }}
+ CONFIGURE_FLAGS: CC=${{ matrix.CC }} --enable-debug --enable-Werror --enable-buildbot ${{ matrix.RENEWAL }} ${{ matrix.CLIENT_TYPE }} ${{ matrix.SANITIZER }} ${{ matrix.PACKET_VERSION }} --enable-lto
+ PACKET_VERSION: ${{ matrix.PACKET_VERSION }}
+ steps:
+ - uses: actions/checkout@v1
+ with:
+ fetch-depth: 1
+
+ - name: info
+ run: |
+ uname -a
+
+ - name: install packages
+ run: |
+ ./tools/ci/retry.sh apt-get update
+ ./tools/ci/retry.sh apt-get install -y -qq $INSTALL_PACKAGES $DEBIAN_COMMON_PACKAGES
+
+ - name: init database
+ run: |
+ ./tools/ci/travis.sh importdb ragnarok ragnarok ragnarok $SQLHOST
+
+ - name: get plugins
+ run: |
+ ./tools/ci/travis.sh getplugins || true
+
+ - name: build
+ run: |
+ ./tools/ci/travis.sh build $CONFIGURE_FLAGS
+
+ - name: test
+ run: |
+ ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
+
+ - name: extra test
+ if: env.PACKET_VERSION != '--enable-packetver=20130724'
+ run: |
+ ./tools/ci/travis.sh extratest
diff --git a/.github/workflows/gcc9_test.yml b/.github/workflows/gcc9_test.yml
new file mode 100644
index 000000000..798b6c476
--- /dev/null
+++ b/.github/workflows/gcc9_test.yml
@@ -0,0 +1,77 @@
+name: gcc9_test
+
+on: [push, pull_request]
+
+env:
+ MYSQL_DATABASE: 'ragnarok'
+ MYSQL_USER: 'ragnarok'
+ MYSQL_PASSWORD: 'ragnarok'
+ MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
+ DEBIAN_COMMON_PACKAGES: make zlib1g-dev libpcre3-dev git python
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ CC: [gcc]
+ RENEWAL: ["", "--disable-renewal"]
+ CLIENT_TYPE: ["", "--enable-packetver-re", "--enable-packetver-zero"]
+ SANITIZER: ["--disable-manager", "--disable-manager --enable-sanitize=full"]
+ PACKET_VERSION: ["--enable-packetver=20200304", "--enable-packetver=20130724"]
+ exclude:
+ - PACKET_VERSION: "--enable-packetver=20130724"
+ CLIENT_TYPE: "--enable-packetver-zero"
+ container:
+ image: debian:unstable
+ services:
+ mariadb:
+ image: mariadb:latest
+ ports:
+ - 33306:3306
+ env:
+ MYSQL_DATABASE: 'ragnarok'
+ MYSQL_USER: 'ragnarok'
+ MYSQL_PASSWORD: 'ragnarok'
+ MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
+ options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
+ env:
+ INSTALL_PACKAGES: ${{ matrix.CC }} mariadb-client libmariadbclient-dev-compat
+ SQLHOST: mariadb
+ CC: ${{ matrix.CC }}
+ CONFIGURE_FLAGS: CC=${{ matrix.CC }} --enable-debug --enable-Werror --enable-buildbot ${{ matrix.RENEWAL }} ${{ matrix.CLIENT_TYPE }} ${{ matrix.SANITIZER }} ${{ matrix.PACKET_VERSION }} --enable-lto
+ PACKET_VERSION: ${{ matrix.PACKET_VERSION }}
+ steps:
+ - uses: actions/checkout@v1
+ with:
+ fetch-depth: 1
+
+ - name: info
+ run: |
+ uname -a
+
+ - name: install packages
+ run: |
+ ./tools/ci/retry.sh apt-get update
+ ./tools/ci/retry.sh apt-get install -y -qq $INSTALL_PACKAGES $DEBIAN_COMMON_PACKAGES
+
+ - name: init database
+ run: |
+ ./tools/ci/travis.sh importdb ragnarok ragnarok ragnarok $SQLHOST
+
+ - name: get plugins
+ run: |
+ ./tools/ci/travis.sh getplugins || true
+
+ - name: build
+ run: |
+ ./tools/ci/travis.sh build $CONFIGURE_FLAGS
+
+ - name: test
+ run: |
+ ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
+
+ - name: extra test
+ if: env.PACKET_VERSION != '--enable-packetver=20130724'
+ run: |
+ ./tools/ci/travis.sh extratest
diff --git a/.github/workflows/mariadb.yml b/.github/workflows/mariadb.yml
new file mode 100644
index 000000000..5293dd98b
--- /dev/null
+++ b/.github/workflows/mariadb.yml
@@ -0,0 +1,80 @@
+name: mariadb
+
+on: [push, pull_request]
+
+env:
+ MYSQL_DATABASE: 'ragnarok'
+ MYSQL_USER: 'ragnarok'
+ MYSQL_PASSWORD: 'ragnarok'
+ MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
+ DEBIAN_COMMON_PACKAGES: make zlib1g-dev libpcre3-dev git python
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ CC: [gcc]
+ RENEWAL: [""]
+ CLIENT_TYPE: [""]
+ SANITIZER: ["--disable-manager", "--enable-sanitize=full"]
+ PACKET_VERSION: ["--enable-packetver=20200304"]
+ MYSQL: ["10.1", "10.5", "latest"]
+ container:
+ image: debian:unstable
+ services:
+ mysql:
+ image: mariadb:${{ matrix.MYSQL }}
+ ports:
+ - 33306:3306
+ env:
+ MYSQL_DATABASE: 'ragnarok'
+ MYSQL_USER: 'ragnarok'
+ MYSQL_PASSWORD: 'ragnarok'
+ MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
+ options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
+ env:
+ INSTALL_PACKAGES: ${{ matrix.CC }} mariadb-client libmariadbclient-dev-compat
+ SQLHOST: mysql
+ CC: ${{ matrix.CC }}
+ CONFIGURE_FLAGS: CC=${{ matrix.CC }} --enable-debug --enable-Werror --enable-buildbot ${{ matrix.RENEWAL }} ${{ matrix.CLIENT_TYPE }} ${{ matrix.SANITIZER }} ${{ matrix.PACKET_VERSION }}
+ PACKET_VERSION: ${{ matrix.PACKET_VERSION }}
+ steps:
+ - uses: actions/checkout@v1
+ with:
+ fetch-depth: 1
+
+ - name: info
+ run: |
+ uname -a
+
+ - name: install packages
+ run: |
+ ./tools/ci/retry.sh apt-get update
+ ./tools/ci/retry.sh apt-get install -y -qq $INSTALL_PACKAGES $DEBIAN_COMMON_PACKAGES
+
+ - name: init database
+ run: |
+ ./tools/ci/travis.sh importdb ragnarok ragnarok ragnarok $SQLHOST
+
+ - name: get plugins
+ run: |
+ ./tools/ci/travis.sh getplugins || true
+
+ - name: build
+ run: |
+ ./tools/ci/travis.sh build $CONFIGURE_FLAGS
+
+ - name: test
+ run: |
+ ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
+
+ - name: extra test
+ if: env.PACKET_VERSION != '--enable-packetver=20130724'
+ run: |
+ ./tools/ci/travis.sh extratest
+
+ - name: extra test
+ if: env.PACKET_VERSION != '--enable-packetver=20130724'
+ run: |
+ ./tools/ci/travis.sh extratest
diff --git a/.github/workflows/mysql.yml b/.github/workflows/mysql.yml
new file mode 100644
index 000000000..f26f86892
--- /dev/null
+++ b/.github/workflows/mysql.yml
@@ -0,0 +1,75 @@
+name: mysql
+
+on: [push, pull_request]
+
+env:
+ MYSQL_DATABASE: 'ragnarok'
+ MYSQL_USER: 'ragnarok'
+ MYSQL_PASSWORD: 'ragnarok'
+ MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
+ DEBIAN_COMMON_PACKAGES: make zlib1g-dev libpcre3-dev git python
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ CC: [gcc]
+ RENEWAL: [""]
+ CLIENT_TYPE: [""]
+ SANITIZER: ["--disable-manager", "--enable-sanitize=full"]
+ PACKET_VERSION: ["--enable-packetver=20200304"]
+ MYSQL: ["5.6", "5.7"]
+ container:
+ image: debian:unstable
+ services:
+ mysql:
+ image: mysql:${{ matrix.MYSQL }}
+ ports:
+ - 33306:3306
+ env:
+ MYSQL_DATABASE: 'ragnarok'
+ MYSQL_USER: 'ragnarok'
+ MYSQL_PASSWORD: 'ragnarok'
+ MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
+ options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
+ env:
+ INSTALL_PACKAGES: ${{ matrix.CC }} mysql-client libmysqlclient-dev
+ SQLHOST: mysql
+ CC: ${{ matrix.CC }}
+ CONFIGURE_FLAGS: CC=${{ matrix.CC }} --enable-debug --enable-Werror --enable-buildbot ${{ matrix.RENEWAL }} ${{ matrix.CLIENT_TYPE }} ${{ matrix.SANITIZER }} ${{ matrix.PACKET_VERSION }}
+ PACKET_VERSION: ${{ matrix.PACKET_VERSION }}
+ steps:
+ - uses: actions/checkout@v1
+ with:
+ fetch-depth: 1
+
+ - name: info
+ run: |
+ uname -a
+
+ - name: install packages
+ run: |
+ ./tools/ci/retry.sh apt-get update
+ ./tools/ci/retry.sh apt-get install -y -qq $INSTALL_PACKAGES $DEBIAN_COMMON_PACKAGES
+
+ - name: init database
+ run: |
+ ./tools/ci/travis.sh importdb ragnarok ragnarok ragnarok $SQLHOST
+
+ - name: get plugins
+ run: |
+ ./tools/ci/travis.sh getplugins || true
+
+ - name: build
+ run: |
+ ./tools/ci/travis.sh build $CONFIGURE_FLAGS
+
+ - name: test
+ run: |
+ ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
+
+ - name: extra test
+ if: env.PACKET_VERSION != '--enable-packetver=20130724'
+ run: |
+ ./tools/ci/travis.sh extratest
diff --git a/.gitignore b/.gitignore
index c48554520..7b66af6d5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -51,6 +51,11 @@ Thumbs.db
/3rdparty/libconfig/Makefile
/3rdparty/libconfig/*.o
+# /3rdparty/libbacktrace/
+/3rdparty/libbacktrace/Makefile
+/3rdparty/libbacktrace/*.o
+/3rdparty/libbacktrace/backtrace-supported.h
+
# /3rdparty/mt19937ar/
/3rdparty/mt19937ar/Makefile
/3rdparty/mt19937ar/*.o
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 438dbc267..15d6112c4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -825,61 +825,60 @@ re:debian-testing:
pre_re:centos-previous:
<<: *branch_exceptions
stage: platforms
- image: centos:6
+ image: centos:7
services:
- - mysql:5.5
+ - mariadb:5.5
variables:
<<: *base_vars
- SQLHOST: mysql
+ SQLHOST: mariadb
before_script:
- echo "Building $CI_BUILD_NAME"
- uname -a
- yum -y update
- - yum install -y make mysql-devel pcre-devel git zlib-devel mysql centos-release-scl
- - yum install -y devtoolset-6-toolchain
+ - yum install -y gcc make mariadb-devel pcre-devel git zlib-devel mariadb
- ./tools/ci/travis.sh importdb ragnarok ragnarok ragnarok $SQLHOST
- ./tools/ci/travis.sh getplugins || true
script:
- - 'source /opt/rh/devtoolset-6/enable && ./tools/ci/travis.sh build --enable-debug --enable-Werror --enable-buildbot --disable-renewal'
+ - ./tools/ci/travis.sh build --enable-debug --enable-Werror --enable-buildbot --disable-renewal
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
re:centos-previous:
<<: *branch_exceptions
stage: platforms
- image: centos:6
+ image: centos:7
services:
- - mysql:5.5
+ - mariadb:5.5
variables:
<<: *base_vars
- SQLHOST: mysql
+ SQLHOST: mariadb
before_script:
- echo "Building $CI_BUILD_NAME"
- uname -a
- yum -y update
- - yum install -y make mysql-devel pcre-devel git zlib-devel mysql centos-release-scl
- - yum install -y devtoolset-6-toolchain
+ - yum install -y gcc make mariadb-devel pcre-devel git zlib-devel mariadb
- ./tools/ci/travis.sh importdb ragnarok ragnarok ragnarok $SQLHOST
- ./tools/ci/travis.sh getplugins || true
script:
- - 'source /opt/rh/devtoolset-6/enable && ./tools/ci/travis.sh build --enable-debug --enable-Werror --enable-buildbot'
+ - ./tools/ci/travis.sh build --enable-debug --enable-Werror --enable-buildbot
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
pre_re:centos-current:
<<: *branch_exceptions
stage: platforms
- image: centos:7
+ image: centos:8
services:
- - mariadb:5.5
+ - mariadb:10.3
+ variables:
+ <<: *base_vars
+ SQLHOST: mariadb
before_script:
- echo "Building $CI_BUILD_NAME"
- uname -a
- yum -y update
- - yum install -y gcc make mariadb-devel pcre-devel git zlib-devel mariadb
+ - yum install -y gcc make mariadb-devel pcre-devel git zlib-devel mariadb python2
+ - alternatives --set python /usr/bin/python2
- ./tools/ci/travis.sh importdb ragnarok ragnarok ragnarok $SQLHOST
- ./tools/ci/travis.sh getplugins || true
- variables:
- <<: *base_vars
- 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
@@ -887,19 +886,20 @@ pre_re:centos-current:
re:centos-current:
<<: *branch_exceptions
stage: platforms
- image: centos:7
+ image: centos:8
services:
- - mariadb:5.5
+ - mariadb:10.3
+ variables:
+ <<: *base_vars
+ SQLHOST: mariadb
before_script:
- echo "Building $CI_BUILD_NAME"
- uname -a
- yum -y update
- - yum install -y gcc make mariadb-devel pcre-devel git zlib-devel mariadb
+ - yum install -y gcc make mariadb-devel pcre-devel git zlib-devel mariadb python2
+ - alternatives --set python /usr/bin/python2
- ./tools/ci/travis.sh importdb ragnarok ragnarok ragnarok $SQLHOST
- ./tools/ci/travis.sh getplugins || true
- variables:
- <<: *base_vars
- SQLHOST: mariadb
script:
- ./tools/ci/travis.sh build --enable-debug --enable-Werror --enable-buildbot
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
diff --git a/.mailmap b/.mailmap
index 4a9b49d2d..111831380 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1,3 +1,11 @@
+# hercules aliases
+
+Jenkijo <jenkijo@hrzn.community> <phongtruongit@gmail.com>
+Kenpachi <Kenpachi.Developer@gmx.de> kenpachi2k11 <Kenpachi.Developer@gmx.de>
+Kenpachi <Kenpachi.Developer@gmx.de> Kenpachi2k13 <3476227+Kenpachi2k13@users.noreply.github.com>
+Kenpachi <Kenpachi.Developer@gmx.de> Kenpachi2k13 <Kenpachi.Developer@gmx.de>
+Kenpachi <Kenpachi.Developer@gmx.de> Kenpachi Developer <Kenpachi.Developer@gmx.de>
+
# SVN -> git mailmap
<kisuka@kisuka.com> <Kisuka@54d463be-8e91-2dee-dedb-b68131a5f0ec>
diff --git a/.travis.yml b/.travis.yml
index e4497257b..77875e490 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,5 @@
language: c
-sudo: false
+os: linux
dist: trusty
addons:
apt:
@@ -9,12 +9,17 @@ addons:
install:
- ./tools/ci/travis.sh getplugins || true
+arch:
+ - amd64
+
before_script:
- uname -a
+ - env
- ulimit -c unlimited -S
- - ./tools/ci/travis.sh createdb ragnarok root
- - ./tools/ci/travis.sh importdb ragnarok root
- - ./tools/ci/travis.sh adduser ragnarok travis travis root
+ - if [[ "$(uname -m)" != "x86_64" ]]; then $SUDO ./tools/ci/travis.sh startmysql; fi
+ - $SUDO ./tools/ci/travis.sh createdb ragnarok root
+ - $SUDO ./tools/ci/travis.sh importdb ragnarok root
+ - $SUDO ./tools/ci/travis.sh adduser ragnarok travis travis root
script:
- if [[ ! -z "${HPM}" ]]; then ./tools/ci/travis.sh buildhpm $CONFIGURE_FLAGS; fi
@@ -24,7 +29,10 @@ script:
compiler: false # Necessary at the top level because referenced by allow_failures
env: ignore=this # Necessary at the top level because referenced by allow_failures
-matrix:
+git:
+ depth: 1
+
+jobs:
allow_failures:
- compiler: clang
env: CONFIGURE_FLAGS="--enable-debug CC=clang-5.0 --enable-Werror --enable-buildbot"
@@ -47,7 +55,7 @@ matrix:
- cd ../..
- ./tools/checksql.sh
- compiler: gcc
- env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug CC=gcc-6 --disable-manager --enable-Werror --enable-packetver=20200205 --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=20200304 --enable-packetver-re --enable-buildbot" HPM="1"
addons:
apt:
sources:
@@ -60,7 +68,7 @@ matrix:
- libxml-sax-perl
- libxml-parser-perl
- compiler: clang
- env: CONFIGURE_FLAGS="--enable-debug CC=clang-5.0 --enable-Werror --enable-packetver=20200205 --enable-packetver-re --enable-buildbot"
+ env: CONFIGURE_FLAGS="--enable-debug CC=clang-5.0 --enable-Werror --enable-packetver=20200304 --enable-packetver-re --enable-buildbot"
addons:
apt:
sources:
@@ -80,27 +88,7 @@ matrix:
- gdb
- clang-5.0
- compiler: clang
- env: CONFIGURE_FLAGS="--enable-debug CC=clang-4.0 --enable-Werror --enable-packetver=20200205 --enable-packetver-re --enable-buildbot"
- addons:
- apt:
- sources:
- - llvm-toolchain-trusty-4.0
- - ubuntu-toolchain-r-test
- packages:
- - gdb
- - clang-4.0
- - compiler: clang
- env: CONFIGURE_FLAGS="--enable-debug CC=clang-4.0 --enable-Werror --enable-packetver=20130724 --enable-packetver-re --enable-buildbot"
- addons:
- apt:
- sources:
- - llvm-toolchain-trusty-4.0
- - ubuntu-toolchain-r-test
- packages:
- - gdb
- - clang-4.0
- - compiler: clang
- env: CONFIGURE_FLAGS="--enable-debug CC=clang-4.0 --disable-renewal --enable-Werror --enable-buildbot"
+ env: CONFIGURE_FLAGS="--enable-debug CC=clang-4.0 --enable-Werror --enable-packetver=20200304 --enable-packetver-re --enable-buildbot"
addons:
apt:
sources:
@@ -114,11 +102,9 @@ 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=20200205 --enable-packetver-re --enable-buildbot"
+ env: CONFIGURE_FLAGS="--enable-debug --enable-Werror --enable-packetver=20200304 --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=20200205 --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=20200304 --enable-packetver-re --enable-buildbot"
addons:
apt:
sources:
@@ -127,68 +113,82 @@ matrix:
- gdb
- gcc-5
- compiler: gcc
- env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-5 --disable-manager --disable-renewal --enable-Werror --enable-buildbot"
+ env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-6 --disable-manager --enable-Werror --enable-packetver=20200304 --enable-packetver-re --enable-buildbot"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- gdb
- - gcc-5
+ - gcc-6
- compiler: gcc
- env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-6 --disable-manager --enable-Werror --enable-packetver=20200205 --enable-packetver-re --enable-buildbot"
+ env: CONFIGURE_FLAGS="--enable-debug --disable-manager --disable-renewal --enable-Werror --enable-buildbot"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- gdb
- - gcc-6
+ - gcc-7
- compiler: gcc
- env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-6 --disable-manager --disable-renewal --enable-Werror --enable-buildbot"
+ env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-8 --disable-manager --enable-Werror --enable-packetver=20200304 --enable-packetver-re --enable-buildbot"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- gdb
- - gcc-6
+ - gcc-8
- compiler: gcc
- env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug CC=gcc-7 --disable-manager --enable-Werror --enable-packetver=20200205 --enable-packetver-re --enable-buildbot"
+ env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-8 --disable-manager --disable-renewal --enable-Werror --enable-buildbot"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- gdb
- - gcc-7
+ - gcc-8
- compiler: gcc
- env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-7 --disable-manager --disable-renewal --enable-Werror --enable-buildbot"
+ arch: arm64
+ env: CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-10 --enable-Werror --enable-packetver=20200304 --enable-packetver-re --enable-buildbot --disable-manager" SUDO="sudo"
+ dist: focal
addons:
apt:
- sources:
- - ubuntu-toolchain-r-test
packages:
+ - libpcre3-dev
- gdb
- - gcc-7
+ - mysql-server
+ - gcc-10
- compiler: gcc
- env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-8 --disable-manager --enable-Werror --enable-packetver=20200205 --enable-packetver-re --enable-buildbot"
+ arch: arm64
+ env: CONFIGURE_FLAGS="--enable-debug --enable-Werror CC=gcc-10 --enable-packetver=20200304 --enable-packetver-re --enable-buildbot --disable-manager" SUDO="sudo"
+ dist: focal
addons:
apt:
- sources:
- - ubuntu-toolchain-r-test
packages:
+ - libpcre3-dev
- gdb
- - gcc-8
+ - mysql-server
+ - gcc-10
- compiler: gcc
- env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-8 --disable-manager --disable-renewal --enable-Werror --enable-buildbot"
+ arch: ppc64le
+ env: CONFIGURE_FLAGS="--enable-debug --enable-Werror --enable-packetver=20200304 --enable-packetver-re --enable-buildbot --disable-manager" SUDO="sudo"
+ dist: bionic
addons:
apt:
- sources:
- - ubuntu-toolchain-r-test
packages:
+ - libpcre3-dev
- gdb
- - gcc-8
+ - mysql-server
+# big endian not supported
+# - compiler: gcc
+# arch: s390x
+# env: CONFIGURE_FLAGS="--enable-debug --enable-Werror --enable-packetver=20200304 --enable-packetver-re --enable-buildbot" ROOT="true"
+# addons:
+# apt:
+# packages:
+# - libpcre3-dev
+# - gdb
notifications:
email: false
diff --git a/3rdparty/libbacktrace/LICENSE b/3rdparty/libbacktrace/LICENSE
new file mode 100644
index 000000000..097d2774e
--- /dev/null
+++ b/3rdparty/libbacktrace/LICENSE
@@ -0,0 +1,29 @@
+# Copyright (C) 2012-2016 Free Software Foundation, Inc.
+
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+
+# (1) Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+
+# (2) Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+
+# (3) The name of the author may not be used to
+# endorse or promote products derived from this software without
+# specific prior written permission.
+
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
diff --git a/3rdparty/libbacktrace/Makefile.in b/3rdparty/libbacktrace/Makefile.in
new file mode 100644
index 000000000..edb433a4e
--- /dev/null
+++ b/3rdparty/libbacktrace/Makefile.in
@@ -0,0 +1,75 @@
+# This file is part of Hercules.
+# http://herc.ws - http://github.com/HerculesWS/Hercules
+#
+# Copyright (C) 2012-2015 Hercules Dev Team
+# Copyright (C) Athena Dev Teams
+#
+# 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/>.
+
+# @configure_input@
+
+ifeq (@USE_LIBBACKTRACE@,yes)
+ LIBBACKTRACE_OBJ = atomic.o \
+ dwarf.o \
+ fileline.o \
+ posix.o \
+ print.o \
+ sort.o \
+ state.o \
+ backtrace.o \
+ simple.o \
+ nounwind.o \
+ unknown.o \
+ read.o \
+ mmapio.o \
+ alloc.o \
+ mmap.o \
+ @LIBBACKTRACE_FORMAT_FILE@
+ LIBBACKTRACE_H = backtrace.h internal.h
+else
+ LIBBACKTRACE_OBJ =
+ LIBBACKTRACE_H =
+endif
+
+@SET_MAKE@
+
+CC = @CC@
+export CC
+
+#####################################################################
+.PHONY: all clean buildclean help
+
+all: $(LIBBACKTRACE_OBJ)
+
+buildclean:
+ @echo " CLEAN libbacktrace (build temp files)"
+ @rm -rf *.o
+
+clean: buildclean
+ @echo " CLEAN libbacktrace"
+
+help:
+ @echo "possible targets are 'all' 'clean' 'buildclean' 'help'"
+ @echo "'all' - builds $(LIBBACKTRACE_OBJ)"
+ @echo "'clean', 'buildclean' - deletes $(LIBBACKTRACE_OBJ)"
+ @echo "'help' - outputs this message"
+
+#####################################################################
+
+Makefile: Makefile.in
+ @$(MAKE) -C ../.. 3rdparty/libbacktrace/Makefile
+
+%.o: %.c $(LIBBACKTRACE_H) Makefile
+ @echo " CC $<"
+ @$(CC) @CFLAGS@ @DEFS@ @CPPFLAGS@ -Wno-pointer-arith -c $(OUTPUT_OPTION) $<
diff --git a/3rdparty/libbacktrace/README.md b/3rdparty/libbacktrace/README.md
new file mode 100644
index 000000000..da6d9667d
--- /dev/null
+++ b/3rdparty/libbacktrace/README.md
@@ -0,0 +1,33 @@
+# libbacktrace
+A C library that may be linked into a C/C++ program to produce symbolic backtraces
+
+Initially written by Ian Lance Taylor <iant@golang.org>.
+
+This is version 1.0.
+It is likely that this will always be version 1.0.
+
+The libbacktrace library may be linked into a program or library and
+used to produce symbolic backtraces.
+Sample uses would be to print a detailed backtrace when an error
+occurs or to gather detailed profiling information.
+
+The libbacktrace library is provided under a BSD license.
+See the source files for the exact license text.
+
+The public functions are declared and documented in the header file
+backtrace.h, which should be #include'd by a user of the library.
+
+Building libbacktrace will generate a file backtrace-supported.h,
+which a user of the library may use to determine whether backtraces
+will work.
+See the source file backtrace-supported.h.in for the macros that it
+defines.
+
+As of January 2018, libbacktrace only supports ELF, PE/COFF, and XCOFF
+executables with DWARF debugging information.
+The library is written to make it straightforward to add support for
+other object file and debugging formats.
+
+The library relies on the C++ unwind API defined at
+https://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html
+This API is provided by GCC.
diff --git a/3rdparty/libbacktrace/acinclude.m4 b/3rdparty/libbacktrace/acinclude.m4
new file mode 100644
index 000000000..daa73af9e
--- /dev/null
+++ b/3rdparty/libbacktrace/acinclude.m4
@@ -0,0 +1,72 @@
+dnl
+dnl Check whether _Unwind_GetIPInfo is available without doing a link
+dnl test so we can use this with libstdc++-v3 and libjava. Need to
+dnl use $target to set defaults because automatic checking is not possible
+dnl without a link test (and maybe even with a link test).
+dnl
+
+AC_DEFUN([GCC_CHECK_UNWIND_GETIPINFO], [
+ AC_ARG_WITH(system-libunwind,
+ [ --with-system-libunwind use installed libunwind])
+ # If system-libunwind was not specifically set, pick a default setting.
+ if test x$with_system_libunwind = x; then
+ case ${target} in
+ ia64-*-hpux*) with_system_libunwind=yes ;;
+ *) with_system_libunwind=no ;;
+ esac
+ fi
+ # Based on system-libunwind and target, do we have ipinfo?
+ if test x$with_system_libunwind = xyes; then
+ case ${target} in
+ ia64-*-*) have_unwind_getipinfo=no ;;
+ *) have_unwind_getipinfo=yes ;;
+ esac
+ else
+ # Darwin before version 9 does not have _Unwind_GetIPInfo.
+ changequote(,)
+ case ${target} in
+ *-*-darwin[3-8]|*-*-darwin[3-8].*) have_unwind_getipinfo=no ;;
+ *) have_unwind_getipinfo=yes ;;
+ esac
+ changequote([,])
+ fi
+
+ if test x$have_unwind_getipinfo = xyes; then
+ AC_DEFINE(HAVE_GETIPINFO, 1, [Define if _Unwind_GetIPInfo is available.])
+ fi
+])
+
+# ACX_PROG_CC_WARNING_OPTS(WARNINGS, [VARIABLE = WARN_CFLAGS])
+# Sets @VARIABLE@ to the subset of the given options which the
+# compiler accepts.
+AC_DEFUN([ACX_PROG_CC_WARNING_OPTS],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_LANG_PUSH(C)
+m4_pushdef([acx_Var], [m4_default([$2], [WARN_CFLAGS])])dnl
+AC_SUBST(acx_Var)dnl
+m4_expand_once([acx_Var=
+],m4_quote(acx_Var=))dnl
+save_CFLAGS="$CFLAGS"
+for real_option in $1; do
+ # Do the check with the no- prefix removed since gcc silently
+ # accepts any -Wno-* option on purpose
+ case $real_option in
+ -Wno-*) option=-W`expr x$real_option : 'x-Wno-\(.*\)'` ;;
+ *) option=$real_option ;;
+ esac
+ AS_VAR_PUSHDEF([acx_Woption], [acx_cv_prog_cc_warning_$option])
+ AC_CACHE_CHECK([whether $CC supports $option], acx_Woption,
+ [CFLAGS="$option"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],
+ [AS_VAR_SET(acx_Woption, yes)],
+ [AS_VAR_SET(acx_Woption, no)])
+ ])
+ AS_IF([test AS_VAR_GET(acx_Woption) = yes],
+ [acx_Var="$acx_Var${acx_Var:+ }$real_option"])
+ AS_VAR_POPDEF([acx_Woption])dnl
+done
+CFLAGS="$save_CFLAGS"
+m4_popdef([acx_Var])dnl
+AC_LANG_POP(C)
+])# ACX_PROG_CC_WARNING_OPTS
+
diff --git a/3rdparty/libbacktrace/aclocal.m4 b/3rdparty/libbacktrace/aclocal.m4
new file mode 100644
index 000000000..00558cc33
--- /dev/null
+++ b/3rdparty/libbacktrace/aclocal.m4
@@ -0,0 +1,843 @@
+# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
+
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.16'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.16.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.16.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+ [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+ fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+ [whether $CC understands -c and -o together],
+ [am_cv_prog_cc_c_o],
+ [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+ ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+ [--enable-silent-rules],
+ [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+ [--disable-silent-rules],
+ [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+ [am_cv_make_support_nested_variables],
+ [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+ dnl Using '$V' instead of '$(V)' breaks IRIX make.
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+ [m4_case([$1],
+ [ustar],
+ [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+ # There is notably a 21 bits limit for the UID and the GID. In fact,
+ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+ # and bug#13588).
+ am_max_uid=2097151 # 2^21 - 1
+ am_max_gid=$am_max_uid
+ # The $UID and $GID variables are not portable, so we need to resort
+ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
+ # below are definitely unexpected, so allow the users to see them
+ # (that is, avoid stderr redirection).
+ am_uid=`id -u || echo unknown`
+ am_gid=`id -g || echo unknown`
+ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+ if test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi
+ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+ if test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi],
+
+ [pax],
+ [],
+
+ [m4_fatal([Unknown tar format])])
+
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
+
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([config/libtool.m4])
+m4_include([config/ltoptions.m4])
+m4_include([config/ltsugar.m4])
+m4_include([config/ltversion.m4])
+m4_include([config/lt~obsolete.m4])
+m4_include([acinclude.m4])
diff --git a/3rdparty/libbacktrace/alloc.c b/3rdparty/libbacktrace/alloc.c
new file mode 100644
index 000000000..7070afbf2
--- /dev/null
+++ b/3rdparty/libbacktrace/alloc.c
@@ -0,0 +1,156 @@
+/* alloc.c -- Memory allocation without mmap.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <errno.h>
+#include <stdlib.h>
+#include <sys/types.h>
+
+#include "backtrace.h"
+#include "internal.h"
+
+/* Allocation routines to use on systems that do not support anonymous
+ mmap. This implementation just uses malloc, which means that the
+ backtrace functions may not be safely invoked from a signal
+ handler. */
+
+/* Allocate memory like malloc. If ERROR_CALLBACK is NULL, don't
+ report an error. */
+
+void *
+backtrace_alloc (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ size_t size, backtrace_error_callback error_callback,
+ void *data)
+{
+ void *ret;
+
+ ret = malloc (size);
+ if (ret == NULL)
+ {
+ if (error_callback)
+ error_callback (data, "malloc", errno);
+ }
+ return ret;
+}
+
+/* Free memory. */
+
+void
+backtrace_free (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ void *p, size_t size ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data ATTRIBUTE_UNUSED)
+{
+ free (p);
+}
+
+/* Grow VEC by SIZE bytes. */
+
+void *
+backtrace_vector_grow (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ size_t size, backtrace_error_callback error_callback,
+ void *data, struct backtrace_vector *vec)
+{
+ void *ret;
+
+ if (size > vec->alc)
+ {
+ size_t alc;
+ void *base;
+
+ if (vec->size == 0)
+ alc = 32 * size;
+ else if (vec->size >= 4096)
+ alc = vec->size + 4096;
+ else
+ alc = 2 * vec->size;
+
+ if (alc < vec->size + size)
+ alc = vec->size + size;
+
+ base = realloc (vec->base, alc);
+ if (base == NULL)
+ {
+ error_callback (data, "realloc", errno);
+ return NULL;
+ }
+
+ vec->base = base;
+ vec->alc = alc - vec->size;
+ }
+
+ ret = (char *) vec->base + vec->size;
+ vec->size += size;
+ vec->alc -= size;
+ return ret;
+}
+
+/* Finish the current allocation on VEC. */
+
+void *
+backtrace_vector_finish (struct backtrace_state *state,
+ struct backtrace_vector *vec,
+ backtrace_error_callback error_callback,
+ void *data)
+{
+ void *ret;
+
+ /* With this allocator we call realloc in backtrace_vector_grow,
+ which means we can't easily reuse the memory here. So just
+ release it. */
+ if (!backtrace_vector_release (state, vec, error_callback, data))
+ return NULL;
+ ret = vec->base;
+ vec->base = NULL;
+ vec->size = 0;
+ vec->alc = 0;
+ return ret;
+}
+
+/* Release any extra space allocated for VEC. */
+
+int
+backtrace_vector_release (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ struct backtrace_vector *vec,
+ backtrace_error_callback error_callback,
+ void *data)
+{
+ vec->base = realloc (vec->base, vec->size);
+ if (vec->base == NULL)
+ {
+ error_callback (data, "realloc", errno);
+ return 0;
+ }
+ vec->alc = 0;
+ return 1;
+}
diff --git a/3rdparty/libbacktrace/atomic.c b/3rdparty/libbacktrace/atomic.c
new file mode 100644
index 000000000..5ab160066
--- /dev/null
+++ b/3rdparty/libbacktrace/atomic.c
@@ -0,0 +1,113 @@
+/* atomic.c -- Support for atomic functions if not present.
+ Copyright (C) 2013-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <sys/types.h>
+
+#include "backtrace.h"
+#include "backtrace-supported.h"
+#include "internal.h"
+
+/* This file holds implementations of the atomic functions that are
+ used if the host compiler has the sync functions but not the atomic
+ functions, as is true of versions of GCC before 4.7. */
+
+#if !defined (HAVE_ATOMIC_FUNCTIONS) && defined (HAVE_SYNC_FUNCTIONS)
+
+/* Do an atomic load of a pointer. */
+
+void *
+backtrace_atomic_load_pointer (void *arg)
+{
+ void **pp;
+ void *p;
+
+ pp = (void **) arg;
+ p = *pp;
+ while (!__sync_bool_compare_and_swap (pp, p, p))
+ p = *pp;
+ return p;
+}
+
+/* Do an atomic load of an int. */
+
+int
+backtrace_atomic_load_int (int *p)
+{
+ int i;
+
+ i = *p;
+ while (!__sync_bool_compare_and_swap (p, i, i))
+ i = *p;
+ return i;
+}
+
+/* Do an atomic store of a pointer. */
+
+void
+backtrace_atomic_store_pointer (void *arg, void *p)
+{
+ void **pp;
+ void *old;
+
+ pp = (void **) arg;
+ old = *pp;
+ while (!__sync_bool_compare_and_swap (pp, old, p))
+ old = *pp;
+}
+
+/* Do an atomic store of a size_t value. */
+
+void
+backtrace_atomic_store_size_t (size_t *p, size_t v)
+{
+ size_t old;
+
+ old = *p;
+ while (!__sync_bool_compare_and_swap (p, old, v))
+ old = *p;
+}
+
+/* Do an atomic store of a int value. */
+
+void
+backtrace_atomic_store_int (int *p, int v)
+{
+ size_t old;
+
+ old = *p;
+ while (!__sync_bool_compare_and_swap (p, old, v))
+ old = *p;
+}
+
+#endif
diff --git a/3rdparty/libbacktrace/backtrace-supported.h.in b/3rdparty/libbacktrace/backtrace-supported.h.in
new file mode 100644
index 000000000..c2d03d241
--- /dev/null
+++ b/3rdparty/libbacktrace/backtrace-supported.h.in
@@ -0,0 +1,66 @@
+/* backtrace-supported.h.in -- Whether stack backtrace is supported.
+ Copyright (C) 2012-2016 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+/* The file backtrace-supported.h.in is used by configure to generate
+ the file backtrace-supported.h. The file backtrace-supported.h may
+ be #include'd to see whether the backtrace library will be able to
+ get a backtrace and produce symbolic information. */
+
+
+/* BACKTRACE_SUPPORTED will be #define'd as 1 if the backtrace library
+ should work, 0 if it will not. Libraries may #include this to make
+ other arrangements. */
+
+#define BACKTRACE_SUPPORTED @BACKTRACE_SUPPORTED@
+
+/* BACKTRACE_USES_MALLOC will be #define'd as 1 if the backtrace
+ library will call malloc as it works, 0 if it will call mmap
+ instead. This may be used to determine whether it is safe to call
+ the backtrace functions from a signal handler. In general this
+ only applies to calls like backtrace and backtrace_pcinfo. It does
+ not apply to backtrace_simple, which never calls malloc. It does
+ not apply to backtrace_print, which always calls fprintf and
+ therefore malloc. */
+
+#define BACKTRACE_USES_MALLOC @BACKTRACE_USES_MALLOC@
+
+/* BACKTRACE_SUPPORTS_THREADS will be #define'd as 1 if the backtrace
+ library is configured with threading support, 0 if not. If this is
+ 0, the threaded parameter to backtrace_create_state must be passed
+ as 0. */
+
+#define BACKTRACE_SUPPORTS_THREADS @BACKTRACE_SUPPORTS_THREADS@
+
+/* BACKTRACE_SUPPORTS_DATA will be #defined'd as 1 if the backtrace_syminfo
+ will work for variables. It will always work for functions. */
+
+#define BACKTRACE_SUPPORTS_DATA @BACKTRACE_SUPPORTS_DATA@
diff --git a/3rdparty/libbacktrace/backtrace.c b/3rdparty/libbacktrace/backtrace.c
new file mode 100644
index 000000000..f8e3dc59d
--- /dev/null
+++ b/3rdparty/libbacktrace/backtrace.c
@@ -0,0 +1,129 @@
+/* backtrace.c -- Entry point for stack backtrace library.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <sys/types.h>
+
+#include "unwind.h"
+#include "backtrace.h"
+#include "internal.h"
+
+/* The main backtrace_full routine. */
+
+/* Data passed through _Unwind_Backtrace. */
+
+struct backtrace_data
+{
+ /* Number of frames to skip. */
+ int skip;
+ /* Library state. */
+ struct backtrace_state *state;
+ /* Callback routine. */
+ backtrace_full_callback callback;
+ /* Error callback routine. */
+ backtrace_error_callback error_callback;
+ /* Data to pass to callback routines. */
+ void *data;
+ /* Value to return from backtrace_full. */
+ int ret;
+ /* Whether there is any memory available. */
+ int can_alloc;
+};
+
+/* Unwind library callback routine. This is passed to
+ _Unwind_Backtrace. */
+
+static _Unwind_Reason_Code
+unwind (struct _Unwind_Context *context, void *vdata)
+{
+ struct backtrace_data *bdata = (struct backtrace_data *) vdata;
+ uintptr_t pc;
+ int ip_before_insn = 0;
+
+#ifdef HAVE_GETIPINFO
+ pc = _Unwind_GetIPInfo (context, &ip_before_insn);
+#else
+ pc = _Unwind_GetIP (context);
+#endif
+
+ if (bdata->skip > 0)
+ {
+ --bdata->skip;
+ return _URC_NO_REASON;
+ }
+
+ if (!ip_before_insn)
+ --pc;
+
+ if (!bdata->can_alloc)
+ bdata->ret = bdata->callback (bdata->data, pc, NULL, 0, NULL);
+ else
+ bdata->ret = backtrace_pcinfo (bdata->state, pc, bdata->callback,
+ bdata->error_callback, bdata->data);
+ if (bdata->ret != 0)
+ return _URC_END_OF_STACK;
+
+ return _URC_NO_REASON;
+}
+
+/* Get a stack backtrace. */
+
+int
+backtrace_full (struct backtrace_state *state, int skip,
+ backtrace_full_callback callback,
+ backtrace_error_callback error_callback, void *data)
+{
+ struct backtrace_data bdata;
+ void *p;
+
+ bdata.skip = skip + 1;
+ bdata.state = state;
+ bdata.callback = callback;
+ bdata.error_callback = error_callback;
+ bdata.data = data;
+ bdata.ret = 0;
+
+ /* If we can't allocate any memory at all, don't try to produce
+ file/line information. */
+ p = backtrace_alloc (state, 4096, NULL, NULL);
+ if (p == NULL)
+ bdata.can_alloc = 0;
+ else
+ {
+ backtrace_free (state, p, 4096, NULL, NULL);
+ bdata.can_alloc = 1;
+ }
+
+ _Unwind_Backtrace (unwind, &bdata);
+ return bdata.ret;
+}
diff --git a/3rdparty/libbacktrace/backtrace.h b/3rdparty/libbacktrace/backtrace.h
new file mode 100644
index 000000000..17b10197d
--- /dev/null
+++ b/3rdparty/libbacktrace/backtrace.h
@@ -0,0 +1,182 @@
+/* backtrace.h -- Public header file for stack backtrace library.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#ifndef BACKTRACE_H
+#define BACKTRACE_H
+
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* The backtrace state. This struct is intentionally not defined in
+ the public interface. */
+
+struct backtrace_state;
+
+/* The type of the error callback argument to backtrace functions.
+ This function, if not NULL, will be called for certain error cases.
+ The DATA argument is passed to the function that calls this one.
+ The MSG argument is an error message. The ERRNUM argument, if
+ greater than 0, holds an errno value. The MSG buffer may become
+ invalid after this function returns.
+
+ As a special case, the ERRNUM argument will be passed as -1 if no
+ debug info can be found for the executable, but the function
+ requires debug info (e.g., backtrace_full, backtrace_pcinfo). The
+ MSG in this case will be something along the lines of "no debug
+ info". Similarly, ERRNUM will be passed as -1 if there is no
+ symbol table, but the function requires a symbol table (e.g.,
+ backtrace_syminfo). This may be used as a signal that some other
+ approach should be tried. */
+
+typedef void (*backtrace_error_callback) (void *data, const char *msg,
+ int errnum);
+
+/* Create state information for the backtrace routines. This must be
+ called before any of the other routines, and its return value must
+ be passed to all of the other routines. FILENAME is the path name
+ of the executable file; if it is NULL the library will try
+ system-specific path names. If not NULL, FILENAME must point to a
+ permanent buffer. If THREADED is non-zero the state may be
+ accessed by multiple threads simultaneously, and the library will
+ use appropriate atomic operations. If THREADED is zero the state
+ may only be accessed by one thread at a time. This returns a state
+ pointer on success, NULL on error. If an error occurs, this will
+ call the ERROR_CALLBACK routine. */
+
+extern struct backtrace_state *backtrace_create_state (
+ const char *filename, int threaded,
+ backtrace_error_callback error_callback, void *data);
+
+/* The type of the callback argument to the backtrace_full function.
+ DATA is the argument passed to backtrace_full. PC is the program
+ counter. FILENAME is the name of the file containing PC, or NULL
+ if not available. LINENO is the line number in FILENAME containing
+ PC, or 0 if not available. FUNCTION is the name of the function
+ containing PC, or NULL if not available. This should return 0 to
+ continuing tracing. The FILENAME and FUNCTION buffers may become
+ invalid after this function returns. */
+
+typedef int (*backtrace_full_callback) (void *data, uintptr_t pc,
+ const char *filename, int lineno,
+ const char *function);
+
+/* Get a full stack backtrace. SKIP is the number of frames to skip;
+ passing 0 will start the trace with the function calling
+ backtrace_full. DATA is passed to the callback routine. If any
+ call to CALLBACK returns a non-zero value, the stack backtrace
+ stops, and backtrace returns that value; this may be used to limit
+ the number of stack frames desired. If all calls to CALLBACK
+ return 0, backtrace returns 0. The backtrace_full function will
+ make at least one call to either CALLBACK or ERROR_CALLBACK. This
+ function requires debug info for the executable. */
+
+extern int backtrace_full (struct backtrace_state *state, int skip,
+ backtrace_full_callback callback,
+ backtrace_error_callback error_callback,
+ void *data);
+
+/* The type of the callback argument to the backtrace_simple function.
+ DATA is the argument passed to simple_backtrace. PC is the program
+ counter. This should return 0 to continue tracing. */
+
+typedef int (*backtrace_simple_callback) (void *data, uintptr_t pc);
+
+/* Get a simple backtrace. SKIP is the number of frames to skip, as
+ in backtrace. DATA is passed to the callback routine. If any call
+ to CALLBACK returns a non-zero value, the stack backtrace stops,
+ and backtrace_simple returns that value. Otherwise
+ backtrace_simple returns 0. The backtrace_simple function will
+ make at least one call to either CALLBACK or ERROR_CALLBACK. This
+ function does not require any debug info for the executable. */
+
+extern int backtrace_simple (struct backtrace_state *state, int skip,
+ backtrace_simple_callback callback,
+ backtrace_error_callback error_callback,
+ void *data);
+
+/* Print the current backtrace in a user readable format to a FILE.
+ SKIP is the number of frames to skip, as in backtrace_full. Any
+ error messages are printed to stderr. This function requires debug
+ info for the executable. */
+
+extern void backtrace_print (struct backtrace_state *state, int skip, FILE *);
+
+/* Given PC, a program counter in the current program, call the
+ callback function with filename, line number, and function name
+ information. This will normally call the callback function exactly
+ once. However, if the PC happens to describe an inlined call, and
+ the debugging information contains the necessary information, then
+ this may call the callback function multiple times. This will make
+ at least one call to either CALLBACK or ERROR_CALLBACK. This
+ returns the first non-zero value returned by CALLBACK, or 0. */
+
+extern int backtrace_pcinfo (struct backtrace_state *state, uintptr_t pc,
+ backtrace_full_callback callback,
+ backtrace_error_callback error_callback,
+ void *data);
+
+/* The type of the callback argument to backtrace_syminfo. DATA and
+ PC are the arguments passed to backtrace_syminfo. SYMNAME is the
+ name of the symbol for the corresponding code. SYMVAL is the
+ value and SYMSIZE is the size of the symbol. SYMNAME will be NULL
+ if no error occurred but the symbol could not be found. */
+
+typedef void (*backtrace_syminfo_callback) (void *data, uintptr_t pc,
+ const char *symname,
+ uintptr_t symval,
+ uintptr_t symsize);
+
+/* Given ADDR, an address or program counter in the current program,
+ call the callback information with the symbol name and value
+ describing the function or variable in which ADDR may be found.
+ This will call either CALLBACK or ERROR_CALLBACK exactly once.
+ This returns 1 on success, 0 on failure. This function requires
+ the symbol table but does not require the debug info. Note that if
+ the symbol table is present but ADDR could not be found in the
+ table, CALLBACK will be called with a NULL SYMNAME argument.
+ Returns 1 on success, 0 on error. */
+
+extern int backtrace_syminfo (struct backtrace_state *state, uintptr_t addr,
+ backtrace_syminfo_callback callback,
+ backtrace_error_callback error_callback,
+ void *data);
+
+#ifdef __cplusplus
+} /* End extern "C". */
+#endif
+
+#endif
diff --git a/3rdparty/libbacktrace/btest.c b/3rdparty/libbacktrace/btest.c
new file mode 100644
index 000000000..1348d54da
--- /dev/null
+++ b/3rdparty/libbacktrace/btest.c
@@ -0,0 +1,500 @@
+/* btest.c -- Test for libbacktrace library
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+/* This program tests the externally visible interfaces of the
+ libbacktrace library. */
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "filenames.h"
+
+#include "backtrace.h"
+#include "backtrace-supported.h"
+
+#include "testlib.h"
+
+/* Test the backtrace function with non-inlined functions. */
+
+static int test1 (void) __attribute__ ((noinline, unused));
+static int f2 (int) __attribute__ ((noinline));
+static int f3 (int, int) __attribute__ ((noinline));
+
+static int
+test1 (void)
+{
+ /* Returning a value here and elsewhere avoids a tailcall which
+ would mess up the backtrace. */
+ return f2 (__LINE__) + 1;
+}
+
+static int
+f2 (int f1line)
+{
+ return f3 (f1line, __LINE__) + 2;
+}
+
+static int
+f3 (int f1line, int f2line)
+{
+ struct info all[20];
+ struct bdata data;
+ int f3line;
+ int i;
+
+ data.all = &all[0];
+ data.index = 0;
+ data.max = 20;
+ data.failed = 0;
+
+ f3line = __LINE__ + 1;
+ i = backtrace_full (state, 0, callback_one, error_callback_one, &data);
+
+ if (i != 0)
+ {
+ fprintf (stderr, "test1: unexpected return value %d\n", i);
+ data.failed = 1;
+ }
+
+ if (data.index < 3)
+ {
+ fprintf (stderr,
+ "test1: not enough frames; got %zu, expected at least 3\n",
+ data.index);
+ data.failed = 1;
+ }
+
+ check ("test1", 0, all, f3line, "f3", "btest.c", &data.failed);
+ check ("test1", 1, all, f2line, "f2", "btest.c", &data.failed);
+ check ("test1", 2, all, f1line, "test1", "btest.c", &data.failed);
+
+ printf ("%s: backtrace_full noinline\n", data.failed ? "FAIL" : "PASS");
+
+ if (data.failed)
+ ++failures;
+
+ return failures;
+}
+
+/* Test the backtrace function with inlined functions. */
+
+static inline int test2 (void) __attribute__ ((always_inline, unused));
+static inline int f12 (int) __attribute__ ((always_inline));
+static inline int f13 (int, int) __attribute__ ((always_inline));
+
+static inline int
+test2 (void)
+{
+ return f12 (__LINE__) + 1;
+}
+
+static inline int
+f12 (int f1line)
+{
+ return f13 (f1line, __LINE__) + 2;
+}
+
+static inline int
+f13 (int f1line, int f2line)
+{
+ struct info all[20];
+ struct bdata data;
+ int f3line;
+ int i;
+
+ data.all = &all[0];
+ data.index = 0;
+ data.max = 20;
+ data.failed = 0;
+
+ f3line = __LINE__ + 1;
+ i = backtrace_full (state, 0, callback_one, error_callback_one, &data);
+
+ if (i != 0)
+ {
+ fprintf (stderr, "test2: unexpected return value %d\n", i);
+ data.failed = 1;
+ }
+
+ check ("test2", 0, all, f3line, "f13", "btest.c", &data.failed);
+ check ("test2", 1, all, f2line, "f12", "btest.c", &data.failed);
+ check ("test2", 2, all, f1line, "test2", "btest.c", &data.failed);
+
+ printf ("%s: backtrace_full inline\n", data.failed ? "FAIL" : "PASS");
+
+ if (data.failed)
+ ++failures;
+
+ return failures;
+}
+
+/* Test the backtrace_simple function with non-inlined functions. */
+
+static int test3 (void) __attribute__ ((noinline, unused));
+static int f22 (int) __attribute__ ((noinline));
+static int f23 (int, int) __attribute__ ((noinline));
+
+static int
+test3 (void)
+{
+ return f22 (__LINE__) + 1;
+}
+
+static int
+f22 (int f1line)
+{
+ return f23 (f1line, __LINE__) + 2;
+}
+
+static int
+f23 (int f1line, int f2line)
+{
+ uintptr_t addrs[20];
+ struct sdata data;
+ int f3line;
+ int i;
+
+ data.addrs = &addrs[0];
+ data.index = 0;
+ data.max = 20;
+ data.failed = 0;
+
+ f3line = __LINE__ + 1;
+ i = backtrace_simple (state, 0, callback_two, error_callback_two, &data);
+
+ if (i != 0)
+ {
+ fprintf (stderr, "test3: unexpected return value %d\n", i);
+ data.failed = 1;
+ }
+
+ if (!data.failed)
+ {
+ struct info all[20];
+ struct bdata bdata;
+ int j;
+
+ bdata.all = &all[0];
+ bdata.index = 0;
+ bdata.max = 20;
+ bdata.failed = 0;
+
+ for (j = 0; j < 3; ++j)
+ {
+ i = backtrace_pcinfo (state, addrs[j], callback_one,
+ error_callback_one, &bdata);
+ if (i != 0)
+ {
+ fprintf (stderr,
+ ("test3: unexpected return value "
+ "from backtrace_pcinfo %d\n"),
+ i);
+ bdata.failed = 1;
+ }
+ if (!bdata.failed && bdata.index != (size_t) (j + 1))
+ {
+ fprintf (stderr,
+ ("wrong number of calls from backtrace_pcinfo "
+ "got %u expected %d\n"),
+ (unsigned int) bdata.index, j + 1);
+ bdata.failed = 1;
+ }
+ }
+
+ check ("test3", 0, all, f3line, "f23", "btest.c", &bdata.failed);
+ check ("test3", 1, all, f2line, "f22", "btest.c", &bdata.failed);
+ check ("test3", 2, all, f1line, "test3", "btest.c", &bdata.failed);
+
+ if (bdata.failed)
+ data.failed = 1;
+
+ for (j = 0; j < 3; ++j)
+ {
+ struct symdata symdata;
+
+ symdata.name = NULL;
+ symdata.val = 0;
+ symdata.size = 0;
+ symdata.failed = 0;
+
+ i = backtrace_syminfo (state, addrs[j], callback_three,
+ error_callback_three, &symdata);
+ if (i == 0)
+ {
+ fprintf (stderr,
+ ("test3: [%d]: unexpected return value "
+ "from backtrace_syminfo %d\n"),
+ j, i);
+ symdata.failed = 1;
+ }
+
+ if (!symdata.failed)
+ {
+ const char *expected;
+
+ switch (j)
+ {
+ case 0:
+ expected = "f23";
+ break;
+ case 1:
+ expected = "f22";
+ break;
+ case 2:
+ expected = "test3";
+ break;
+ default:
+ assert (0);
+ }
+
+ if (symdata.name == NULL)
+ {
+ fprintf (stderr, "test3: [%d]: NULL syminfo name\n", j);
+ symdata.failed = 1;
+ }
+ /* Use strncmp, not strcmp, because GCC might create a
+ clone. */
+ else if (strncmp (symdata.name, expected, strlen (expected))
+ != 0)
+ {
+ fprintf (stderr,
+ ("test3: [%d]: unexpected syminfo name "
+ "got %s expected %s\n"),
+ j, symdata.name, expected);
+ symdata.failed = 1;
+ }
+ }
+
+ if (symdata.failed)
+ data.failed = 1;
+ }
+ }
+
+ printf ("%s: backtrace_simple noinline\n", data.failed ? "FAIL" : "PASS");
+
+ if (data.failed)
+ ++failures;
+
+ return failures;
+}
+
+/* Test the backtrace_simple function with inlined functions. */
+
+static inline int test4 (void) __attribute__ ((always_inline, unused));
+static inline int f32 (int) __attribute__ ((always_inline));
+static inline int f33 (int, int) __attribute__ ((always_inline));
+
+static inline int
+test4 (void)
+{
+ return f32 (__LINE__) + 1;
+}
+
+static inline int
+f32 (int f1line)
+{
+ return f33 (f1line, __LINE__) + 2;
+}
+
+static inline int
+f33 (int f1line, int f2line)
+{
+ uintptr_t addrs[20];
+ struct sdata data;
+ int f3line;
+ int i;
+
+ data.addrs = &addrs[0];
+ data.index = 0;
+ data.max = 20;
+ data.failed = 0;
+
+ f3line = __LINE__ + 1;
+ i = backtrace_simple (state, 0, callback_two, error_callback_two, &data);
+
+ if (i != 0)
+ {
+ fprintf (stderr, "test3: unexpected return value %d\n", i);
+ data.failed = 1;
+ }
+
+ if (!data.failed)
+ {
+ struct info all[20];
+ struct bdata bdata;
+
+ bdata.all = &all[0];
+ bdata.index = 0;
+ bdata.max = 20;
+ bdata.failed = 0;
+
+ i = backtrace_pcinfo (state, addrs[0], callback_one, error_callback_one,
+ &bdata);
+ if (i != 0)
+ {
+ fprintf (stderr,
+ ("test4: unexpected return value "
+ "from backtrace_pcinfo %d\n"),
+ i);
+ bdata.failed = 1;
+ }
+
+ check ("test4", 0, all, f3line, "f33", "btest.c", &bdata.failed);
+ check ("test4", 1, all, f2line, "f32", "btest.c", &bdata.failed);
+ check ("test4", 2, all, f1line, "test4", "btest.c", &bdata.failed);
+
+ if (bdata.failed)
+ data.failed = 1;
+ }
+
+ printf ("%s: backtrace_simple inline\n", data.failed ? "FAIL" : "PASS");
+
+ if (data.failed)
+ ++failures;
+
+ return failures;
+}
+
+static int test5 (void) __attribute__ ((unused));
+
+int global = 1;
+
+static int
+test5 (void)
+{
+ struct symdata symdata;
+ int i;
+ uintptr_t addr = (uintptr_t) &global;
+
+ if (sizeof (global) > 1)
+ addr += 1;
+
+ symdata.name = NULL;
+ symdata.val = 0;
+ symdata.size = 0;
+ symdata.failed = 0;
+
+ i = backtrace_syminfo (state, addr, callback_three,
+ error_callback_three, &symdata);
+ if (i == 0)
+ {
+ fprintf (stderr,
+ "test5: unexpected return value from backtrace_syminfo %d\n",
+ i);
+ symdata.failed = 1;
+ }
+
+ if (!symdata.failed)
+ {
+ if (symdata.name == NULL)
+ {
+ fprintf (stderr, "test5: NULL syminfo name\n");
+ symdata.failed = 1;
+ }
+ else if (strcmp (symdata.name, "global") != 0)
+ {
+ fprintf (stderr,
+ "test5: unexpected syminfo name got %s expected %s\n",
+ symdata.name, "global");
+ symdata.failed = 1;
+ }
+ else if (symdata.val != (uintptr_t) &global)
+ {
+ fprintf (stderr,
+ "test5: unexpected syminfo value got %lx expected %lx\n",
+ (unsigned long) symdata.val,
+ (unsigned long) (uintptr_t) &global);
+ symdata.failed = 1;
+ }
+ else if (symdata.size != sizeof (global))
+ {
+ fprintf (stderr,
+ "test5: unexpected syminfo size got %lx expected %lx\n",
+ (unsigned long) symdata.size,
+ (unsigned long) sizeof (global));
+ symdata.failed = 1;
+ }
+ }
+
+ printf ("%s: backtrace_syminfo variable\n",
+ symdata.failed ? "FAIL" : "PASS");
+
+ if (symdata.failed)
+ ++failures;
+
+ return failures;
+}
+
+/* Check that are no files left open. */
+
+static void
+check_open_files (void)
+{
+ int i;
+
+ for (i = 3; i < 10; i++)
+ {
+ if (close (i) == 0)
+ {
+ fprintf (stderr,
+ "ERROR: descriptor %d still open after tests complete\n",
+ i);
+ ++failures;
+ }
+ }
+}
+
+/* Run all the tests. */
+
+int
+main (int argc ATTRIBUTE_UNUSED, char **argv)
+{
+ state = backtrace_create_state (argv[0], BACKTRACE_SUPPORTS_THREADS,
+ error_callback_create, NULL);
+
+#if BACKTRACE_SUPPORTED
+ test1 ();
+ test2 ();
+ test3 ();
+ test4 ();
+#if BACKTRACE_SUPPORTS_DATA
+ test5 ();
+#endif
+#endif
+
+ check_open_files ();
+
+ exit (failures ? EXIT_FAILURE : EXIT_SUCCESS);
+}
diff --git a/3rdparty/libbacktrace/config.h b/3rdparty/libbacktrace/config.h
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/3rdparty/libbacktrace/config.h
diff --git a/3rdparty/libbacktrace/dwarf.c b/3rdparty/libbacktrace/dwarf.c
new file mode 100644
index 000000000..c378b2517
--- /dev/null
+++ b/3rdparty/libbacktrace/dwarf.c
@@ -0,0 +1,3126 @@
+/* dwarf.c -- Get file/line information from DWARF for backtraces.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "backtrace.h"
+#include "internal.h"
+
+/* DWARF constants. */
+
+enum dwarf_tag {
+ DW_TAG_entry_point = 0x3,
+ DW_TAG_compile_unit = 0x11,
+ DW_TAG_inlined_subroutine = 0x1d,
+ DW_TAG_subprogram = 0x2e,
+};
+
+enum dwarf_form {
+ DW_FORM_addr = 0x1,
+ DW_FORM_block2 = 0x3,
+ DW_FORM_block4 = 0x4,
+ DW_FORM_data2 = 0x5,
+ DW_FORM_data4 = 0x6,
+ DW_FORM_data8 = 0x07,
+ DW_FORM_string = 0x08,
+ DW_FORM_block = 0x09,
+ DW_FORM_block1 = 0x0a,
+ DW_FORM_data1 = 0x0b,
+ DW_FORM_flag = 0x0c,
+ DW_FORM_sdata = 0x0d,
+ DW_FORM_strp = 0x0e,
+ DW_FORM_udata = 0x0f,
+ DW_FORM_ref_addr = 0x10,
+ DW_FORM_ref1 = 0x11,
+ DW_FORM_ref2 = 0x12,
+ DW_FORM_ref4 = 0x13,
+ DW_FORM_ref8 = 0x14,
+ DW_FORM_ref_udata = 0x15,
+ DW_FORM_indirect = 0x16,
+ DW_FORM_sec_offset = 0x17,
+ DW_FORM_exprloc = 0x18,
+ DW_FORM_flag_present = 0x19,
+ DW_FORM_ref_sig8 = 0x20,
+ DW_FORM_GNU_addr_index = 0x1f01,
+ DW_FORM_GNU_str_index = 0x1f02,
+ DW_FORM_GNU_ref_alt = 0x1f20,
+ DW_FORM_GNU_strp_alt = 0x1f21,
+};
+
+enum dwarf_attribute {
+ DW_AT_name = 0x3,
+ DW_AT_stmt_list = 0x10,
+ DW_AT_low_pc = 0x11,
+ DW_AT_high_pc = 0x12,
+ DW_AT_comp_dir = 0x1b,
+ DW_AT_abstract_origin = 0x31,
+ DW_AT_specification = 0x47,
+ DW_AT_ranges = 0x55,
+ DW_AT_call_file = 0x58,
+ DW_AT_call_line = 0x59,
+ DW_AT_linkage_name = 0x6e,
+ DW_AT_MIPS_linkage_name = 0x2007,
+};
+
+enum dwarf_line_number_op {
+ DW_LNS_extended_op = 0x0,
+ DW_LNS_copy = 0x1,
+ DW_LNS_advance_pc = 0x2,
+ DW_LNS_advance_line = 0x3,
+ DW_LNS_set_file = 0x4,
+ DW_LNS_set_column = 0x5,
+ DW_LNS_negate_stmt = 0x6,
+ DW_LNS_set_basic_block = 0x7,
+ DW_LNS_const_add_pc = 0x8,
+ DW_LNS_fixed_advance_pc = 0x9,
+ DW_LNS_set_prologue_end = 0xa,
+ DW_LNS_set_epilogue_begin = 0xb,
+ DW_LNS_set_isa = 0xc,
+};
+
+enum dwarf_extedned_line_number_op {
+ DW_LNE_end_sequence = 0x1,
+ DW_LNE_set_address = 0x2,
+ DW_LNE_define_file = 0x3,
+ DW_LNE_set_discriminator = 0x4,
+};
+
+#if defined(__MSDOS__) || defined(_WIN32) || defined(__OS2__) || defined (__CYGWIN__)
+# define IS_DIR_SEPARATOR(c) ((c) == '/' || (c) == '\\')
+#define HAS_DRIVE_SPEC(f) ((f)[0] && (f)[1] == ':')
+# define IS_ABSOLUTE_PATH(f) (IS_DIR_SEPARATOR(f[0]) || HAS_DRIVE_SPEC(f))
+#else
+# define IS_DIR_SEPARATOR(c) ((c) == '/')
+# define IS_ABSOLUTE_PATH(f) IS_DIR_SEPARATOR(f[0])
+#endif
+
+#if !defined(HAVE_DECL_STRNLEN) || !HAVE_DECL_STRNLEN
+
+/* If strnlen is not declared, provide our own version. */
+
+static size_t
+xstrnlen (const char *s, size_t maxlen)
+{
+ size_t i;
+
+ for (i = 0; i < maxlen; ++i)
+ if (s[i] == '\0')
+ break;
+ return i;
+}
+
+#define strnlen xstrnlen
+
+#endif
+
+/* A buffer to read DWARF info. */
+
+struct dwarf_buf
+{
+ /* Buffer name for error messages. */
+ const char *name;
+ /* Start of the buffer. */
+ const unsigned char *start;
+ /* Next byte to read. */
+ const unsigned char *buf;
+ /* The number of bytes remaining. */
+ size_t left;
+ /* Whether the data is big-endian. */
+ int is_bigendian;
+ /* Error callback routine. */
+ backtrace_error_callback error_callback;
+ /* Data for error_callback. */
+ void *data;
+ /* Non-zero if we've reported an underflow error. */
+ int reported_underflow;
+};
+
+/* A single attribute in a DWARF abbreviation. */
+
+struct attr
+{
+ /* The attribute name. */
+ enum dwarf_attribute name;
+ /* The attribute form. */
+ enum dwarf_form form;
+};
+
+/* A single DWARF abbreviation. */
+
+struct abbrev
+{
+ /* The abbrev code--the number used to refer to the abbrev. */
+ uint64_t code;
+ /* The entry tag. */
+ enum dwarf_tag tag;
+ /* Non-zero if this abbrev has child entries. */
+ int has_children;
+ /* The number of attributes. */
+ size_t num_attrs;
+ /* The attributes. */
+ struct attr *attrs;
+};
+
+/* The DWARF abbreviations for a compilation unit. This structure
+ only exists while reading the compilation unit. Most DWARF readers
+ seem to a hash table to map abbrev ID's to abbrev entries.
+ However, we primarily care about GCC, and GCC simply issues ID's in
+ numerical order starting at 1. So we simply keep a sorted vector,
+ and try to just look up the code. */
+
+struct abbrevs
+{
+ /* The number of abbrevs in the vector. */
+ size_t num_abbrevs;
+ /* The abbrevs, sorted by the code field. */
+ struct abbrev *abbrevs;
+};
+
+/* The different kinds of attribute values. */
+
+enum attr_val_encoding
+{
+ /* An address. */
+ ATTR_VAL_ADDRESS,
+ /* A unsigned integer. */
+ ATTR_VAL_UINT,
+ /* A sigd integer. */
+ ATTR_VAL_SINT,
+ /* A string. */
+ ATTR_VAL_STRING,
+ /* An offset to other data in the containing unit. */
+ ATTR_VAL_REF_UNIT,
+ /* An offset to other data within the .dwarf_info section. */
+ ATTR_VAL_REF_INFO,
+ /* An offset to data in some other section. */
+ ATTR_VAL_REF_SECTION,
+ /* A type signature. */
+ ATTR_VAL_REF_TYPE,
+ /* A block of data (not represented). */
+ ATTR_VAL_BLOCK,
+ /* An expression (not represented). */
+ ATTR_VAL_EXPR,
+};
+
+/* An attribute value. */
+
+struct attr_val
+{
+ /* How the value is stored in the field u. */
+ enum attr_val_encoding encoding;
+ union
+ {
+ /* ATTR_VAL_ADDRESS, ATTR_VAL_UINT, ATTR_VAL_REF*. */
+ uint64_t uint;
+ /* ATTR_VAL_SINT. */
+ int64_t sint;
+ /* ATTR_VAL_STRING. */
+ const char *string;
+ /* ATTR_VAL_BLOCK not stored. */
+ } u;
+};
+
+/* The line number program header. */
+
+struct line_header
+{
+ /* The version of the line number information. */
+ int version;
+ /* The minimum instruction length. */
+ unsigned int min_insn_len;
+ /* The maximum number of ops per instruction. */
+ unsigned int max_ops_per_insn;
+ /* The line base for special opcodes. */
+ int line_base;
+ /* The line range for special opcodes. */
+ unsigned int line_range;
+ /* The opcode base--the first special opcode. */
+ unsigned int opcode_base;
+ /* Opcode lengths, indexed by opcode - 1. */
+ const unsigned char *opcode_lengths;
+ /* The number of directory entries. */
+ size_t dirs_count;
+ /* The directory entries. */
+ const char **dirs;
+ /* The number of filenames. */
+ size_t filenames_count;
+ /* The filenames. */
+ const char **filenames;
+};
+
+/* Map a single PC value to a file/line. We will keep a vector of
+ these sorted by PC value. Each file/line will be correct from the
+ PC up to the PC of the next entry if there is one. We allocate one
+ extra entry at the end so that we can use bsearch. */
+
+struct line
+{
+ /* PC. */
+ uintptr_t pc;
+ /* File name. Many entries in the array are expected to point to
+ the same file name. */
+ const char *filename;
+ /* Line number. */
+ int lineno;
+ /* Index of the object in the original array read from the DWARF
+ section, before it has been sorted. The index makes it possible
+ to use Quicksort and maintain stability. */
+ int idx;
+};
+
+/* A growable vector of line number information. This is used while
+ reading the line numbers. */
+
+struct line_vector
+{
+ /* Memory. This is an array of struct line. */
+ struct backtrace_vector vec;
+ /* Number of valid mappings. */
+ size_t count;
+};
+
+/* A function described in the debug info. */
+
+struct function
+{
+ /* The name of the function. */
+ const char *name;
+ /* If this is an inlined function, the filename of the call
+ site. */
+ const char *caller_filename;
+ /* If this is an inlined function, the line number of the call
+ site. */
+ int caller_lineno;
+ /* Map PC ranges to inlined functions. */
+ struct function_addrs *function_addrs;
+ size_t function_addrs_count;
+};
+
+/* An address range for a function. This maps a PC value to a
+ specific function. */
+
+struct function_addrs
+{
+ /* Range is LOW <= PC < HIGH. */
+ uint64_t low;
+ uint64_t high;
+ /* Function for this address range. */
+ struct function *function;
+};
+
+/* A growable vector of function address ranges. */
+
+struct function_vector
+{
+ /* Memory. This is an array of struct function_addrs. */
+ struct backtrace_vector vec;
+ /* Number of address ranges present. */
+ size_t count;
+};
+
+/* A DWARF compilation unit. This only holds the information we need
+ to map a PC to a file and line. */
+
+struct unit
+{
+ /* The first entry for this compilation unit. */
+ const unsigned char *unit_data;
+ /* The length of the data for this compilation unit. */
+ size_t unit_data_len;
+ /* The offset of UNIT_DATA from the start of the information for
+ this compilation unit. */
+ size_t unit_data_offset;
+ /* DWARF version. */
+ int version;
+ /* Whether unit is DWARF64. */
+ int is_dwarf64;
+ /* Address size. */
+ int addrsize;
+ /* Offset into line number information. */
+ off_t lineoff;
+ /* Primary source file. */
+ const char *filename;
+ /* Compilation command working directory. */
+ const char *comp_dir;
+ /* Absolute file name, only set if needed. */
+ const char *abs_filename;
+ /* The abbreviations for this unit. */
+ struct abbrevs abbrevs;
+
+ /* The fields above this point are read in during initialization and
+ may be accessed freely. The fields below this point are read in
+ as needed, and therefore require care, as different threads may
+ try to initialize them simultaneously. */
+
+ /* PC to line number mapping. This is NULL if the values have not
+ been read. This is (struct line *) -1 if there was an error
+ reading the values. */
+ struct line *lines;
+ /* Number of entries in lines. */
+ size_t lines_count;
+ /* PC ranges to function. */
+ struct function_addrs *function_addrs;
+ size_t function_addrs_count;
+};
+
+/* An address range for a compilation unit. This maps a PC value to a
+ specific compilation unit. Note that we invert the representation
+ in DWARF: instead of listing the units and attaching a list of
+ ranges, we list the ranges and have each one point to the unit.
+ This lets us do a binary search to find the unit. */
+
+struct unit_addrs
+{
+ /* Range is LOW <= PC < HIGH. */
+ uint64_t low;
+ uint64_t high;
+ /* Compilation unit for this address range. */
+ struct unit *u;
+};
+
+/* A growable vector of compilation unit address ranges. */
+
+struct unit_addrs_vector
+{
+ /* Memory. This is an array of struct unit_addrs. */
+ struct backtrace_vector vec;
+ /* Number of address ranges present. */
+ size_t count;
+};
+
+/* The information we need to map a PC to a file and line. */
+
+struct dwarf_data
+{
+ /* The data for the next file we know about. */
+ struct dwarf_data *next;
+ /* The base address for this file. */
+ uintptr_t base_address;
+ /* A sorted list of address ranges. */
+ struct unit_addrs *addrs;
+ /* Number of address ranges in list. */
+ size_t addrs_count;
+ /* The unparsed .debug_info section. */
+ const unsigned char *dwarf_info;
+ size_t dwarf_info_size;
+ /* The unparsed .debug_line section. */
+ const unsigned char *dwarf_line;
+ size_t dwarf_line_size;
+ /* The unparsed .debug_ranges section. */
+ const unsigned char *dwarf_ranges;
+ size_t dwarf_ranges_size;
+ /* The unparsed .debug_str section. */
+ const unsigned char *dwarf_str;
+ size_t dwarf_str_size;
+ /* Whether the data is big-endian or not. */
+ int is_bigendian;
+ /* A vector used for function addresses. We keep this here so that
+ we can grow the vector as we read more functions. */
+ struct function_vector fvec;
+};
+
+/* Report an error for a DWARF buffer. */
+
+static void
+dwarf_buf_error (struct dwarf_buf *buf, const char *msg)
+{
+ char b[200];
+
+ snprintf (b, sizeof b, "%s in %s at %d",
+ msg, buf->name, (int) (buf->buf - buf->start));
+ buf->error_callback (buf->data, b, 0);
+}
+
+/* Require at least COUNT bytes in BUF. Return 1 if all is well, 0 on
+ error. */
+
+static int
+require (struct dwarf_buf *buf, size_t count)
+{
+ if (buf->left >= count)
+ return 1;
+
+ if (!buf->reported_underflow)
+ {
+ dwarf_buf_error (buf, "DWARF underflow");
+ buf->reported_underflow = 1;
+ }
+
+ return 0;
+}
+
+/* Advance COUNT bytes in BUF. Return 1 if all is well, 0 on
+ error. */
+
+static int
+advance (struct dwarf_buf *buf, size_t count)
+{
+ if (!require (buf, count))
+ return 0;
+ buf->buf += count;
+ buf->left -= count;
+ return 1;
+}
+
+/* Read one byte from BUF and advance 1 byte. */
+
+static unsigned char
+read_byte (struct dwarf_buf *buf)
+{
+ const unsigned char *p = buf->buf;
+
+ if (!advance (buf, 1))
+ return 0;
+ return p[0];
+}
+
+/* Read a signed char from BUF and advance 1 byte. */
+
+static signed char
+read_sbyte (struct dwarf_buf *buf)
+{
+ const unsigned char *p = buf->buf;
+
+ if (!advance (buf, 1))
+ return 0;
+ return (*p ^ 0x80) - 0x80;
+}
+
+/* Read a uint16 from BUF and advance 2 bytes. */
+
+static uint16_t
+read_uint16 (struct dwarf_buf *buf)
+{
+ const unsigned char *p = buf->buf;
+
+ if (!advance (buf, 2))
+ return 0;
+ if (buf->is_bigendian)
+ return ((uint16_t) p[0] << 8) | (uint16_t) p[1];
+ else
+ return ((uint16_t) p[1] << 8) | (uint16_t) p[0];
+}
+
+/* Read a uint32 from BUF and advance 4 bytes. */
+
+static uint32_t
+read_uint32 (struct dwarf_buf *buf)
+{
+ const unsigned char *p = buf->buf;
+
+ if (!advance (buf, 4))
+ return 0;
+ if (buf->is_bigendian)
+ return (((uint32_t) p[0] << 24) | ((uint32_t) p[1] << 16)
+ | ((uint32_t) p[2] << 8) | (uint32_t) p[3]);
+ else
+ return (((uint32_t) p[3] << 24) | ((uint32_t) p[2] << 16)
+ | ((uint32_t) p[1] << 8) | (uint32_t) p[0]);
+}
+
+/* Read a uint64 from BUF and advance 8 bytes. */
+
+static uint64_t
+read_uint64 (struct dwarf_buf *buf)
+{
+ const unsigned char *p = buf->buf;
+
+ if (!advance (buf, 8))
+ return 0;
+ if (buf->is_bigendian)
+ return (((uint64_t) p[0] << 56) | ((uint64_t) p[1] << 48)
+ | ((uint64_t) p[2] << 40) | ((uint64_t) p[3] << 32)
+ | ((uint64_t) p[4] << 24) | ((uint64_t) p[5] << 16)
+ | ((uint64_t) p[6] << 8) | (uint64_t) p[7]);
+ else
+ return (((uint64_t) p[7] << 56) | ((uint64_t) p[6] << 48)
+ | ((uint64_t) p[5] << 40) | ((uint64_t) p[4] << 32)
+ | ((uint64_t) p[3] << 24) | ((uint64_t) p[2] << 16)
+ | ((uint64_t) p[1] << 8) | (uint64_t) p[0]);
+}
+
+/* Read an offset from BUF and advance the appropriate number of
+ bytes. */
+
+static uint64_t
+read_offset (struct dwarf_buf *buf, int is_dwarf64)
+{
+ if (is_dwarf64)
+ return read_uint64 (buf);
+ else
+ return read_uint32 (buf);
+}
+
+/* Read an address from BUF and advance the appropriate number of
+ bytes. */
+
+static uint64_t
+read_address (struct dwarf_buf *buf, int addrsize)
+{
+ switch (addrsize)
+ {
+ case 1:
+ return read_byte (buf);
+ case 2:
+ return read_uint16 (buf);
+ case 4:
+ return read_uint32 (buf);
+ case 8:
+ return read_uint64 (buf);
+ default:
+ dwarf_buf_error (buf, "unrecognized address size");
+ return 0;
+ }
+}
+
+/* Return whether a value is the highest possible address, given the
+ address size. */
+
+static int
+is_highest_address (uint64_t address, int addrsize)
+{
+ switch (addrsize)
+ {
+ case 1:
+ return address == (unsigned char) -1;
+ case 2:
+ return address == (uint16_t) -1;
+ case 4:
+ return address == (uint32_t) -1;
+ case 8:
+ return address == (uint64_t) -1;
+ default:
+ return 0;
+ }
+}
+
+/* Read an unsigned LEB128 number. */
+
+static uint64_t
+read_uleb128 (struct dwarf_buf *buf)
+{
+ uint64_t ret;
+ unsigned int shift;
+ int overflow;
+ unsigned char b;
+
+ ret = 0;
+ shift = 0;
+ overflow = 0;
+ do
+ {
+ const unsigned char *p;
+
+ p = buf->buf;
+ if (!advance (buf, 1))
+ return 0;
+ b = *p;
+ if (shift < 64)
+ ret |= ((uint64_t) (b & 0x7f)) << shift;
+ else if (!overflow)
+ {
+ dwarf_buf_error (buf, "LEB128 overflows uint64_t");
+ overflow = 1;
+ }
+ shift += 7;
+ }
+ while ((b & 0x80) != 0);
+
+ return ret;
+}
+
+/* Read a signed LEB128 number. */
+
+static int64_t
+read_sleb128 (struct dwarf_buf *buf)
+{
+ uint64_t val;
+ unsigned int shift;
+ int overflow;
+ unsigned char b;
+
+ val = 0;
+ shift = 0;
+ overflow = 0;
+ do
+ {
+ const unsigned char *p;
+
+ p = buf->buf;
+ if (!advance (buf, 1))
+ return 0;
+ b = *p;
+ if (shift < 64)
+ val |= ((uint64_t) (b & 0x7f)) << shift;
+ else if (!overflow)
+ {
+ dwarf_buf_error (buf, "signed LEB128 overflows uint64_t");
+ overflow = 1;
+ }
+ shift += 7;
+ }
+ while ((b & 0x80) != 0);
+
+ if ((b & 0x40) != 0 && shift < 64)
+ val |= ((uint64_t) -1) << shift;
+
+ return (int64_t) val;
+}
+
+/* Return the length of an LEB128 number. */
+
+static size_t
+leb128_len (const unsigned char *p)
+{
+ size_t ret;
+
+ ret = 1;
+ while ((*p & 0x80) != 0)
+ {
+ ++p;
+ ++ret;
+ }
+ return ret;
+}
+
+/* Free an abbreviations structure. */
+
+static void
+free_abbrevs (struct backtrace_state *state, struct abbrevs *abbrevs,
+ backtrace_error_callback error_callback, void *data)
+{
+ size_t i;
+
+ for (i = 0; i < abbrevs->num_abbrevs; ++i)
+ backtrace_free (state, abbrevs->abbrevs[i].attrs,
+ abbrevs->abbrevs[i].num_attrs * sizeof (struct attr),
+ error_callback, data);
+ backtrace_free (state, abbrevs->abbrevs,
+ abbrevs->num_abbrevs * sizeof (struct abbrev),
+ error_callback, data);
+ abbrevs->num_abbrevs = 0;
+ abbrevs->abbrevs = NULL;
+}
+
+/* Read an attribute value. Returns 1 on success, 0 on failure. If
+ the value can be represented as a uint64_t, sets *VAL and sets
+ *IS_VALID to 1. We don't try to store the value of other attribute
+ forms, because we don't care about them. */
+
+static int
+read_attribute (enum dwarf_form form, struct dwarf_buf *buf,
+ int is_dwarf64, int version, int addrsize,
+ const unsigned char *dwarf_str, size_t dwarf_str_size,
+ struct attr_val *val)
+{
+ /* Avoid warnings about val.u.FIELD may be used uninitialized if
+ this function is inlined. The warnings aren't valid but can
+ occur because the different fields are set and used
+ conditionally. */
+ memset (val, 0, sizeof *val);
+
+ switch (form)
+ {
+ case DW_FORM_addr:
+ val->encoding = ATTR_VAL_ADDRESS;
+ val->u.uint = read_address (buf, addrsize);
+ return 1;
+ case DW_FORM_block2:
+ val->encoding = ATTR_VAL_BLOCK;
+ return advance (buf, read_uint16 (buf));
+ case DW_FORM_block4:
+ val->encoding = ATTR_VAL_BLOCK;
+ return advance (buf, read_uint32 (buf));
+ case DW_FORM_data2:
+ val->encoding = ATTR_VAL_UINT;
+ val->u.uint = read_uint16 (buf);
+ return 1;
+ case DW_FORM_data4:
+ val->encoding = ATTR_VAL_UINT;
+ val->u.uint = read_uint32 (buf);
+ return 1;
+ case DW_FORM_data8:
+ val->encoding = ATTR_VAL_UINT;
+ val->u.uint = read_uint64 (buf);
+ return 1;
+ case DW_FORM_string:
+ val->encoding = ATTR_VAL_STRING;
+ val->u.string = (const char *) buf->buf;
+ return advance (buf, strnlen ((const char *) buf->buf, buf->left) + 1);
+ case DW_FORM_block:
+ val->encoding = ATTR_VAL_BLOCK;
+ return advance (buf, read_uleb128 (buf));
+ case DW_FORM_block1:
+ val->encoding = ATTR_VAL_BLOCK;
+ return advance (buf, read_byte (buf));
+ case DW_FORM_data1:
+ val->encoding = ATTR_VAL_UINT;
+ val->u.uint = read_byte (buf);
+ return 1;
+ case DW_FORM_flag:
+ val->encoding = ATTR_VAL_UINT;
+ val->u.uint = read_byte (buf);
+ return 1;
+ case DW_FORM_sdata:
+ val->encoding = ATTR_VAL_SINT;
+ val->u.sint = read_sleb128 (buf);
+ return 1;
+ case DW_FORM_strp:
+ {
+ uint64_t offset;
+
+ offset = read_offset (buf, is_dwarf64);
+ if (offset >= dwarf_str_size)
+ {
+ dwarf_buf_error (buf, "DW_FORM_strp out of range");
+ return 0;
+ }
+ val->encoding = ATTR_VAL_STRING;
+ val->u.string = (const char *) dwarf_str + offset;
+ return 1;
+ }
+ case DW_FORM_udata:
+ val->encoding = ATTR_VAL_UINT;
+ val->u.uint = read_uleb128 (buf);
+ return 1;
+ case DW_FORM_ref_addr:
+ val->encoding = ATTR_VAL_REF_INFO;
+ if (version == 2)
+ val->u.uint = read_address (buf, addrsize);
+ else
+ val->u.uint = read_offset (buf, is_dwarf64);
+ return 1;
+ case DW_FORM_ref1:
+ val->encoding = ATTR_VAL_REF_UNIT;
+ val->u.uint = read_byte (buf);
+ return 1;
+ case DW_FORM_ref2:
+ val->encoding = ATTR_VAL_REF_UNIT;
+ val->u.uint = read_uint16 (buf);
+ return 1;
+ case DW_FORM_ref4:
+ val->encoding = ATTR_VAL_REF_UNIT;
+ val->u.uint = read_uint32 (buf);
+ return 1;
+ case DW_FORM_ref8:
+ val->encoding = ATTR_VAL_REF_UNIT;
+ val->u.uint = read_uint64 (buf);
+ return 1;
+ case DW_FORM_ref_udata:
+ val->encoding = ATTR_VAL_REF_UNIT;
+ val->u.uint = read_uleb128 (buf);
+ return 1;
+ case DW_FORM_indirect:
+ {
+ uint64_t form1;
+
+ form1 = read_uleb128 (buf);
+ return read_attribute ((enum dwarf_form) form1, buf, is_dwarf64,
+ version, addrsize, dwarf_str, dwarf_str_size,
+ val);
+ }
+ case DW_FORM_sec_offset:
+ val->encoding = ATTR_VAL_REF_SECTION;
+ val->u.uint = read_offset (buf, is_dwarf64);
+ return 1;
+ case DW_FORM_exprloc:
+ val->encoding = ATTR_VAL_EXPR;
+ return advance (buf, read_uleb128 (buf));
+ case DW_FORM_flag_present:
+ val->encoding = ATTR_VAL_UINT;
+ val->u.uint = 1;
+ return 1;
+ case DW_FORM_ref_sig8:
+ val->encoding = ATTR_VAL_REF_TYPE;
+ val->u.uint = read_uint64 (buf);
+ return 1;
+ case DW_FORM_GNU_addr_index:
+ val->encoding = ATTR_VAL_REF_SECTION;
+ val->u.uint = read_uleb128 (buf);
+ return 1;
+ case DW_FORM_GNU_str_index:
+ val->encoding = ATTR_VAL_REF_SECTION;
+ val->u.uint = read_uleb128 (buf);
+ return 1;
+ case DW_FORM_GNU_ref_alt:
+ val->encoding = ATTR_VAL_REF_SECTION;
+ val->u.uint = read_offset (buf, is_dwarf64);
+ return 1;
+ case DW_FORM_GNU_strp_alt:
+ val->encoding = ATTR_VAL_REF_SECTION;
+ val->u.uint = read_offset (buf, is_dwarf64);
+ return 1;
+ default:
+ dwarf_buf_error (buf, "unrecognized DWARF form");
+ return 0;
+ }
+}
+
+/* Compare function_addrs for qsort. When ranges are nested, make the
+ smallest one sort last. */
+
+static int
+function_addrs_compare (const void *v1, const void *v2)
+{
+ const struct function_addrs *a1 = (const struct function_addrs *) v1;
+ const struct function_addrs *a2 = (const struct function_addrs *) v2;
+
+ if (a1->low < a2->low)
+ return -1;
+ if (a1->low > a2->low)
+ return 1;
+ if (a1->high < a2->high)
+ return 1;
+ if (a1->high > a2->high)
+ return -1;
+ return strcmp (a1->function->name, a2->function->name);
+}
+
+/* Compare a PC against a function_addrs for bsearch. Note that if
+ there are multiple ranges containing PC, which one will be returned
+ is unpredictable. We compensate for that in dwarf_fileline. */
+
+static int
+function_addrs_search (const void *vkey, const void *ventry)
+{
+ const uintptr_t *key = (const uintptr_t *) vkey;
+ const struct function_addrs *entry = (const struct function_addrs *) ventry;
+ uintptr_t pc;
+
+ pc = *key;
+ if (pc < entry->low)
+ return -1;
+ else if (pc >= entry->high)
+ return 1;
+ else
+ return 0;
+}
+
+/* Add a new compilation unit address range to a vector. Returns 1 on
+ success, 0 on failure. */
+
+static int
+add_unit_addr (struct backtrace_state *state, uintptr_t base_address,
+ struct unit_addrs addrs,
+ backtrace_error_callback error_callback, void *data,
+ struct unit_addrs_vector *vec)
+{
+ struct unit_addrs *p;
+
+ /* Add in the base address of the module here, so that we can look
+ up the PC directly. */
+ addrs.low += base_address;
+ addrs.high += base_address;
+
+ /* Try to merge with the last entry. */
+ if (vec->count > 0)
+ {
+ p = (struct unit_addrs *) vec->vec.base + (vec->count - 1);
+ if ((addrs.low == p->high || addrs.low == p->high + 1)
+ && addrs.u == p->u)
+ {
+ if (addrs.high > p->high)
+ p->high = addrs.high;
+ return 1;
+ }
+ }
+
+ p = ((struct unit_addrs *)
+ backtrace_vector_grow (state, sizeof (struct unit_addrs),
+ error_callback, data, &vec->vec));
+ if (p == NULL)
+ return 0;
+
+ *p = addrs;
+ ++vec->count;
+ return 1;
+}
+
+/* Free a unit address vector. */
+
+static void
+free_unit_addrs_vector (struct backtrace_state *state,
+ struct unit_addrs_vector *vec,
+ backtrace_error_callback error_callback, void *data)
+{
+ struct unit_addrs *addrs;
+ size_t i;
+
+ addrs = (struct unit_addrs *) vec->vec.base;
+ for (i = 0; i < vec->count; ++i)
+ free_abbrevs (state, &addrs[i].u->abbrevs, error_callback, data);
+}
+
+/* Compare unit_addrs for qsort. When ranges are nested, make the
+ smallest one sort last. */
+
+static int
+unit_addrs_compare (const void *v1, const void *v2)
+{
+ const struct unit_addrs *a1 = (const struct unit_addrs *) v1;
+ const struct unit_addrs *a2 = (const struct unit_addrs *) v2;
+
+ if (a1->low < a2->low)
+ return -1;
+ if (a1->low > a2->low)
+ return 1;
+ if (a1->high < a2->high)
+ return 1;
+ if (a1->high > a2->high)
+ return -1;
+ if (a1->u->lineoff < a2->u->lineoff)
+ return -1;
+ if (a1->u->lineoff > a2->u->lineoff)
+ return 1;
+ return 0;
+}
+
+/* Compare a PC against a unit_addrs for bsearch. Note that if there
+ are multiple ranges containing PC, which one will be returned is
+ unpredictable. We compensate for that in dwarf_fileline. */
+
+static int
+unit_addrs_search (const void *vkey, const void *ventry)
+{
+ const uintptr_t *key = (const uintptr_t *) vkey;
+ const struct unit_addrs *entry = (const struct unit_addrs *) ventry;
+ uintptr_t pc;
+
+ pc = *key;
+ if (pc < entry->low)
+ return -1;
+ else if (pc >= entry->high)
+ return 1;
+ else
+ return 0;
+}
+
+/* Sort the line vector by PC. We want a stable sort here to maintain
+ the order of lines for the same PC values. Since the sequence is
+ being sorted in place, their addresses cannot be relied on to
+ maintain stability. That is the purpose of the index member. */
+
+static int
+line_compare (const void *v1, const void *v2)
+{
+ const struct line *ln1 = (const struct line *) v1;
+ const struct line *ln2 = (const struct line *) v2;
+
+ if (ln1->pc < ln2->pc)
+ return -1;
+ else if (ln1->pc > ln2->pc)
+ return 1;
+ else if (ln1->idx < ln2->idx)
+ return -1;
+ else if (ln1->idx > ln2->idx)
+ return 1;
+ else
+ return 0;
+}
+
+/* Find a PC in a line vector. We always allocate an extra entry at
+ the end of the lines vector, so that this routine can safely look
+ at the next entry. Note that when there are multiple mappings for
+ the same PC value, this will return the last one. */
+
+static int
+line_search (const void *vkey, const void *ventry)
+{
+ const uintptr_t *key = (const uintptr_t *) vkey;
+ const struct line *entry = (const struct line *) ventry;
+ uintptr_t pc;
+
+ pc = *key;
+ if (pc < entry->pc)
+ return -1;
+ else if (pc >= (entry + 1)->pc)
+ return 1;
+ else
+ return 0;
+}
+
+/* Sort the abbrevs by the abbrev code. This function is passed to
+ both qsort and bsearch. */
+
+static int
+abbrev_compare (const void *v1, const void *v2)
+{
+ const struct abbrev *a1 = (const struct abbrev *) v1;
+ const struct abbrev *a2 = (const struct abbrev *) v2;
+
+ if (a1->code < a2->code)
+ return -1;
+ else if (a1->code > a2->code)
+ return 1;
+ else
+ {
+ /* This really shouldn't happen. It means there are two
+ different abbrevs with the same code, and that means we don't
+ know which one lookup_abbrev should return. */
+ return 0;
+ }
+}
+
+/* Read the abbreviation table for a compilation unit. Returns 1 on
+ success, 0 on failure. */
+
+static int
+read_abbrevs (struct backtrace_state *state, uint64_t abbrev_offset,
+ const unsigned char *dwarf_abbrev, size_t dwarf_abbrev_size,
+ int is_bigendian, backtrace_error_callback error_callback,
+ void *data, struct abbrevs *abbrevs)
+{
+ struct dwarf_buf abbrev_buf;
+ struct dwarf_buf count_buf;
+ size_t num_abbrevs;
+
+ abbrevs->num_abbrevs = 0;
+ abbrevs->abbrevs = NULL;
+
+ if (abbrev_offset >= dwarf_abbrev_size)
+ {
+ error_callback (data, "abbrev offset out of range", 0);
+ return 0;
+ }
+
+ abbrev_buf.name = ".debug_abbrev";
+ abbrev_buf.start = dwarf_abbrev;
+ abbrev_buf.buf = dwarf_abbrev + abbrev_offset;
+ abbrev_buf.left = dwarf_abbrev_size - abbrev_offset;
+ abbrev_buf.is_bigendian = is_bigendian;
+ abbrev_buf.error_callback = error_callback;
+ abbrev_buf.data = data;
+ abbrev_buf.reported_underflow = 0;
+
+ /* Count the number of abbrevs in this list. */
+
+ count_buf = abbrev_buf;
+ num_abbrevs = 0;
+ while (read_uleb128 (&count_buf) != 0)
+ {
+ if (count_buf.reported_underflow)
+ return 0;
+ ++num_abbrevs;
+ // Skip tag.
+ read_uleb128 (&count_buf);
+ // Skip has_children.
+ read_byte (&count_buf);
+ // Skip attributes.
+ while (read_uleb128 (&count_buf) != 0)
+ read_uleb128 (&count_buf);
+ // Skip form of last attribute.
+ read_uleb128 (&count_buf);
+ }
+
+ if (count_buf.reported_underflow)
+ return 0;
+
+ if (num_abbrevs == 0)
+ return 1;
+
+ abbrevs->num_abbrevs = num_abbrevs;
+ abbrevs->abbrevs = ((struct abbrev *)
+ backtrace_alloc (state,
+ num_abbrevs * sizeof (struct abbrev),
+ error_callback, data));
+ if (abbrevs->abbrevs == NULL)
+ return 0;
+ memset (abbrevs->abbrevs, 0, num_abbrevs * sizeof (struct abbrev));
+
+ num_abbrevs = 0;
+ while (1)
+ {
+ uint64_t code;
+ struct abbrev a;
+ size_t num_attrs;
+ struct attr *attrs;
+
+ if (abbrev_buf.reported_underflow)
+ goto fail;
+
+ code = read_uleb128 (&abbrev_buf);
+ if (code == 0)
+ break;
+
+ a.code = code;
+ a.tag = (enum dwarf_tag) read_uleb128 (&abbrev_buf);
+ a.has_children = read_byte (&abbrev_buf);
+
+ count_buf = abbrev_buf;
+ num_attrs = 0;
+ while (read_uleb128 (&count_buf) != 0)
+ {
+ ++num_attrs;
+ read_uleb128 (&count_buf);
+ }
+
+ if (num_attrs == 0)
+ {
+ attrs = NULL;
+ read_uleb128 (&abbrev_buf);
+ read_uleb128 (&abbrev_buf);
+ }
+ else
+ {
+ attrs = ((struct attr *)
+ backtrace_alloc (state, num_attrs * sizeof *attrs,
+ error_callback, data));
+ if (attrs == NULL)
+ goto fail;
+ num_attrs = 0;
+ while (1)
+ {
+ uint64_t name;
+ uint64_t form;
+
+ name = read_uleb128 (&abbrev_buf);
+ form = read_uleb128 (&abbrev_buf);
+ if (name == 0)
+ break;
+ attrs[num_attrs].name = (enum dwarf_attribute) name;
+ attrs[num_attrs].form = (enum dwarf_form) form;
+ ++num_attrs;
+ }
+ }
+
+ a.num_attrs = num_attrs;
+ a.attrs = attrs;
+
+ abbrevs->abbrevs[num_abbrevs] = a;
+ ++num_abbrevs;
+ }
+
+ backtrace_qsort (abbrevs->abbrevs, abbrevs->num_abbrevs,
+ sizeof (struct abbrev), abbrev_compare);
+
+ return 1;
+
+ fail:
+ free_abbrevs (state, abbrevs, error_callback, data);
+ return 0;
+}
+
+/* Return the abbrev information for an abbrev code. */
+
+static const struct abbrev *
+lookup_abbrev (struct abbrevs *abbrevs, uint64_t code,
+ backtrace_error_callback error_callback, void *data)
+{
+ struct abbrev key;
+ void *p;
+
+ /* With GCC, where abbrevs are simply numbered in order, we should
+ be able to just look up the entry. */
+ if (code - 1 < abbrevs->num_abbrevs
+ && abbrevs->abbrevs[code - 1].code == code)
+ return &abbrevs->abbrevs[code - 1];
+
+ /* Otherwise we have to search. */
+ memset (&key, 0, sizeof key);
+ key.code = code;
+ p = bsearch (&key, abbrevs->abbrevs, abbrevs->num_abbrevs,
+ sizeof (struct abbrev), abbrev_compare);
+ if (p == NULL)
+ {
+ error_callback (data, "invalid abbreviation code", 0);
+ return NULL;
+ }
+ return (const struct abbrev *) p;
+}
+
+/* Add non-contiguous address ranges for a compilation unit. Returns
+ 1 on success, 0 on failure. */
+
+static int
+add_unit_ranges (struct backtrace_state *state, uintptr_t base_address,
+ struct unit *u, uint64_t ranges, uint64_t base,
+ int is_bigendian, const unsigned char *dwarf_ranges,
+ size_t dwarf_ranges_size,
+ backtrace_error_callback error_callback, void *data,
+ struct unit_addrs_vector *addrs)
+{
+ struct dwarf_buf ranges_buf;
+
+ if (ranges >= dwarf_ranges_size)
+ {
+ error_callback (data, "ranges offset out of range", 0);
+ return 0;
+ }
+
+ ranges_buf.name = ".debug_ranges";
+ ranges_buf.start = dwarf_ranges;
+ ranges_buf.buf = dwarf_ranges + ranges;
+ ranges_buf.left = dwarf_ranges_size - ranges;
+ ranges_buf.is_bigendian = is_bigendian;
+ ranges_buf.error_callback = error_callback;
+ ranges_buf.data = data;
+ ranges_buf.reported_underflow = 0;
+
+ while (1)
+ {
+ uint64_t low;
+ uint64_t high;
+
+ if (ranges_buf.reported_underflow)
+ return 0;
+
+ low = read_address (&ranges_buf, u->addrsize);
+ high = read_address (&ranges_buf, u->addrsize);
+
+ if (low == 0 && high == 0)
+ break;
+
+ if (is_highest_address (low, u->addrsize))
+ base = high;
+ else
+ {
+ struct unit_addrs a;
+
+ a.low = low + base;
+ a.high = high + base;
+ a.u = u;
+ if (!add_unit_addr (state, base_address, a, error_callback, data,
+ addrs))
+ return 0;
+ }
+ }
+
+ if (ranges_buf.reported_underflow)
+ return 0;
+
+ return 1;
+}
+
+/* Find the address range covered by a compilation unit, reading from
+ UNIT_BUF and adding values to U. Returns 1 if all data could be
+ read, 0 if there is some error. */
+
+static int
+find_address_ranges (struct backtrace_state *state, uintptr_t base_address,
+ struct dwarf_buf *unit_buf,
+ const unsigned char *dwarf_str, size_t dwarf_str_size,
+ const unsigned char *dwarf_ranges,
+ size_t dwarf_ranges_size,
+ int is_bigendian, backtrace_error_callback error_callback,
+ void *data, struct unit *u,
+ struct unit_addrs_vector *addrs)
+{
+ while (unit_buf->left > 0)
+ {
+ uint64_t code;
+ const struct abbrev *abbrev;
+ uint64_t lowpc;
+ int have_lowpc;
+ uint64_t highpc;
+ int have_highpc;
+ int highpc_is_relative;
+ uint64_t ranges;
+ int have_ranges;
+ size_t i;
+
+ code = read_uleb128 (unit_buf);
+ if (code == 0)
+ return 1;
+
+ abbrev = lookup_abbrev (&u->abbrevs, code, error_callback, data);
+ if (abbrev == NULL)
+ return 0;
+
+ lowpc = 0;
+ have_lowpc = 0;
+ highpc = 0;
+ have_highpc = 0;
+ highpc_is_relative = 0;
+ ranges = 0;
+ have_ranges = 0;
+ for (i = 0; i < abbrev->num_attrs; ++i)
+ {
+ struct attr_val val;
+
+ if (!read_attribute (abbrev->attrs[i].form, unit_buf,
+ u->is_dwarf64, u->version, u->addrsize,
+ dwarf_str, dwarf_str_size, &val))
+ return 0;
+
+ switch (abbrev->attrs[i].name)
+ {
+ case DW_AT_low_pc:
+ if (val.encoding == ATTR_VAL_ADDRESS)
+ {
+ lowpc = val.u.uint;
+ have_lowpc = 1;
+ }
+ break;
+
+ case DW_AT_high_pc:
+ if (val.encoding == ATTR_VAL_ADDRESS)
+ {
+ highpc = val.u.uint;
+ have_highpc = 1;
+ }
+ else if (val.encoding == ATTR_VAL_UINT)
+ {
+ highpc = val.u.uint;
+ have_highpc = 1;
+ highpc_is_relative = 1;
+ }
+ break;
+
+ case DW_AT_ranges:
+ if (val.encoding == ATTR_VAL_UINT
+ || val.encoding == ATTR_VAL_REF_SECTION)
+ {
+ ranges = val.u.uint;
+ have_ranges = 1;
+ }
+ break;
+
+ case DW_AT_stmt_list:
+ if (abbrev->tag == DW_TAG_compile_unit
+ && (val.encoding == ATTR_VAL_UINT
+ || val.encoding == ATTR_VAL_REF_SECTION))
+ u->lineoff = val.u.uint;
+ break;
+
+ case DW_AT_name:
+ if (abbrev->tag == DW_TAG_compile_unit
+ && val.encoding == ATTR_VAL_STRING)
+ u->filename = val.u.string;
+ break;
+
+ case DW_AT_comp_dir:
+ if (abbrev->tag == DW_TAG_compile_unit
+ && val.encoding == ATTR_VAL_STRING)
+ u->comp_dir = val.u.string;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if (abbrev->tag == DW_TAG_compile_unit
+ || abbrev->tag == DW_TAG_subprogram)
+ {
+ if (have_ranges)
+ {
+ if (!add_unit_ranges (state, base_address, u, ranges, lowpc,
+ is_bigendian, dwarf_ranges,
+ dwarf_ranges_size, error_callback,
+ data, addrs))
+ return 0;
+ }
+ else if (have_lowpc && have_highpc)
+ {
+ struct unit_addrs a;
+
+ if (highpc_is_relative)
+ highpc += lowpc;
+ a.low = lowpc;
+ a.high = highpc;
+ a.u = u;
+
+ if (!add_unit_addr (state, base_address, a, error_callback, data,
+ addrs))
+ return 0;
+ }
+
+ /* If we found the PC range in the DW_TAG_compile_unit, we
+ can stop now. */
+ if (abbrev->tag == DW_TAG_compile_unit
+ && (have_ranges || (have_lowpc && have_highpc)))
+ return 1;
+ }
+
+ if (abbrev->has_children)
+ {
+ if (!find_address_ranges (state, base_address, unit_buf,
+ dwarf_str, dwarf_str_size,
+ dwarf_ranges, dwarf_ranges_size,
+ is_bigendian, error_callback, data,
+ u, addrs))
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+/* Build a mapping from address ranges to the compilation units where
+ the line number information for that range can be found. Returns 1
+ on success, 0 on failure. */
+
+static int
+build_address_map (struct backtrace_state *state, uintptr_t base_address,
+ const unsigned char *dwarf_info, size_t dwarf_info_size,
+ const unsigned char *dwarf_abbrev, size_t dwarf_abbrev_size,
+ const unsigned char *dwarf_ranges, size_t dwarf_ranges_size,
+ const unsigned char *dwarf_str, size_t dwarf_str_size,
+ int is_bigendian, backtrace_error_callback error_callback,
+ void *data, struct unit_addrs_vector *addrs)
+{
+ struct dwarf_buf info;
+ struct abbrevs abbrevs;
+
+ memset (&addrs->vec, 0, sizeof addrs->vec);
+ addrs->count = 0;
+
+ /* Read through the .debug_info section. FIXME: Should we use the
+ .debug_aranges section? gdb and addr2line don't use it, but I'm
+ not sure why. */
+
+ info.name = ".debug_info";
+ info.start = dwarf_info;
+ info.buf = dwarf_info;
+ info.left = dwarf_info_size;
+ info.is_bigendian = is_bigendian;
+ info.error_callback = error_callback;
+ info.data = data;
+ info.reported_underflow = 0;
+
+ memset (&abbrevs, 0, sizeof abbrevs);
+ while (info.left > 0)
+ {
+ const unsigned char *unit_data_start;
+ uint64_t len;
+ int is_dwarf64;
+ struct dwarf_buf unit_buf;
+ int version;
+ uint64_t abbrev_offset;
+ int addrsize;
+ struct unit *u;
+
+ if (info.reported_underflow)
+ goto fail;
+
+ unit_data_start = info.buf;
+
+ is_dwarf64 = 0;
+ len = read_uint32 (&info);
+ if (len == 0xffffffff)
+ {
+ len = read_uint64 (&info);
+ is_dwarf64 = 1;
+ }
+
+ unit_buf = info;
+ unit_buf.left = len;
+
+ if (!advance (&info, len))
+ goto fail;
+
+ version = read_uint16 (&unit_buf);
+ if (version < 2 || version > 4)
+ {
+ dwarf_buf_error (&unit_buf, "unrecognized DWARF version");
+ goto fail;
+ }
+
+ abbrev_offset = read_offset (&unit_buf, is_dwarf64);
+ if (!read_abbrevs (state, abbrev_offset, dwarf_abbrev, dwarf_abbrev_size,
+ is_bigendian, error_callback, data, &abbrevs))
+ goto fail;
+
+ addrsize = read_byte (&unit_buf);
+
+ u = ((struct unit *)
+ backtrace_alloc (state, sizeof *u, error_callback, data));
+ if (u == NULL)
+ goto fail;
+ u->unit_data = unit_buf.buf;
+ u->unit_data_len = unit_buf.left;
+ u->unit_data_offset = unit_buf.buf - unit_data_start;
+ u->version = version;
+ u->is_dwarf64 = is_dwarf64;
+ u->addrsize = addrsize;
+ u->filename = NULL;
+ u->comp_dir = NULL;
+ u->abs_filename = NULL;
+ u->lineoff = 0;
+ u->abbrevs = abbrevs;
+ memset (&abbrevs, 0, sizeof abbrevs);
+
+ /* The actual line number mappings will be read as needed. */
+ u->lines = NULL;
+ u->lines_count = 0;
+ u->function_addrs = NULL;
+ u->function_addrs_count = 0;
+
+ if (!find_address_ranges (state, base_address, &unit_buf,
+ dwarf_str, dwarf_str_size,
+ dwarf_ranges, dwarf_ranges_size,
+ is_bigendian, error_callback, data,
+ u, addrs))
+ {
+ free_abbrevs (state, &u->abbrevs, error_callback, data);
+ backtrace_free (state, u, sizeof *u, error_callback, data);
+ goto fail;
+ }
+
+ if (unit_buf.reported_underflow)
+ {
+ free_abbrevs (state, &u->abbrevs, error_callback, data);
+ backtrace_free (state, u, sizeof *u, error_callback, data);
+ goto fail;
+ }
+ }
+ if (info.reported_underflow)
+ goto fail;
+
+ return 1;
+
+ fail:
+ free_abbrevs (state, &abbrevs, error_callback, data);
+ free_unit_addrs_vector (state, addrs, error_callback, data);
+ return 0;
+}
+
+/* Add a new mapping to the vector of line mappings that we are
+ building. Returns 1 on success, 0 on failure. */
+
+static int
+add_line (struct backtrace_state *state, struct dwarf_data *ddata,
+ uintptr_t pc, const char *filename, int lineno,
+ backtrace_error_callback error_callback, void *data,
+ struct line_vector *vec)
+{
+ struct line *ln;
+
+ /* If we are adding the same mapping, ignore it. This can happen
+ when using discriminators. */
+ if (vec->count > 0)
+ {
+ ln = (struct line *) vec->vec.base + (vec->count - 1);
+ if (pc == ln->pc && filename == ln->filename && lineno == ln->lineno)
+ return 1;
+ }
+
+ ln = ((struct line *)
+ backtrace_vector_grow (state, sizeof (struct line), error_callback,
+ data, &vec->vec));
+ if (ln == NULL)
+ return 0;
+
+ /* Add in the base address here, so that we can look up the PC
+ directly. */
+ ln->pc = pc + ddata->base_address;
+
+ ln->filename = filename;
+ ln->lineno = lineno;
+ ln->idx = (int)vec->count;
+
+ ++vec->count;
+
+ return 1;
+}
+
+/* Free the line header information. */
+
+static void
+free_line_header (struct backtrace_state *state, struct line_header *hdr,
+ backtrace_error_callback error_callback, void *data)
+{
+ if (hdr->dirs_count != 0)
+ backtrace_free (state, hdr->dirs, hdr->dirs_count * sizeof (const char *),
+ error_callback, data);
+ backtrace_free (state, hdr->filenames,
+ hdr->filenames_count * sizeof (char *),
+ error_callback, data);
+}
+
+/* Read the line header. Return 1 on success, 0 on failure. */
+
+static int
+read_line_header (struct backtrace_state *state, struct unit *u,
+ int is_dwarf64, struct dwarf_buf *line_buf,
+ struct line_header *hdr)
+{
+ uint64_t hdrlen;
+ struct dwarf_buf hdr_buf;
+ const unsigned char *p;
+ const unsigned char *pend;
+ size_t i;
+
+ hdr->version = read_uint16 (line_buf);
+ if (hdr->version < 2 || hdr->version > 4)
+ {
+ dwarf_buf_error (line_buf, "unsupported line number version");
+ return 0;
+ }
+
+ hdrlen = read_offset (line_buf, is_dwarf64);
+
+ hdr_buf = *line_buf;
+ hdr_buf.left = hdrlen;
+
+ if (!advance (line_buf, hdrlen))
+ return 0;
+
+ hdr->min_insn_len = read_byte (&hdr_buf);
+ if (hdr->version < 4)
+ hdr->max_ops_per_insn = 1;
+ else
+ hdr->max_ops_per_insn = read_byte (&hdr_buf);
+
+ /* We don't care about default_is_stmt. */
+ read_byte (&hdr_buf);
+
+ hdr->line_base = read_sbyte (&hdr_buf);
+ hdr->line_range = read_byte (&hdr_buf);
+
+ hdr->opcode_base = read_byte (&hdr_buf);
+ hdr->opcode_lengths = hdr_buf.buf;
+ if (!advance (&hdr_buf, hdr->opcode_base - 1))
+ return 0;
+
+ /* Count the number of directory entries. */
+ hdr->dirs_count = 0;
+ p = hdr_buf.buf;
+ pend = p + hdr_buf.left;
+ while (p < pend && *p != '\0')
+ {
+ p += strnlen((const char *) p, pend - p) + 1;
+ ++hdr->dirs_count;
+ }
+
+ hdr->dirs = NULL;
+ if (hdr->dirs_count != 0)
+ {
+ hdr->dirs = ((const char **)
+ backtrace_alloc (state,
+ hdr->dirs_count * sizeof (const char *),
+ line_buf->error_callback, line_buf->data));
+ if (hdr->dirs == NULL)
+ return 0;
+ }
+
+ i = 0;
+ while (*hdr_buf.buf != '\0')
+ {
+ if (hdr_buf.reported_underflow)
+ return 0;
+
+ hdr->dirs[i] = (const char *) hdr_buf.buf;
+ ++i;
+ if (!advance (&hdr_buf,
+ strnlen ((const char *) hdr_buf.buf, hdr_buf.left) + 1))
+ return 0;
+ }
+ if (!advance (&hdr_buf, 1))
+ return 0;
+
+ /* Count the number of file entries. */
+ hdr->filenames_count = 0;
+ p = hdr_buf.buf;
+ pend = p + hdr_buf.left;
+ while (p < pend && *p != '\0')
+ {
+ p += strnlen ((const char *) p, pend - p) + 1;
+ p += leb128_len (p);
+ p += leb128_len (p);
+ p += leb128_len (p);
+ ++hdr->filenames_count;
+ }
+
+ hdr->filenames = ((const char **)
+ backtrace_alloc (state,
+ hdr->filenames_count * sizeof (char *),
+ line_buf->error_callback,
+ line_buf->data));
+ if (hdr->filenames == NULL)
+ return 0;
+ i = 0;
+ while (*hdr_buf.buf != '\0')
+ {
+ const char *filename;
+ uint64_t dir_index;
+
+ if (hdr_buf.reported_underflow)
+ return 0;
+
+ filename = (const char *) hdr_buf.buf;
+ if (!advance (&hdr_buf,
+ strnlen ((const char *) hdr_buf.buf, hdr_buf.left) + 1))
+ return 0;
+ dir_index = read_uleb128 (&hdr_buf);
+ if (IS_ABSOLUTE_PATH (filename)
+ || (dir_index == 0 && u->comp_dir == NULL))
+ hdr->filenames[i] = filename;
+ else
+ {
+ const char *dir;
+ size_t dir_len;
+ size_t filename_len;
+ char *s;
+
+ if (dir_index == 0)
+ dir = u->comp_dir;
+ else if (dir_index - 1 < hdr->dirs_count)
+ dir = hdr->dirs[dir_index - 1];
+ else
+ {
+ dwarf_buf_error (line_buf,
+ ("invalid directory index in "
+ "line number program header"));
+ return 0;
+ }
+ dir_len = strlen (dir);
+ filename_len = strlen (filename);
+ s = ((char *)
+ backtrace_alloc (state, dir_len + filename_len + 2,
+ line_buf->error_callback, line_buf->data));
+ if (s == NULL)
+ return 0;
+ memcpy (s, dir, dir_len);
+ /* FIXME: If we are on a DOS-based file system, and the
+ directory or the file name use backslashes, then we
+ should use a backslash here. */
+ s[dir_len] = '/';
+ memcpy (s + dir_len + 1, filename, filename_len + 1);
+ hdr->filenames[i] = s;
+ }
+
+ /* Ignore the modification time and size. */
+ read_uleb128 (&hdr_buf);
+ read_uleb128 (&hdr_buf);
+
+ ++i;
+ }
+
+ if (hdr_buf.reported_underflow)
+ return 0;
+
+ return 1;
+}
+
+/* Read the line program, adding line mappings to VEC. Return 1 on
+ success, 0 on failure. */
+
+static int
+read_line_program (struct backtrace_state *state, struct dwarf_data *ddata,
+ struct unit *u, const struct line_header *hdr,
+ struct dwarf_buf *line_buf, struct line_vector *vec)
+{
+ uint64_t address;
+ unsigned int op_index;
+ const char *reset_filename;
+ const char *filename;
+ int lineno;
+
+ address = 0;
+ op_index = 0;
+ if (hdr->filenames_count > 0)
+ reset_filename = hdr->filenames[0];
+ else
+ reset_filename = "";
+ filename = reset_filename;
+ lineno = 1;
+ while (line_buf->left > 0)
+ {
+ unsigned int op;
+
+ op = read_byte (line_buf);
+ if (op >= hdr->opcode_base)
+ {
+ unsigned int advance;
+
+ /* Special opcode. */
+ op -= hdr->opcode_base;
+ advance = op / hdr->line_range;
+ address += (hdr->min_insn_len * (op_index + advance)
+ / hdr->max_ops_per_insn);
+ op_index = (op_index + advance) % hdr->max_ops_per_insn;
+ lineno += hdr->line_base + (int) (op % hdr->line_range);
+ add_line (state, ddata, address, filename, lineno,
+ line_buf->error_callback, line_buf->data, vec);
+ }
+ else if (op == DW_LNS_extended_op)
+ {
+ uint64_t len;
+
+ len = read_uleb128 (line_buf);
+ op = read_byte (line_buf);
+ switch (op)
+ {
+ case DW_LNE_end_sequence:
+ /* FIXME: Should we mark the high PC here? It seems
+ that we already have that information from the
+ compilation unit. */
+ address = 0;
+ op_index = 0;
+ filename = reset_filename;
+ lineno = 1;
+ break;
+ case DW_LNE_set_address:
+ address = read_address (line_buf, u->addrsize);
+ break;
+ case DW_LNE_define_file:
+ {
+ const char *f;
+ unsigned int dir_index;
+
+ f = (const char *) line_buf->buf;
+ if (!advance (line_buf, strnlen (f, line_buf->left) + 1))
+ return 0;
+ dir_index = (unsigned int)read_uleb128 (line_buf);
+ /* Ignore that time and length. */
+ read_uleb128 (line_buf);
+ read_uleb128 (line_buf);
+ if (IS_ABSOLUTE_PATH (f))
+ filename = f;
+ else
+ {
+ const char *dir;
+ size_t dir_len;
+ size_t f_len;
+ char *p;
+
+ if (dir_index == 0)
+ dir = u->comp_dir;
+ else if (dir_index - 1 < hdr->dirs_count)
+ dir = hdr->dirs[dir_index - 1];
+ else
+ {
+ dwarf_buf_error (line_buf,
+ ("invalid directory index "
+ "in line number program"));
+ return 0;
+ }
+ dir_len = strlen (dir);
+ f_len = strlen (f);
+ p = ((char *)
+ backtrace_alloc (state, dir_len + f_len + 2,
+ line_buf->error_callback,
+ line_buf->data));
+ if (p == NULL)
+ return 0;
+ memcpy (p, dir, dir_len);
+ /* FIXME: If we are on a DOS-based file system,
+ and the directory or the file name use
+ backslashes, then we should use a backslash
+ here. */
+ p[dir_len] = '/';
+ memcpy (p + dir_len + 1, f, f_len + 1);
+ filename = p;
+ }
+ }
+ break;
+ case DW_LNE_set_discriminator:
+ /* We don't care about discriminators. */
+ read_uleb128 (line_buf);
+ break;
+ default:
+ if (!advance (line_buf, len - 1))
+ return 0;
+ break;
+ }
+ }
+ else
+ {
+ switch (op)
+ {
+ case DW_LNS_copy:
+ add_line (state, ddata, address, filename, lineno,
+ line_buf->error_callback, line_buf->data, vec);
+ break;
+ case DW_LNS_advance_pc:
+ {
+ uint64_t advance;
+
+ advance = read_uleb128 (line_buf);
+ address += (hdr->min_insn_len * (op_index + advance)
+ / hdr->max_ops_per_insn);
+ op_index = (op_index + advance) % hdr->max_ops_per_insn;
+ }
+ break;
+ case DW_LNS_advance_line:
+ lineno += (int) read_sleb128 (line_buf);
+ break;
+ case DW_LNS_set_file:
+ {
+ uint64_t fileno;
+
+ fileno = read_uleb128 (line_buf);
+ if (fileno == 0)
+ filename = "";
+ else
+ {
+ if (fileno - 1 >= hdr->filenames_count)
+ {
+ dwarf_buf_error (line_buf,
+ ("invalid file number in "
+ "line number program"));
+ return 0;
+ }
+ filename = hdr->filenames[fileno - 1];
+ }
+ }
+ break;
+ case DW_LNS_set_column:
+ read_uleb128 (line_buf);
+ break;
+ case DW_LNS_negate_stmt:
+ break;
+ case DW_LNS_set_basic_block:
+ break;
+ case DW_LNS_const_add_pc:
+ {
+ unsigned int advance;
+
+ op = 255 - hdr->opcode_base;
+ advance = op / hdr->line_range;
+ address += (hdr->min_insn_len * (op_index + advance)
+ / hdr->max_ops_per_insn);
+ op_index = (op_index + advance) % hdr->max_ops_per_insn;
+ }
+ break;
+ case DW_LNS_fixed_advance_pc:
+ address += read_uint16 (line_buf);
+ op_index = 0;
+ break;
+ case DW_LNS_set_prologue_end:
+ break;
+ case DW_LNS_set_epilogue_begin:
+ break;
+ case DW_LNS_set_isa:
+ read_uleb128 (line_buf);
+ break;
+ default:
+ {
+ unsigned int i;
+
+ for (i = hdr->opcode_lengths[op - 1]; i > 0; --i)
+ read_uleb128 (line_buf);
+ }
+ break;
+ }
+ }
+ }
+
+ return 1;
+}
+
+/* Read the line number information for a compilation unit. Returns 1
+ on success, 0 on failure. */
+
+static int
+read_line_info (struct backtrace_state *state, struct dwarf_data *ddata,
+ backtrace_error_callback error_callback, void *data,
+ struct unit *u, struct line_header *hdr, struct line **lines,
+ size_t *lines_count)
+{
+ struct line_vector vec;
+ struct dwarf_buf line_buf;
+ uint64_t len;
+ int is_dwarf64;
+ struct line *ln;
+
+ memset (&vec.vec, 0, sizeof vec.vec);
+ vec.count = 0;
+
+ memset (hdr, 0, sizeof *hdr);
+
+ if (u->lineoff != (off_t) (size_t) u->lineoff
+ || (size_t) u->lineoff >= ddata->dwarf_line_size)
+ {
+ error_callback (data, "unit line offset out of range", 0);
+ goto fail;
+ }
+
+ line_buf.name = ".debug_line";
+ line_buf.start = ddata->dwarf_line;
+ line_buf.buf = ddata->dwarf_line + u->lineoff;
+ line_buf.left = ddata->dwarf_line_size - u->lineoff;
+ line_buf.is_bigendian = ddata->is_bigendian;
+ line_buf.error_callback = error_callback;
+ line_buf.data = data;
+ line_buf.reported_underflow = 0;
+
+ is_dwarf64 = 0;
+ len = read_uint32 (&line_buf);
+ if (len == 0xffffffff)
+ {
+ len = read_uint64 (&line_buf);
+ is_dwarf64 = 1;
+ }
+ line_buf.left = len;
+
+ if (!read_line_header (state, u, is_dwarf64, &line_buf, hdr))
+ goto fail;
+
+ if (!read_line_program (state, ddata, u, hdr, &line_buf, &vec))
+ goto fail;
+
+ if (line_buf.reported_underflow)
+ goto fail;
+
+ if (vec.count == 0)
+ {
+ /* This is not a failure in the sense of a generating an error,
+ but it is a failure in that sense that we have no useful
+ information. */
+ goto fail;
+ }
+
+ /* Allocate one extra entry at the end. */
+ ln = ((struct line *)
+ backtrace_vector_grow (state, sizeof (struct line), error_callback,
+ data, &vec.vec));
+ if (ln == NULL)
+ goto fail;
+ ln->pc = (uintptr_t) -1;
+ ln->filename = NULL;
+ ln->lineno = 0;
+ ln->idx = 0;
+
+ if (!backtrace_vector_release (state, &vec.vec, error_callback, data))
+ goto fail;
+
+ ln = (struct line *) vec.vec.base;
+ backtrace_qsort (ln, vec.count, sizeof (struct line), line_compare);
+
+ *lines = ln;
+ *lines_count = vec.count;
+
+ return 1;
+
+ fail:
+ vec.vec.alc += vec.vec.size;
+ vec.vec.size = 0;
+ backtrace_vector_release (state, &vec.vec, error_callback, data);
+ free_line_header (state, hdr, error_callback, data);
+ *lines = (struct line *) (uintptr_t) -1;
+ *lines_count = 0;
+ return 0;
+}
+
+/* Read the name of a function from a DIE referenced by a
+ DW_AT_abstract_origin or DW_AT_specification tag. OFFSET is within
+ the same compilation unit. */
+
+static const char *
+read_referenced_name (struct dwarf_data *ddata, struct unit *u,
+ uint64_t offset, backtrace_error_callback error_callback,
+ void *data)
+{
+ struct dwarf_buf unit_buf;
+ uint64_t code;
+ const struct abbrev *abbrev;
+ const char *ret;
+ size_t i;
+
+ /* OFFSET is from the start of the data for this compilation unit.
+ U->unit_data is the data, but it starts U->unit_data_offset bytes
+ from the beginning. */
+
+ if (offset < u->unit_data_offset
+ || offset - u->unit_data_offset >= u->unit_data_len)
+ {
+ error_callback (data,
+ "abstract origin or specification out of range",
+ 0);
+ return NULL;
+ }
+
+ offset -= u->unit_data_offset;
+
+ unit_buf.name = ".debug_info";
+ unit_buf.start = ddata->dwarf_info;
+ unit_buf.buf = u->unit_data + offset;
+ unit_buf.left = u->unit_data_len - offset;
+ unit_buf.is_bigendian = ddata->is_bigendian;
+ unit_buf.error_callback = error_callback;
+ unit_buf.data = data;
+ unit_buf.reported_underflow = 0;
+
+ code = read_uleb128 (&unit_buf);
+ if (code == 0)
+ {
+ dwarf_buf_error (&unit_buf, "invalid abstract origin or specification");
+ return NULL;
+ }
+
+ abbrev = lookup_abbrev (&u->abbrevs, code, error_callback, data);
+ if (abbrev == NULL)
+ return NULL;
+
+ ret = NULL;
+ for (i = 0; i < abbrev->num_attrs; ++i)
+ {
+ struct attr_val val;
+
+ if (!read_attribute (abbrev->attrs[i].form, &unit_buf,
+ u->is_dwarf64, u->version, u->addrsize,
+ ddata->dwarf_str, ddata->dwarf_str_size,
+ &val))
+ return NULL;
+
+ switch (abbrev->attrs[i].name)
+ {
+ case DW_AT_name:
+ /* We prefer the linkage name if get one. */
+ if (val.encoding == ATTR_VAL_STRING)
+ ret = val.u.string;
+ break;
+
+ case DW_AT_linkage_name:
+ case DW_AT_MIPS_linkage_name:
+ if (val.encoding == ATTR_VAL_STRING)
+ return val.u.string;
+ break;
+
+ case DW_AT_specification:
+ if (abbrev->attrs[i].form == DW_FORM_ref_addr
+ || abbrev->attrs[i].form == DW_FORM_ref_sig8)
+ {
+ /* This refers to a specification defined in some other
+ compilation unit. We can handle this case if we
+ must, but it's harder. */
+ break;
+ }
+ if (val.encoding == ATTR_VAL_UINT
+ || val.encoding == ATTR_VAL_REF_UNIT)
+ {
+ const char *name;
+
+ name = read_referenced_name (ddata, u, val.u.uint,
+ error_callback, data);
+ if (name != NULL)
+ ret = name;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return ret;
+}
+
+/* Add a single range to U that maps to function. Returns 1 on
+ success, 0 on error. */
+
+static int
+add_function_range (struct backtrace_state *state, struct dwarf_data *ddata,
+ struct function *function, uint64_t lowpc, uint64_t highpc,
+ backtrace_error_callback error_callback,
+ void *data, struct function_vector *vec)
+{
+ struct function_addrs *p;
+
+ /* Add in the base address here, so that we can look up the PC
+ directly. */
+ lowpc += ddata->base_address;
+ highpc += ddata->base_address;
+
+ if (vec->count > 0)
+ {
+ p = (struct function_addrs *) vec->vec.base + vec->count - 1;
+ if ((lowpc == p->high || lowpc == p->high + 1)
+ && function == p->function)
+ {
+ if (highpc > p->high)
+ p->high = highpc;
+ return 1;
+ }
+ }
+
+ p = ((struct function_addrs *)
+ backtrace_vector_grow (state, sizeof (struct function_addrs),
+ error_callback, data, &vec->vec));
+ if (p == NULL)
+ return 0;
+
+ p->low = lowpc;
+ p->high = highpc;
+ p->function = function;
+ ++vec->count;
+ return 1;
+}
+
+/* Add PC ranges to U that map to FUNCTION. Returns 1 on success, 0
+ on error. */
+
+static int
+add_function_ranges (struct backtrace_state *state, struct dwarf_data *ddata,
+ struct unit *u, struct function *function,
+ uint64_t ranges, uint64_t base,
+ backtrace_error_callback error_callback, void *data,
+ struct function_vector *vec)
+{
+ struct dwarf_buf ranges_buf;
+
+ if (ranges >= ddata->dwarf_ranges_size)
+ {
+ error_callback (data, "function ranges offset out of range", 0);
+ return 0;
+ }
+
+ ranges_buf.name = ".debug_ranges";
+ ranges_buf.start = ddata->dwarf_ranges;
+ ranges_buf.buf = ddata->dwarf_ranges + ranges;
+ ranges_buf.left = ddata->dwarf_ranges_size - ranges;
+ ranges_buf.is_bigendian = ddata->is_bigendian;
+ ranges_buf.error_callback = error_callback;
+ ranges_buf.data = data;
+ ranges_buf.reported_underflow = 0;
+
+ while (1)
+ {
+ uint64_t low;
+ uint64_t high;
+
+ if (ranges_buf.reported_underflow)
+ return 0;
+
+ low = read_address (&ranges_buf, u->addrsize);
+ high = read_address (&ranges_buf, u->addrsize);
+
+ if (low == 0 && high == 0)
+ break;
+
+ if (is_highest_address (low, u->addrsize))
+ base = high;
+ else
+ {
+ if (!add_function_range (state, ddata, function, low + base,
+ high + base, error_callback, data, vec))
+ return 0;
+ }
+ }
+
+ if (ranges_buf.reported_underflow)
+ return 0;
+
+ return 1;
+}
+
+/* Read one entry plus all its children. Add function addresses to
+ VEC. Returns 1 on success, 0 on error. */
+
+static int
+read_function_entry (struct backtrace_state *state, struct dwarf_data *ddata,
+ struct unit *u, uint64_t base, struct dwarf_buf *unit_buf,
+ const struct line_header *lhdr,
+ backtrace_error_callback error_callback, void *data,
+ struct function_vector *vec_function,
+ struct function_vector *vec_inlined)
+{
+ while (unit_buf->left > 0)
+ {
+ uint64_t code;
+ const struct abbrev *abbrev;
+ int is_function;
+ struct function *function;
+ struct function_vector *vec;
+ size_t i;
+ uint64_t lowpc;
+ int have_lowpc;
+ uint64_t highpc;
+ int have_highpc;
+ int highpc_is_relative;
+ uint64_t ranges;
+ int have_ranges;
+
+ code = read_uleb128 (unit_buf);
+ if (code == 0)
+ return 1;
+
+ abbrev = lookup_abbrev (&u->abbrevs, code, error_callback, data);
+ if (abbrev == NULL)
+ return 0;
+
+ is_function = (abbrev->tag == DW_TAG_subprogram
+ || abbrev->tag == DW_TAG_entry_point
+ || abbrev->tag == DW_TAG_inlined_subroutine);
+
+ if (abbrev->tag == DW_TAG_inlined_subroutine)
+ vec = vec_inlined;
+ else
+ vec = vec_function;
+
+ function = NULL;
+ if (is_function)
+ {
+ function = ((struct function *)
+ backtrace_alloc (state, sizeof *function,
+ error_callback, data));
+ if (function == NULL)
+ return 0;
+ memset (function, 0, sizeof *function);
+ }
+
+ lowpc = 0;
+ have_lowpc = 0;
+ highpc = 0;
+ have_highpc = 0;
+ highpc_is_relative = 0;
+ ranges = 0;
+ have_ranges = 0;
+ for (i = 0; i < abbrev->num_attrs; ++i)
+ {
+ struct attr_val val;
+
+ if (!read_attribute (abbrev->attrs[i].form, unit_buf,
+ u->is_dwarf64, u->version, u->addrsize,
+ ddata->dwarf_str, ddata->dwarf_str_size,
+ &val))
+ return 0;
+
+ /* The compile unit sets the base address for any address
+ ranges in the function entries. */
+ if (abbrev->tag == DW_TAG_compile_unit
+ && abbrev->attrs[i].name == DW_AT_low_pc
+ && val.encoding == ATTR_VAL_ADDRESS)
+ base = val.u.uint;
+
+ if (is_function)
+ {
+ switch (abbrev->attrs[i].name)
+ {
+ case DW_AT_call_file:
+ if (val.encoding == ATTR_VAL_UINT)
+ {
+ if (val.u.uint == 0)
+ function->caller_filename = "";
+ else
+ {
+ if (val.u.uint - 1 >= lhdr->filenames_count)
+ {
+ dwarf_buf_error (unit_buf,
+ ("invalid file number in "
+ "DW_AT_call_file attribute"));
+ return 0;
+ }
+ function->caller_filename =
+ lhdr->filenames[val.u.uint - 1];
+ }
+ }
+ break;
+
+ case DW_AT_call_line:
+ if (val.encoding == ATTR_VAL_UINT)
+ function->caller_lineno = (int)val.u.uint;
+ break;
+
+ case DW_AT_abstract_origin:
+ case DW_AT_specification:
+ if (abbrev->attrs[i].form == DW_FORM_ref_addr
+ || abbrev->attrs[i].form == DW_FORM_ref_sig8)
+ {
+ /* This refers to an abstract origin defined in
+ some other compilation unit. We can handle
+ this case if we must, but it's harder. */
+ break;
+ }
+ if (val.encoding == ATTR_VAL_UINT
+ || val.encoding == ATTR_VAL_REF_UNIT)
+ {
+ const char *name;
+
+ name = read_referenced_name (ddata, u, val.u.uint,
+ error_callback, data);
+ if (name != NULL)
+ function->name = name;
+ }
+ break;
+
+ case DW_AT_name:
+ if (val.encoding == ATTR_VAL_STRING)
+ {
+ /* Don't override a name we found in some other
+ way, as it will normally be more
+ useful--e.g., this name is normally not
+ mangled. */
+ if (function->name == NULL)
+ function->name = val.u.string;
+ }
+ break;
+
+ case DW_AT_linkage_name:
+ case DW_AT_MIPS_linkage_name:
+ if (val.encoding == ATTR_VAL_STRING)
+ function->name = val.u.string;
+ break;
+
+ case DW_AT_low_pc:
+ if (val.encoding == ATTR_VAL_ADDRESS)
+ {
+ lowpc = val.u.uint;
+ have_lowpc = 1;
+ }
+ break;
+
+ case DW_AT_high_pc:
+ if (val.encoding == ATTR_VAL_ADDRESS)
+ {
+ highpc = val.u.uint;
+ have_highpc = 1;
+ }
+ else if (val.encoding == ATTR_VAL_UINT)
+ {
+ highpc = val.u.uint;
+ have_highpc = 1;
+ highpc_is_relative = 1;
+ }
+ break;
+
+ case DW_AT_ranges:
+ if (val.encoding == ATTR_VAL_UINT
+ || val.encoding == ATTR_VAL_REF_SECTION)
+ {
+ ranges = val.u.uint;
+ have_ranges = 1;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ /* If we couldn't find a name for the function, we have no use
+ for it. */
+ if (is_function && function->name == NULL)
+ {
+ backtrace_free (state, function, sizeof *function,
+ error_callback, data);
+ is_function = 0;
+ }
+
+ if (is_function)
+ {
+ if (have_ranges)
+ {
+ if (!add_function_ranges (state, ddata, u, function, ranges,
+ base, error_callback, data, vec))
+ return 0;
+ }
+ else if (have_lowpc && have_highpc)
+ {
+ if (highpc_is_relative)
+ highpc += lowpc;
+ if (!add_function_range (state, ddata, function, lowpc, highpc,
+ error_callback, data, vec))
+ return 0;
+ }
+ else
+ {
+ backtrace_free (state, function, sizeof *function,
+ error_callback, data);
+ is_function = 0;
+ }
+ }
+
+ if (abbrev->has_children)
+ {
+ if (!is_function)
+ {
+ if (!read_function_entry (state, ddata, u, base, unit_buf, lhdr,
+ error_callback, data, vec_function,
+ vec_inlined))
+ return 0;
+ }
+ else
+ {
+ struct function_vector fvec;
+
+ /* Gather any information for inlined functions in
+ FVEC. */
+
+ memset (&fvec, 0, sizeof fvec);
+
+ if (!read_function_entry (state, ddata, u, base, unit_buf, lhdr,
+ error_callback, data, vec_function,
+ &fvec))
+ return 0;
+
+ if (fvec.count > 0)
+ {
+ struct function_addrs *faddrs;
+
+ if (!backtrace_vector_release (state, &fvec.vec,
+ error_callback, data))
+ return 0;
+
+ faddrs = (struct function_addrs *) fvec.vec.base;
+ backtrace_qsort (faddrs, fvec.count,
+ sizeof (struct function_addrs),
+ function_addrs_compare);
+
+ function->function_addrs = faddrs;
+ function->function_addrs_count = fvec.count;
+ }
+ }
+ }
+ }
+
+ return 1;
+}
+
+/* Read function name information for a compilation unit. We look
+ through the whole unit looking for function tags. */
+
+static void
+read_function_info (struct backtrace_state *state, struct dwarf_data *ddata,
+ const struct line_header *lhdr,
+ backtrace_error_callback error_callback, void *data,
+ struct unit *u, struct function_vector *fvec,
+ struct function_addrs **ret_addrs,
+ size_t *ret_addrs_count)
+{
+ struct function_vector lvec;
+ struct function_vector *pfvec;
+ struct dwarf_buf unit_buf;
+ struct function_addrs *addrs;
+ size_t addrs_count;
+
+ /* Use FVEC if it is not NULL. Otherwise use our own vector. */
+ if (fvec != NULL)
+ pfvec = fvec;
+ else
+ {
+ memset (&lvec, 0, sizeof lvec);
+ pfvec = &lvec;
+ }
+
+ unit_buf.name = ".debug_info";
+ unit_buf.start = ddata->dwarf_info;
+ unit_buf.buf = u->unit_data;
+ unit_buf.left = u->unit_data_len;
+ unit_buf.is_bigendian = ddata->is_bigendian;
+ unit_buf.error_callback = error_callback;
+ unit_buf.data = data;
+ unit_buf.reported_underflow = 0;
+
+ while (unit_buf.left > 0)
+ {
+ if (!read_function_entry (state, ddata, u, 0, &unit_buf, lhdr,
+ error_callback, data, pfvec, pfvec))
+ return;
+ }
+
+ if (pfvec->count == 0)
+ return;
+
+ addrs_count = pfvec->count;
+
+ if (fvec == NULL)
+ {
+ if (!backtrace_vector_release (state, &lvec.vec, error_callback, data))
+ return;
+ addrs = (struct function_addrs *) pfvec->vec.base;
+ }
+ else
+ {
+ /* Finish this list of addresses, but leave the remaining space in
+ the vector available for the next function unit. */
+ addrs = ((struct function_addrs *)
+ backtrace_vector_finish (state, &fvec->vec,
+ error_callback, data));
+ if (addrs == NULL)
+ return;
+ fvec->count = 0;
+ }
+
+ backtrace_qsort (addrs, addrs_count, sizeof (struct function_addrs),
+ function_addrs_compare);
+
+ *ret_addrs = addrs;
+ *ret_addrs_count = addrs_count;
+}
+
+/* See if PC is inlined in FUNCTION. If it is, print out the inlined
+ information, and update FILENAME and LINENO for the caller.
+ Returns whatever CALLBACK returns, or 0 to keep going. */
+
+static int
+report_inlined_functions (uintptr_t pc, struct function *function,
+ backtrace_full_callback callback, void *data,
+ const char **filename, int *lineno)
+{
+ struct function_addrs *function_addrs;
+ struct function *inlined;
+ int ret;
+
+ if (function->function_addrs_count == 0)
+ return 0;
+
+ function_addrs = ((struct function_addrs *)
+ bsearch (&pc, function->function_addrs,
+ function->function_addrs_count,
+ sizeof (struct function_addrs),
+ function_addrs_search));
+ if (function_addrs == NULL)
+ return 0;
+
+ while (((size_t) (function_addrs - function->function_addrs) + 1
+ < function->function_addrs_count)
+ && pc >= (function_addrs + 1)->low
+ && pc < (function_addrs + 1)->high)
+ ++function_addrs;
+
+ /* We found an inlined call. */
+
+ inlined = function_addrs->function;
+
+ /* Report any calls inlined into this one. */
+ ret = report_inlined_functions (pc, inlined, callback, data,
+ filename, lineno);
+ if (ret != 0)
+ return ret;
+
+ /* Report this inlined call. */
+ ret = callback (data, pc, *filename, *lineno, inlined->name);
+ if (ret != 0)
+ return ret;
+
+ /* Our caller will report the caller of the inlined function; tell
+ it the appropriate filename and line number. */
+ *filename = inlined->caller_filename;
+ *lineno = inlined->caller_lineno;
+
+ return 0;
+}
+
+/* Look for a PC in the DWARF mapping for one module. On success,
+ call CALLBACK and return whatever it returns. On error, call
+ ERROR_CALLBACK and return 0. Sets *FOUND to 1 if the PC is found,
+ 0 if not. */
+
+static int
+dwarf_lookup_pc (struct backtrace_state *state, struct dwarf_data *ddata,
+ uintptr_t pc, backtrace_full_callback callback,
+ backtrace_error_callback error_callback, void *data,
+ int *found)
+{
+ struct unit_addrs *entry;
+ struct unit *u;
+ int new_data;
+ struct line *lines;
+ struct line *ln;
+ struct function_addrs *function_addrs;
+ struct function *function;
+ const char *filename;
+ int lineno;
+ int ret;
+
+ *found = 1;
+
+ /* Find an address range that includes PC. */
+ entry = bsearch (&pc, ddata->addrs, ddata->addrs_count,
+ sizeof (struct unit_addrs), unit_addrs_search);
+
+ if (entry == NULL)
+ {
+ *found = 0;
+ return 0;
+ }
+
+ /* If there are multiple ranges that contain PC, use the last one,
+ in order to produce predictable results. If we assume that all
+ ranges are properly nested, then the last range will be the
+ smallest one. */
+ while ((size_t) (entry - ddata->addrs) + 1 < ddata->addrs_count
+ && pc >= (entry + 1)->low
+ && pc < (entry + 1)->high)
+ ++entry;
+
+ /* We need the lines, lines_count, function_addrs,
+ function_addrs_count fields of u. If they are not set, we need
+ to set them. When running in threaded mode, we need to allow for
+ the possibility that some other thread is setting them
+ simultaneously. */
+
+ u = entry->u;
+ lines = u->lines;
+
+ /* Skip units with no useful line number information by walking
+ backward. Useless line number information is marked by setting
+ lines == -1. */
+ while (entry > ddata->addrs
+ && pc >= (entry - 1)->low
+ && pc < (entry - 1)->high)
+ {
+ if (state->threaded)
+ lines = (struct line *) backtrace_atomic_load_pointer (&u->lines);
+
+ if (lines != (struct line *) (uintptr_t) -1)
+ break;
+
+ --entry;
+
+ u = entry->u;
+ lines = u->lines;
+ }
+
+ if (state->threaded)
+ lines = backtrace_atomic_load_pointer (&u->lines);
+
+ new_data = 0;
+ if (lines == NULL)
+ {
+ size_t function_addrs_count;
+ struct line_header lhdr;
+ size_t count;
+
+ /* We have never read the line information for this unit. Read
+ it now. */
+
+ function_addrs = NULL;
+ function_addrs_count = 0;
+ if (read_line_info (state, ddata, error_callback, data, entry->u, &lhdr,
+ &lines, &count))
+ {
+ struct function_vector *pfvec;
+
+ /* If not threaded, reuse DDATA->FVEC for better memory
+ consumption. */
+ if (state->threaded)
+ pfvec = NULL;
+ else
+ pfvec = &ddata->fvec;
+ read_function_info (state, ddata, &lhdr, error_callback, data,
+ entry->u, pfvec, &function_addrs,
+ &function_addrs_count);
+ free_line_header (state, &lhdr, error_callback, data);
+ new_data = 1;
+ }
+
+ /* Atomically store the information we just read into the unit.
+ If another thread is simultaneously writing, it presumably
+ read the same information, and we don't care which one we
+ wind up with; we just leak the other one. We do have to
+ write the lines field last, so that the acquire-loads above
+ ensure that the other fields are set. */
+
+ if (!state->threaded)
+ {
+ u->lines_count = count;
+ u->function_addrs = function_addrs;
+ u->function_addrs_count = function_addrs_count;
+ u->lines = lines;
+ }
+ else
+ {
+ backtrace_atomic_store_size_t (&u->lines_count, count);
+ backtrace_atomic_store_pointer (&u->function_addrs, function_addrs);
+ backtrace_atomic_store_size_t (&u->function_addrs_count,
+ function_addrs_count);
+ backtrace_atomic_store_pointer (&u->lines, lines);
+ }
+ }
+
+ /* Now all fields of U have been initialized. */
+
+ if (lines == (struct line *) (uintptr_t) -1)
+ {
+ /* If reading the line number information failed in some way,
+ try again to see if there is a better compilation unit for
+ this PC. */
+ if (new_data)
+ return dwarf_lookup_pc (state, ddata, pc, callback, error_callback,
+ data, found);
+ return callback (data, pc, NULL, 0, NULL);
+ }
+
+ /* Search for PC within this unit. */
+
+ ln = (struct line *) bsearch (&pc, lines, entry->u->lines_count,
+ sizeof (struct line), line_search);
+ if (ln == NULL)
+ {
+ /* The PC is between the low_pc and high_pc attributes of the
+ compilation unit, but no entry in the line table covers it.
+ This implies that the start of the compilation unit has no
+ line number information. */
+
+ if (entry->u->abs_filename == NULL)
+ {
+ const char *filename1;
+
+ filename1 = entry->u->filename;
+ if (filename1 != NULL
+ && !IS_ABSOLUTE_PATH (filename1)
+ && entry->u->comp_dir != NULL)
+ {
+ size_t filename_len;
+ const char *dir;
+ size_t dir_len;
+ char *s;
+
+ filename_len = strlen (filename1);
+ dir = entry->u->comp_dir;
+ dir_len = strlen (dir);
+ s = (char *) backtrace_alloc (state, dir_len + filename_len + 2,
+ error_callback, data);
+ if (s == NULL)
+ {
+ *found = 0;
+ return 0;
+ }
+ memcpy (s, dir, dir_len);
+ /* FIXME: Should use backslash if DOS file system. */
+ s[dir_len] = '/';
+ memcpy (s + dir_len + 1, filename1, filename_len + 1);
+ filename1 = s;
+ }
+ entry->u->abs_filename = filename1;
+ }
+
+ return callback (data, pc, entry->u->abs_filename, 0, NULL);
+ }
+
+ /* Search for function name within this unit. */
+
+ if (entry->u->function_addrs_count == 0)
+ return callback (data, pc, ln->filename, ln->lineno, NULL);
+
+ function_addrs = ((struct function_addrs *)
+ bsearch (&pc, entry->u->function_addrs,
+ entry->u->function_addrs_count,
+ sizeof (struct function_addrs),
+ function_addrs_search));
+ if (function_addrs == NULL)
+ return callback (data, pc, ln->filename, ln->lineno, NULL);
+
+ /* If there are multiple function ranges that contain PC, use the
+ last one, in order to produce predictable results. */
+
+ while (((size_t) (function_addrs - entry->u->function_addrs + 1)
+ < entry->u->function_addrs_count)
+ && pc >= (function_addrs + 1)->low
+ && pc < (function_addrs + 1)->high)
+ ++function_addrs;
+
+ function = function_addrs->function;
+
+ filename = ln->filename;
+ lineno = ln->lineno;
+
+ ret = report_inlined_functions (pc, function, callback, data,
+ &filename, &lineno);
+ if (ret != 0)
+ return ret;
+
+ return callback (data, pc, filename, lineno, function->name);
+}
+
+
+/* Return the file/line information for a PC using the DWARF mapping
+ we built earlier. */
+
+static int
+dwarf_fileline (struct backtrace_state *state, uintptr_t pc,
+ backtrace_full_callback callback,
+ backtrace_error_callback error_callback, void *data)
+{
+ struct dwarf_data *ddata;
+ int found;
+ int ret;
+
+ if (!state->threaded)
+ {
+ for (ddata = (struct dwarf_data *) state->fileline_data;
+ ddata != NULL;
+ ddata = ddata->next)
+ {
+ ret = dwarf_lookup_pc (state, ddata, pc, callback, error_callback,
+ data, &found);
+ if (ret != 0 || found)
+ return ret;
+ }
+ }
+ else
+ {
+ struct dwarf_data **pp;
+
+ pp = (struct dwarf_data **) (void *) &state->fileline_data;
+ while (1)
+ {
+ ddata = backtrace_atomic_load_pointer (pp);
+ if (ddata == NULL)
+ break;
+
+ ret = dwarf_lookup_pc (state, ddata, pc, callback, error_callback,
+ data, &found);
+ if (ret != 0 || found)
+ return ret;
+
+ pp = &ddata->next;
+ }
+ }
+
+ /* FIXME: See if any libraries have been dlopen'ed. */
+
+ return callback (data, pc, NULL, 0, NULL);
+}
+
+/* Initialize our data structures from the DWARF debug info for a
+ file. Return NULL on failure. */
+
+static struct dwarf_data *
+build_dwarf_data (struct backtrace_state *state,
+ uintptr_t base_address,
+ const unsigned char *dwarf_info,
+ size_t dwarf_info_size,
+ const unsigned char *dwarf_line,
+ size_t dwarf_line_size,
+ const unsigned char *dwarf_abbrev,
+ size_t dwarf_abbrev_size,
+ const unsigned char *dwarf_ranges,
+ size_t dwarf_ranges_size,
+ const unsigned char *dwarf_str,
+ size_t dwarf_str_size,
+ int is_bigendian,
+ backtrace_error_callback error_callback,
+ void *data)
+{
+ struct unit_addrs_vector addrs_vec;
+ struct unit_addrs *addrs;
+ size_t addrs_count;
+ struct dwarf_data *fdata;
+
+ if (!build_address_map (state, base_address, dwarf_info, dwarf_info_size,
+ dwarf_abbrev, dwarf_abbrev_size, dwarf_ranges,
+ dwarf_ranges_size, dwarf_str, dwarf_str_size,
+ is_bigendian, error_callback, data, &addrs_vec))
+ return NULL;
+
+ if (!backtrace_vector_release (state, &addrs_vec.vec, error_callback, data))
+ return NULL;
+ addrs = (struct unit_addrs *) addrs_vec.vec.base;
+ addrs_count = addrs_vec.count;
+ backtrace_qsort (addrs, addrs_count, sizeof (struct unit_addrs),
+ unit_addrs_compare);
+
+ fdata = ((struct dwarf_data *)
+ backtrace_alloc (state, sizeof (struct dwarf_data),
+ error_callback, data));
+ if (fdata == NULL)
+ return NULL;
+
+ fdata->next = NULL;
+ fdata->base_address = base_address;
+ fdata->addrs = addrs;
+ fdata->addrs_count = addrs_count;
+ fdata->dwarf_info = dwarf_info;
+ fdata->dwarf_info_size = dwarf_info_size;
+ fdata->dwarf_line = dwarf_line;
+ fdata->dwarf_line_size = dwarf_line_size;
+ fdata->dwarf_ranges = dwarf_ranges;
+ fdata->dwarf_ranges_size = dwarf_ranges_size;
+ fdata->dwarf_str = dwarf_str;
+ fdata->dwarf_str_size = dwarf_str_size;
+ fdata->is_bigendian = is_bigendian;
+ memset (&fdata->fvec, 0, sizeof fdata->fvec);
+
+ return fdata;
+}
+
+/* Build our data structures from the DWARF sections for a module.
+ Set FILELINE_FN and STATE->FILELINE_DATA. Return 1 on success, 0
+ on failure. */
+
+int
+backtrace_dwarf_add (struct backtrace_state *state,
+ uintptr_t base_address,
+ const unsigned char *dwarf_info,
+ size_t dwarf_info_size,
+ const unsigned char *dwarf_line,
+ size_t dwarf_line_size,
+ const unsigned char *dwarf_abbrev,
+ size_t dwarf_abbrev_size,
+ const unsigned char *dwarf_ranges,
+ size_t dwarf_ranges_size,
+ const unsigned char *dwarf_str,
+ size_t dwarf_str_size,
+ int is_bigendian,
+ backtrace_error_callback error_callback,
+ void *data, fileline *fileline_fn)
+{
+ struct dwarf_data *fdata;
+
+ fdata = build_dwarf_data (state, base_address, dwarf_info, dwarf_info_size,
+ dwarf_line, dwarf_line_size, dwarf_abbrev,
+ dwarf_abbrev_size, dwarf_ranges, dwarf_ranges_size,
+ dwarf_str, dwarf_str_size, is_bigendian,
+ error_callback, data);
+ if (fdata == NULL)
+ return 0;
+
+ if (!state->threaded)
+ {
+ struct dwarf_data **pp;
+
+ for (pp = (struct dwarf_data **) (void *) &state->fileline_data;
+ *pp != NULL;
+ pp = &(*pp)->next)
+ ;
+ *pp = fdata;
+ }
+ else
+ {
+ while (1)
+ {
+ struct dwarf_data **pp;
+
+ pp = (struct dwarf_data **) (void *) &state->fileline_data;
+
+ while (1)
+ {
+ struct dwarf_data *p;
+
+ p = backtrace_atomic_load_pointer (pp);
+
+ if (p == NULL)
+ break;
+
+ pp = &p->next;
+ }
+
+ if (__sync_bool_compare_and_swap (pp, NULL, fdata))
+ break;
+ }
+ }
+
+ *fileline_fn = dwarf_fileline;
+
+ return 1;
+}
diff --git a/3rdparty/libbacktrace/edtest.c b/3rdparty/libbacktrace/edtest.c
new file mode 100644
index 000000000..3a2cac411
--- /dev/null
+++ b/3rdparty/libbacktrace/edtest.c
@@ -0,0 +1,121 @@
+/* edtest.c -- Test for libbacktrace storage allocation stress handling
+ Copyright (C) 2017-2018 Free Software Foundation, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "backtrace.h"
+#include "backtrace-supported.h"
+#include "internal.h"
+
+#include "testlib.h"
+
+static int test1 (void) __attribute__ ((noinline, unused));
+static int test1 (void) __attribute__ ((noinline, unused));
+extern int f2 (int);
+extern int f3 (int, int);
+
+static int
+test1 (void)
+{
+ /* Returning a value here and elsewhere avoids a tailcall which
+ would mess up the backtrace. */
+ return f2 (__LINE__) + 1;
+}
+
+int
+f3 (int f1line, int f2line)
+{
+ struct info all[20];
+ struct bdata data;
+ int f3line;
+ int i;
+
+ data.all = &all[0];
+ data.index = 0;
+ data.max = 20;
+ data.failed = 0;
+
+ f3line = __LINE__ + 1;
+ i = backtrace_full (state, 0, callback_one, error_callback_one, &data);
+
+ if (i != 0)
+ {
+ fprintf (stderr, "test1: unexpected return value %d\n", i);
+ data.failed = 1;
+ }
+
+ if (data.index < 3)
+ {
+ fprintf (stderr,
+ "test1: not enough frames; got %zu, expected at least 3\n",
+ data.index);
+ data.failed = 1;
+ }
+
+ check ("test1", 0, all, f3line, "f3", "edtest.c", &data.failed);
+ check ("test1", 1, all, f2line, "f2", "edtest2_build.c", &data.failed);
+ check ("test1", 2, all, f1line, "test1", "edtest.c", &data.failed);
+
+ printf ("%s: backtrace_full alloc stress\n", data.failed ? "FAIL" : "PASS");
+
+ if (data.failed)
+ ++failures;
+
+ return failures;
+}
+
+int
+main (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
+{
+ state = backtrace_create_state (argv[0], BACKTRACE_SUPPORTS_THREADS,
+ error_callback_create, NULL);
+
+ // Grab the storage allocation lock prior to doing anything interesting.
+ // The intent here is to insure that the backtrace_alloc code is forced
+ // to always call mmap() for new memory as opposed to reusing previously
+ // allocated memory from the free list. Doing things this way helps
+ // simulate what you might see in a multithreaded program in which there
+ // are racing calls to the allocator.
+ struct backtrace_state *state_internal =
+ (struct backtrace_state *) state;
+ state_internal->lock_alloc = 1;
+
+ // Kick off the test
+ test1();
+
+ exit (failures > 0 ? EXIT_FAILURE : EXIT_SUCCESS);
+}
diff --git a/3rdparty/libbacktrace/edtest2.c b/3rdparty/libbacktrace/edtest2.c
new file mode 100644
index 000000000..e0c0470be
--- /dev/null
+++ b/3rdparty/libbacktrace/edtest2.c
@@ -0,0 +1,43 @@
+/* edtest2.c -- Test for libbacktrace storage allocation stress handling (p2)
+ Copyright (C) 2017-2018 Free Software Foundation, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+/* This file intentionally written without any #include's
+ */
+
+extern int f3(int, int);
+extern int f2(int);
+
+int f2(int x)
+{
+ /* Returning a value here and elsewhere avoids a tailcall which
+ would mess up the backtrace. */
+ return f3(x, __LINE__) + 3;
+}
diff --git a/3rdparty/libbacktrace/elf.c b/3rdparty/libbacktrace/elf.c
new file mode 100644
index 000000000..51e27b933
--- /dev/null
+++ b/3rdparty/libbacktrace/elf.c
@@ -0,0 +1,3340 @@
+/* elf.c -- Get debug data from an ELF file for backtraces.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#ifdef HAVE_DL_ITERATE_PHDR
+#include <link.h>
+#endif
+
+#include "backtrace.h"
+#include "internal.h"
+
+#ifndef S_ISLNK
+ #ifndef S_IFLNK
+ #define S_IFLNK 0120000
+ #endif
+ #ifndef S_IFMT
+ #define S_IFMT 0170000
+ #endif
+ #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#endif
+
+#ifndef __GNUC__
+#define __builtin_prefetch(p, r, l)
+#define unlikely(x) (x)
+#else
+#define unlikely(x) __builtin_expect(!!(x), 0)
+#endif
+
+#if !defined(HAVE_DECL_STRNLEN) || !HAVE_DECL_STRNLEN
+
+/* If strnlen is not declared, provide our own version. */
+
+static size_t
+xstrnlen (const char *s, size_t maxlen)
+{
+ size_t i;
+
+ for (i = 0; i < maxlen; ++i)
+ if (s[i] == '\0')
+ break;
+ return i;
+}
+
+#define strnlen xstrnlen
+
+#endif
+
+#ifndef HAVE_LSTAT
+
+/* Dummy version of lstat for systems that don't have it. */
+
+static int
+xlstat (const char *path ATTRIBUTE_UNUSED, struct stat *st ATTRIBUTE_UNUSED)
+{
+ return -1;
+}
+
+#define lstat xlstat
+
+#endif
+
+#ifndef HAVE_READLINK
+
+/* Dummy version of readlink for systems that don't have it. */
+
+static ssize_t
+xreadlink (const char *path ATTRIBUTE_UNUSED, char *buf ATTRIBUTE_UNUSED,
+ size_t bufsz ATTRIBUTE_UNUSED)
+{
+ return -1;
+}
+
+#define readlink xreadlink
+
+#endif
+
+#ifndef HAVE_DL_ITERATE_PHDR
+
+/* Dummy version of dl_iterate_phdr for systems that don't have it. */
+
+#define dl_phdr_info x_dl_phdr_info
+#define dl_iterate_phdr x_dl_iterate_phdr
+
+struct dl_phdr_info
+{
+ uintptr_t dlpi_addr;
+ const char *dlpi_name;
+};
+
+static int
+dl_iterate_phdr (int (*callback) (struct dl_phdr_info *,
+ size_t, void *) ATTRIBUTE_UNUSED,
+ void *data ATTRIBUTE_UNUSED)
+{
+ return 0;
+}
+
+#endif /* ! defined (HAVE_DL_ITERATE_PHDR) */
+
+/* The configure script must tell us whether we are 32-bit or 64-bit
+ ELF. We could make this code test and support either possibility,
+ but there is no point. This code only works for the currently
+ running executable, which means that we know the ELF mode at
+ configure time. */
+
+#if BACKTRACE_ELF_SIZE != 32 && BACKTRACE_ELF_SIZE != 64
+#error "Unknown BACKTRACE_ELF_SIZE"
+#endif
+
+/* <link.h> might #include <elf.h> which might define our constants
+ with slightly different values. Undefine them to be safe. */
+
+#undef EI_NIDENT
+#undef EI_MAG0
+#undef EI_MAG1
+#undef EI_MAG2
+#undef EI_MAG3
+#undef EI_CLASS
+#undef EI_DATA
+#undef EI_VERSION
+#undef ELF_MAG0
+#undef ELF_MAG1
+#undef ELF_MAG2
+#undef ELF_MAG3
+#undef ELFCLASS32
+#undef ELFCLASS64
+#undef ELFDATA2LSB
+#undef ELFDATA2MSB
+#undef EV_CURRENT
+#undef ET_DYN
+#undef EM_PPC64
+#undef EF_PPC64_ABI
+#undef SHN_LORESERVE
+#undef SHN_XINDEX
+#undef SHN_UNDEF
+#undef SHT_PROGBITS
+#undef SHT_SYMTAB
+#undef SHT_STRTAB
+#undef SHT_DYNSYM
+#undef SHF_COMPRESSED
+#undef STT_OBJECT
+#undef STT_FUNC
+#undef NT_GNU_BUILD_ID
+#undef ELFCOMPRESS_ZLIB
+
+/* Basic types. */
+
+typedef uint16_t b_elf_half; /* Elf_Half. */
+typedef uint32_t b_elf_word; /* Elf_Word. */
+typedef int32_t b_elf_sword; /* Elf_Sword. */
+
+#if BACKTRACE_ELF_SIZE == 32
+
+typedef uint32_t b_elf_addr; /* Elf_Addr. */
+typedef uint32_t b_elf_off; /* Elf_Off. */
+
+typedef uint32_t b_elf_wxword; /* 32-bit Elf_Word, 64-bit ELF_Xword. */
+
+#else
+
+typedef uint64_t b_elf_addr; /* Elf_Addr. */
+typedef uint64_t b_elf_off; /* Elf_Off. */
+typedef uint64_t b_elf_xword; /* Elf_Xword. */
+typedef int64_t b_elf_sxword; /* Elf_Sxword. */
+
+typedef uint64_t b_elf_wxword; /* 32-bit Elf_Word, 64-bit ELF_Xword. */
+
+#endif
+
+/* Data structures and associated constants. */
+
+#define EI_NIDENT 16
+
+typedef struct {
+ unsigned char e_ident[EI_NIDENT]; /* ELF "magic number" */
+ b_elf_half e_type; /* Identifies object file type */
+ b_elf_half e_machine; /* Specifies required architecture */
+ b_elf_word e_version; /* Identifies object file version */
+ b_elf_addr e_entry; /* Entry point virtual address */
+ b_elf_off e_phoff; /* Program header table file offset */
+ b_elf_off e_shoff; /* Section header table file offset */
+ b_elf_word e_flags; /* Processor-specific flags */
+ b_elf_half e_ehsize; /* ELF header size in bytes */
+ b_elf_half e_phentsize; /* Program header table entry size */
+ b_elf_half e_phnum; /* Program header table entry count */
+ b_elf_half e_shentsize; /* Section header table entry size */
+ b_elf_half e_shnum; /* Section header table entry count */
+ b_elf_half e_shstrndx; /* Section header string table index */
+} b_elf_ehdr; /* Elf_Ehdr. */
+
+#define EI_MAG0 0
+#define EI_MAG1 1
+#define EI_MAG2 2
+#define EI_MAG3 3
+#define EI_CLASS 4
+#define EI_DATA 5
+#define EI_VERSION 6
+
+#define ELFMAG0 0x7f
+#define ELFMAG1 'E'
+#define ELFMAG2 'L'
+#define ELFMAG3 'F'
+
+#define ELFCLASS32 1
+#define ELFCLASS64 2
+
+#define ELFDATA2LSB 1
+#define ELFDATA2MSB 2
+
+#define EV_CURRENT 1
+
+#define ET_DYN 3
+
+#define EM_PPC64 21
+#define EF_PPC64_ABI 3
+
+typedef struct {
+ b_elf_word sh_name; /* Section name, index in string tbl */
+ b_elf_word sh_type; /* Type of section */
+ b_elf_wxword sh_flags; /* Miscellaneous section attributes */
+ b_elf_addr sh_addr; /* Section virtual addr at execution */
+ b_elf_off sh_offset; /* Section file offset */
+ b_elf_wxword sh_size; /* Size of section in bytes */
+ b_elf_word sh_link; /* Index of another section */
+ b_elf_word sh_info; /* Additional section information */
+ b_elf_wxword sh_addralign; /* Section alignment */
+ b_elf_wxword sh_entsize; /* Entry size if section holds table */
+} b_elf_shdr; /* Elf_Shdr. */
+
+#define SHN_UNDEF 0x0000 /* Undefined section */
+#define SHN_LORESERVE 0xFF00 /* Begin range of reserved indices */
+#define SHN_XINDEX 0xFFFF /* Section index is held elsewhere */
+
+#define SHT_PROGBITS 1
+#define SHT_SYMTAB 2
+#define SHT_STRTAB 3
+#define SHT_DYNSYM 11
+
+#define SHF_COMPRESSED 0x800
+
+#if BACKTRACE_ELF_SIZE == 32
+
+typedef struct
+{
+ b_elf_word st_name; /* Symbol name, index in string tbl */
+ b_elf_addr st_value; /* Symbol value */
+ b_elf_word st_size; /* Symbol size */
+ unsigned char st_info; /* Symbol binding and type */
+ unsigned char st_other; /* Visibility and other data */
+ b_elf_half st_shndx; /* Symbol section index */
+} b_elf_sym; /* Elf_Sym. */
+
+#else /* BACKTRACE_ELF_SIZE != 32 */
+
+typedef struct
+{
+ b_elf_word st_name; /* Symbol name, index in string tbl */
+ unsigned char st_info; /* Symbol binding and type */
+ unsigned char st_other; /* Visibility and other data */
+ b_elf_half st_shndx; /* Symbol section index */
+ b_elf_addr st_value; /* Symbol value */
+ b_elf_xword st_size; /* Symbol size */
+} b_elf_sym; /* Elf_Sym. */
+
+#endif /* BACKTRACE_ELF_SIZE != 32 */
+
+#define STT_OBJECT 1
+#define STT_FUNC 2
+
+typedef struct
+{
+ uint32_t namesz;
+ uint32_t descsz;
+ uint32_t type;
+ char name[1];
+} b_elf_note;
+
+#define NT_GNU_BUILD_ID 3
+
+#if BACKTRACE_ELF_SIZE == 32
+
+typedef struct
+{
+ b_elf_word ch_type; /* Compresstion algorithm */
+ b_elf_word ch_size; /* Uncompressed size */
+ b_elf_word ch_addralign; /* Alignment for uncompressed data */
+} b_elf_chdr; /* Elf_Chdr */
+
+#else /* BACKTRACE_ELF_SIZE != 32 */
+
+typedef struct
+{
+ b_elf_word ch_type; /* Compression algorithm */
+ b_elf_word ch_reserved; /* Reserved */
+ b_elf_xword ch_size; /* Uncompressed size */
+ b_elf_xword ch_addralign; /* Alignment for uncompressed data */
+} b_elf_chdr; /* Elf_Chdr */
+
+#endif /* BACKTRACE_ELF_SIZE != 32 */
+
+#define ELFCOMPRESS_ZLIB 1
+
+/* An index of ELF sections we care about. */
+
+enum debug_section
+{
+ DEBUG_INFO,
+ DEBUG_LINE,
+ DEBUG_ABBREV,
+ DEBUG_RANGES,
+ DEBUG_STR,
+
+ /* The old style compressed sections. This list must correspond to
+ the list of normal debug sections. */
+ ZDEBUG_INFO,
+ ZDEBUG_LINE,
+ ZDEBUG_ABBREV,
+ ZDEBUG_RANGES,
+ ZDEBUG_STR,
+
+ DEBUG_MAX
+};
+
+/* Names of sections, indexed by enum elf_section. */
+
+static const char * const debug_section_names[DEBUG_MAX] =
+{
+ ".debug_info",
+ ".debug_line",
+ ".debug_abbrev",
+ ".debug_ranges",
+ ".debug_str",
+ ".zdebug_info",
+ ".zdebug_line",
+ ".zdebug_abbrev",
+ ".zdebug_ranges",
+ ".zdebug_str"
+};
+
+/* Information we gather for the sections we care about. */
+
+struct debug_section_info
+{
+ /* Section file offset. */
+ off_t offset;
+ /* Section size. */
+ size_t size;
+ /* Section contents, after read from file. */
+ const unsigned char *data;
+ /* Whether the SHF_COMPRESSED flag is set for the section. */
+ int compressed;
+};
+
+/* Information we keep for an ELF symbol. */
+
+struct elf_symbol
+{
+ /* The name of the symbol. */
+ const char *name;
+ /* The address of the symbol. */
+ uintptr_t address;
+ /* The size of the symbol. */
+ size_t size;
+};
+
+/* Information to pass to elf_syminfo. */
+
+struct elf_syminfo_data
+{
+ /* Symbols for the next module. */
+ struct elf_syminfo_data *next;
+ /* The ELF symbols, sorted by address. */
+ struct elf_symbol *symbols;
+ /* The number of symbols. */
+ size_t count;
+};
+
+/* Information about PowerPC64 ELFv1 .opd section. */
+
+struct elf_ppc64_opd_data
+{
+ /* Address of the .opd section. */
+ b_elf_addr addr;
+ /* Section data. */
+ const char *data;
+ /* Size of the .opd section. */
+ size_t size;
+ /* Corresponding section view. */
+ struct backtrace_view view;
+};
+
+/* Compute the CRC-32 of BUF/LEN. This uses the CRC used for
+ .gnu_debuglink files. */
+
+static uint32_t
+elf_crc32 (uint32_t crc, const unsigned char *buf, size_t len)
+{
+ static const uint32_t crc32_table[256] =
+ {
+ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+ 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+ 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+ 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+ 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+ 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+ 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+ 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+ 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+ 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+ 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+ 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+ 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+ 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+ 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+ 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+ 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+ 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+ 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+ 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+ 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+ 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+ 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+ 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+ 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+ 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+ 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+ 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+ 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+ 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+ 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+ 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+ 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+ 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+ 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+ 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+ 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+ 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+ 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+ 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+ 0x2d02ef8d
+ };
+ const unsigned char *end;
+
+ crc = ~crc;
+ for (end = buf + len; buf < end; ++ buf)
+ crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
+ return ~crc;
+}
+
+/* Return the CRC-32 of the entire file open at DESCRIPTOR. */
+
+static uint32_t
+elf_crc32_file (struct backtrace_state *state, int descriptor,
+ backtrace_error_callback error_callback, void *data)
+{
+ struct stat st;
+ struct backtrace_view file_view;
+ uint32_t ret;
+
+ if (fstat (descriptor, &st) < 0)
+ {
+ error_callback (data, "fstat", errno);
+ return 0;
+ }
+
+ if (!backtrace_get_view (state, descriptor, 0, st.st_size, error_callback,
+ data, &file_view))
+ return 0;
+
+ ret = elf_crc32 (0, (const unsigned char *) file_view.data, st.st_size);
+
+ backtrace_release_view (state, &file_view, error_callback, data);
+
+ return ret;
+}
+
+/* A dummy callback function used when we can't find any debug info. */
+
+static int
+elf_nodebug (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ uintptr_t pc ATTRIBUTE_UNUSED,
+ backtrace_full_callback callback ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback, void *data)
+{
+ error_callback (data, "no debug info in ELF executable", -1);
+ return 0;
+}
+
+/* A dummy callback function used when we can't find a symbol
+ table. */
+
+static void
+elf_nosyms (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ uintptr_t addr ATTRIBUTE_UNUSED,
+ backtrace_syminfo_callback callback ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback, void *data)
+{
+ error_callback (data, "no symbol table in ELF executable", -1);
+}
+
+/* Compare struct elf_symbol for qsort. */
+
+static int
+elf_symbol_compare (const void *v1, const void *v2)
+{
+ const struct elf_symbol *e1 = (const struct elf_symbol *) v1;
+ const struct elf_symbol *e2 = (const struct elf_symbol *) v2;
+
+ if (e1->address < e2->address)
+ return -1;
+ else if (e1->address > e2->address)
+ return 1;
+ else
+ return 0;
+}
+
+/* Compare an ADDR against an elf_symbol for bsearch. We allocate one
+ extra entry in the array so that this can look safely at the next
+ entry. */
+
+static int
+elf_symbol_search (const void *vkey, const void *ventry)
+{
+ const uintptr_t *key = (const uintptr_t *) vkey;
+ const struct elf_symbol *entry = (const struct elf_symbol *) ventry;
+ uintptr_t addr;
+
+ addr = *key;
+ if (addr < entry->address)
+ return -1;
+ else if (addr >= entry->address + entry->size)
+ return 1;
+ else
+ return 0;
+}
+
+/* Initialize the symbol table info for elf_syminfo. */
+
+static int
+elf_initialize_syminfo (struct backtrace_state *state,
+ uintptr_t base_address,
+ const unsigned char *symtab_data, size_t symtab_size,
+ const unsigned char *strtab, size_t strtab_size,
+ backtrace_error_callback error_callback,
+ void *data, struct elf_syminfo_data *sdata,
+ struct elf_ppc64_opd_data *opd)
+{
+ size_t sym_count;
+ const b_elf_sym *sym;
+ size_t elf_symbol_count;
+ size_t elf_symbol_size;
+ struct elf_symbol *elf_symbols;
+ size_t i;
+ unsigned int j;
+
+ sym_count = symtab_size / sizeof (b_elf_sym);
+
+ /* We only care about function symbols. Count them. */
+ sym = (const b_elf_sym *) symtab_data;
+ elf_symbol_count = 0;
+ for (i = 0; i < sym_count; ++i, ++sym)
+ {
+ int info;
+
+ info = sym->st_info & 0xf;
+ if ((info == STT_FUNC || info == STT_OBJECT)
+ && sym->st_shndx != SHN_UNDEF)
+ ++elf_symbol_count;
+ }
+
+ elf_symbol_size = elf_symbol_count * sizeof (struct elf_symbol);
+ elf_symbols = ((struct elf_symbol *)
+ backtrace_alloc (state, elf_symbol_size, error_callback,
+ data));
+ if (elf_symbols == NULL)
+ return 0;
+
+ sym = (const b_elf_sym *) symtab_data;
+ j = 0;
+ for (i = 0; i < sym_count; ++i, ++sym)
+ {
+ int info;
+
+ info = sym->st_info & 0xf;
+ if (info != STT_FUNC && info != STT_OBJECT)
+ continue;
+ if (sym->st_shndx == SHN_UNDEF)
+ continue;
+ if (sym->st_name >= strtab_size)
+ {
+ error_callback (data, "symbol string index out of range", 0);
+ backtrace_free (state, elf_symbols, elf_symbol_size, error_callback,
+ data);
+ return 0;
+ }
+ elf_symbols[j].name = (const char *) strtab + sym->st_name;
+ /* Special case PowerPC64 ELFv1 symbols in .opd section, if the symbol
+ is a function descriptor, read the actual code address from the
+ descriptor. */
+ if (opd
+ && sym->st_value >= opd->addr
+ && sym->st_value < opd->addr + opd->size)
+ elf_symbols[j].address
+ = *(const b_elf_addr *) (opd->data + (sym->st_value - opd->addr));
+ else
+ elf_symbols[j].address = sym->st_value;
+ elf_symbols[j].address += base_address;
+ elf_symbols[j].size = sym->st_size;
+ ++j;
+ }
+
+ backtrace_qsort (elf_symbols, elf_symbol_count, sizeof (struct elf_symbol),
+ elf_symbol_compare);
+
+ sdata->next = NULL;
+ sdata->symbols = elf_symbols;
+ sdata->count = elf_symbol_count;
+
+ return 1;
+}
+
+/* Add EDATA to the list in STATE. */
+
+static void
+elf_add_syminfo_data (struct backtrace_state *state,
+ struct elf_syminfo_data *edata)
+{
+ if (!state->threaded)
+ {
+ struct elf_syminfo_data **pp;
+
+ for (pp = (struct elf_syminfo_data **) (void *) &state->syminfo_data;
+ *pp != NULL;
+ pp = &(*pp)->next)
+ ;
+ *pp = edata;
+ }
+ else
+ {
+ while (1)
+ {
+ struct elf_syminfo_data **pp;
+
+ pp = (struct elf_syminfo_data **) (void *) &state->syminfo_data;
+
+ while (1)
+ {
+ struct elf_syminfo_data *p;
+
+ p = backtrace_atomic_load_pointer (pp);
+
+ if (p == NULL)
+ break;
+
+ pp = &p->next;
+ }
+
+ if (__sync_bool_compare_and_swap (pp, NULL, edata))
+ break;
+ }
+ }
+}
+
+/* Return the symbol name and value for an ADDR. */
+
+static void
+elf_syminfo (struct backtrace_state *state, uintptr_t addr,
+ backtrace_syminfo_callback callback,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data)
+{
+ struct elf_syminfo_data *edata;
+ struct elf_symbol *sym = NULL;
+
+ if (!state->threaded)
+ {
+ for (edata = (struct elf_syminfo_data *) state->syminfo_data;
+ edata != NULL;
+ edata = edata->next)
+ {
+ sym = ((struct elf_symbol *)
+ bsearch (&addr, edata->symbols, edata->count,
+ sizeof (struct elf_symbol), elf_symbol_search));
+ if (sym != NULL)
+ break;
+ }
+ }
+ else
+ {
+ struct elf_syminfo_data **pp;
+
+ pp = (struct elf_syminfo_data **) (void *) &state->syminfo_data;
+ while (1)
+ {
+ edata = backtrace_atomic_load_pointer (pp);
+ if (edata == NULL)
+ break;
+
+ sym = ((struct elf_symbol *)
+ bsearch (&addr, edata->symbols, edata->count,
+ sizeof (struct elf_symbol), elf_symbol_search));
+ if (sym != NULL)
+ break;
+
+ pp = &edata->next;
+ }
+ }
+
+ if (sym == NULL)
+ callback (data, addr, NULL, 0, 0);
+ else
+ callback (data, addr, sym->name, sym->address, sym->size);
+}
+
+/* Return whether FILENAME is a symlink. */
+
+static int
+elf_is_symlink (const char *filename)
+{
+ struct stat st;
+
+ if (lstat (filename, &st) < 0)
+ return 0;
+ return S_ISLNK (st.st_mode);
+}
+
+/* Return the results of reading the symlink FILENAME in a buffer
+ allocated by backtrace_alloc. Return the length of the buffer in
+ *LEN. */
+
+static char *
+elf_readlink (struct backtrace_state *state, const char *filename,
+ backtrace_error_callback error_callback, void *data,
+ size_t *plen)
+{
+ size_t len;
+ char *buf;
+
+ len = 128;
+ while (1)
+ {
+ ssize_t rl;
+
+ buf = backtrace_alloc (state, len, error_callback, data);
+ if (buf == NULL)
+ return NULL;
+ rl = readlink (filename, buf, len);
+ if (rl < 0)
+ {
+ backtrace_free (state, buf, len, error_callback, data);
+ return NULL;
+ }
+ if ((size_t) rl < len - 1)
+ {
+ buf[rl] = '\0';
+ *plen = len;
+ return buf;
+ }
+ backtrace_free (state, buf, len, error_callback, data);
+ len *= 2;
+ }
+}
+
+/* Open a separate debug info file, using the build ID to find it.
+ Returns an open file descriptor, or -1.
+
+ The GDB manual says that the only place gdb looks for a debug file
+ when the build ID is known is in /usr/lib/debug/.build-id. */
+
+static int
+elf_open_debugfile_by_buildid (struct backtrace_state *state,
+ const char *buildid_data, size_t buildid_size,
+ backtrace_error_callback error_callback,
+ void *data)
+{
+ const char * const prefix = "/usr/lib/debug/.build-id/";
+ const size_t prefix_len = strlen (prefix);
+ const char * const suffix = ".debug";
+ const size_t suffix_len = strlen (suffix);
+ size_t len;
+ char *bd_filename;
+ char *t;
+ size_t i;
+ int ret;
+ int does_not_exist;
+
+ len = prefix_len + buildid_size * 2 + suffix_len + 2;
+ bd_filename = backtrace_alloc (state, len, error_callback, data);
+ if (bd_filename == NULL)
+ return -1;
+
+ t = bd_filename;
+ memcpy (t, prefix, prefix_len);
+ t += prefix_len;
+ for (i = 0; i < buildid_size; i++)
+ {
+ unsigned char b;
+ unsigned char nib;
+
+ b = (unsigned char) buildid_data[i];
+ nib = (b & 0xf0) >> 4;
+ *t++ = nib < 10 ? '0' + nib : 'a' + nib - 10;
+ nib = b & 0x0f;
+ *t++ = nib < 10 ? '0' + nib : 'a' + nib - 10;
+ if (i == 0)
+ *t++ = '/';
+ }
+ memcpy (t, suffix, suffix_len);
+ t[suffix_len] = '\0';
+
+ ret = backtrace_open (bd_filename, error_callback, data, &does_not_exist);
+
+ backtrace_free (state, bd_filename, len, error_callback, data);
+
+ /* gdb checks that the debuginfo file has the same build ID note.
+ That seems kind of pointless to me--why would it have the right
+ name but not the right build ID?--so skipping the check. */
+
+ return ret;
+}
+
+/* Try to open a file whose name is PREFIX (length PREFIX_LEN)
+ concatenated with PREFIX2 (length PREFIX2_LEN) concatenated with
+ DEBUGLINK_NAME. Returns an open file descriptor, or -1. */
+
+static int
+elf_try_debugfile (struct backtrace_state *state, const char *prefix,
+ size_t prefix_len, const char *prefix2, size_t prefix2_len,
+ const char *debuglink_name,
+ backtrace_error_callback error_callback, void *data)
+{
+ size_t debuglink_len;
+ size_t try_len;
+ char *try;
+ int does_not_exist;
+ int ret;
+
+ debuglink_len = strlen (debuglink_name);
+ try_len = prefix_len + prefix2_len + debuglink_len + 1;
+ try = backtrace_alloc (state, try_len, error_callback, data);
+ if (try == NULL)
+ return -1;
+
+ memcpy (try, prefix, prefix_len);
+ memcpy (try + prefix_len, prefix2, prefix2_len);
+ memcpy (try + prefix_len + prefix2_len, debuglink_name, debuglink_len);
+ try[prefix_len + prefix2_len + debuglink_len] = '\0';
+
+ ret = backtrace_open (try, error_callback, data, &does_not_exist);
+
+ backtrace_free (state, try, try_len, error_callback, data);
+
+ return ret;
+}
+
+/* Find a separate debug info file, using the debuglink section data
+ to find it. Returns an open file descriptor, or -1. */
+
+static int
+elf_find_debugfile_by_debuglink (struct backtrace_state *state,
+ const char *filename,
+ const char *debuglink_name,
+ backtrace_error_callback error_callback,
+ void *data)
+{
+ int ret;
+ char *alc;
+ size_t alc_len;
+ const char *slash;
+ int ddescriptor;
+ const char *prefix;
+ size_t prefix_len;
+
+ /* Resolve symlinks in FILENAME. Since FILENAME is fairly likely to
+ be /proc/self/exe, symlinks are common. We don't try to resolve
+ the whole path name, just the base name. */
+ ret = -1;
+ alc = NULL;
+ alc_len = 0;
+ while (elf_is_symlink (filename))
+ {
+ char *new_buf;
+ size_t new_len;
+
+ new_buf = elf_readlink (state, filename, error_callback, data, &new_len);
+ if (new_buf == NULL)
+ break;
+
+ if (new_buf[0] == '/')
+ filename = new_buf;
+ else
+ {
+ slash = strrchr (filename, '/');
+ if (slash == NULL)
+ filename = new_buf;
+ else
+ {
+ size_t clen;
+ char *c;
+
+ slash++;
+ clen = slash - filename + strlen (new_buf) + 1;
+ c = backtrace_alloc (state, clen, error_callback, data);
+ if (c == NULL)
+ goto done;
+
+ memcpy (c, filename, slash - filename);
+ memcpy (c + (slash - filename), new_buf, strlen (new_buf));
+ c[slash - filename + strlen (new_buf)] = '\0';
+ backtrace_free (state, new_buf, new_len, error_callback, data);
+ filename = c;
+ new_buf = c;
+ new_len = clen;
+ }
+ }
+
+ if (alc != NULL)
+ backtrace_free (state, alc, alc_len, error_callback, data);
+ alc = new_buf;
+ alc_len = new_len;
+ }
+
+ /* Look for DEBUGLINK_NAME in the same directory as FILENAME. */
+
+ slash = strrchr (filename, '/');
+ if (slash == NULL)
+ {
+ prefix = "";
+ prefix_len = 0;
+ }
+ else
+ {
+ slash++;
+ prefix = filename;
+ prefix_len = slash - filename;
+ }
+
+ ddescriptor = elf_try_debugfile (state, prefix, prefix_len, "", 0,
+ debuglink_name, error_callback, data);
+ if (ddescriptor >= 0)
+ {
+ ret = ddescriptor;
+ goto done;
+ }
+
+ /* Look for DEBUGLINK_NAME in a .debug subdirectory of FILENAME. */
+
+ ddescriptor = elf_try_debugfile (state, prefix, prefix_len, ".debug/",
+ strlen (".debug/"), debuglink_name,
+ error_callback, data);
+ if (ddescriptor >= 0)
+ {
+ ret = ddescriptor;
+ goto done;
+ }
+
+ /* Look for DEBUGLINK_NAME in /usr/lib/debug. */
+
+ ddescriptor = elf_try_debugfile (state, "/usr/lib/debug/",
+ strlen ("/usr/lib/debug/"), prefix,
+ prefix_len, debuglink_name,
+ error_callback, data);
+ if (ddescriptor >= 0)
+ ret = ddescriptor;
+
+ done:
+ if (alc != NULL && alc_len > 0)
+ backtrace_free (state, alc, alc_len, error_callback, data);
+ return ret;
+}
+
+/* Open a separate debug info file, using the debuglink section data
+ to find it. Returns an open file descriptor, or -1. */
+
+static int
+elf_open_debugfile_by_debuglink (struct backtrace_state *state,
+ const char *filename,
+ const char *debuglink_name,
+ uint32_t debuglink_crc,
+ backtrace_error_callback error_callback,
+ void *data)
+{
+ int ddescriptor;
+
+ ddescriptor = elf_find_debugfile_by_debuglink (state, filename,
+ debuglink_name,
+ error_callback, data);
+ if (ddescriptor < 0)
+ return -1;
+
+ if (debuglink_crc != 0)
+ {
+ uint32_t got_crc;
+
+ got_crc = elf_crc32_file (state, ddescriptor, error_callback, data);
+ if (got_crc != debuglink_crc)
+ {
+ backtrace_close (ddescriptor, error_callback, data);
+ return -1;
+ }
+ }
+
+ return ddescriptor;
+}
+
+/* A function useful for setting a breakpoint for an inflation failure
+ when this code is compiled with -g. */
+
+static void
+elf_zlib_failed(void)
+{
+}
+
+/* *PVAL is the current value being read from the stream, and *PBITS
+ is the number of valid bits. Ensure that *PVAL holds at least 15
+ bits by reading additional bits from *PPIN, up to PINEND, as
+ needed. Updates *PPIN, *PVAL and *PBITS. Returns 1 on success, 0
+ on error. */
+
+static int
+elf_zlib_fetch (const unsigned char **ppin, const unsigned char *pinend,
+ uint64_t *pval, unsigned int *pbits)
+{
+ unsigned int bits;
+ const unsigned char *pin;
+ uint64_t val;
+ uint32_t next;
+
+ bits = *pbits;
+ if (bits >= 15)
+ return 1;
+ pin = *ppin;
+ val = *pval;
+
+ if (unlikely (pinend - pin < 4))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) \
+ && defined(__ORDER_BIG_ENDIAN__) \
+ && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ \
+ || __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
+ /* We've ensured that PIN is aligned. */
+ next = *(const uint32_t *)pin;
+
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+ next = __builtin_bswap32 (next);
+#endif
+#else
+ next = pin[0] | (pin[1] << 8) | (pin[2] << 16) | (pin[3] << 24);
+#endif
+
+ val |= (uint64_t)next << bits;
+ bits += 32;
+ pin += 4;
+
+ /* We will need the next four bytes soon. */
+ __builtin_prefetch (pin, 0, 0);
+
+ *ppin = pin;
+ *pval = val;
+ *pbits = bits;
+ return 1;
+}
+
+/* Huffman code tables, like the rest of the zlib format, are defined
+ by RFC 1951. We store a Huffman code table as a series of tables
+ stored sequentially in memory. Each entry in a table is 16 bits.
+ The first, main, table has 256 entries. It is followed by a set of
+ secondary tables of length 2 to 128 entries. The maximum length of
+ a code sequence in the deflate format is 15 bits, so that is all we
+ need. Each secondary table has an index, which is the offset of
+ the table in the overall memory storage.
+
+ The deflate format says that all codes of a given bit length are
+ lexicographically consecutive. Perhaps we could have 130 values
+ that require a 15-bit code, perhaps requiring three secondary
+ tables of size 128. I don't know if this is actually possible, but
+ it suggests that the maximum size required for secondary tables is
+ 3 * 128 + 3 * 64 ... == 768. The zlib enough program reports 660
+ as the maximum. We permit 768, since in addition to the 256 for
+ the primary table, with two bytes per entry, and with the two
+ tables we need, that gives us a page.
+
+ A single table entry needs to store a value or (for the main table
+ only) the index and size of a secondary table. Values range from 0
+ to 285, inclusive. Secondary table indexes, per above, range from
+ 0 to 510. For a value we need to store the number of bits we need
+ to determine that value (one value may appear multiple times in the
+ table), which is 1 to 8. For a secondary table we need to store
+ the number of bits used to index into the table, which is 1 to 7.
+ And of course we need 1 bit to decide whether we have a value or a
+ secondary table index. So each entry needs 9 bits for value/table
+ index, 3 bits for size, 1 bit what it is. For simplicity we use 16
+ bits per entry. */
+
+/* Number of entries we allocate to for one code table. We get a page
+ for the two code tables we need. */
+
+#define HUFFMAN_TABLE_SIZE (1024)
+
+/* Bit masks and shifts for the values in the table. */
+
+#define HUFFMAN_VALUE_MASK 0x01ff
+#define HUFFMAN_BITS_SHIFT 9
+#define HUFFMAN_BITS_MASK 0x7
+#define HUFFMAN_SECONDARY_SHIFT 12
+
+/* For working memory while inflating we need two code tables, we need
+ an array of code lengths (max value 15, so we use unsigned char),
+ and an array of unsigned shorts used while building a table. The
+ latter two arrays must be large enough to hold the maximum number
+ of code lengths, which RFC 1951 defines as 286 + 30. */
+
+#define ZDEBUG_TABLE_SIZE \
+ (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t) \
+ + (286 + 30) * sizeof (uint16_t) \
+ + (286 + 30) * sizeof (unsigned char))
+
+#define ZDEBUG_TABLE_CODELEN_OFFSET \
+ (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t) \
+ + (286 + 30) * sizeof (uint16_t))
+
+#define ZDEBUG_TABLE_WORK_OFFSET \
+ (2 * HUFFMAN_TABLE_SIZE * sizeof (uint16_t))
+
+#ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE
+
+/* Used by the main function that generates the fixed table to learn
+ the table size. */
+static size_t final_next_secondary;
+
+#endif
+
+/* Build a Huffman code table from an array of lengths in CODES of
+ length CODES_LEN. The table is stored into *TABLE. ZDEBUG_TABLE
+ is the same as for elf_zlib_inflate, used to find some work space.
+ Returns 1 on success, 0 on error. */
+
+static int
+elf_zlib_inflate_table (unsigned char *codes, size_t codes_len,
+ uint16_t *zdebug_table, uint16_t *table)
+{
+ uint16_t count[16];
+ uint16_t start[16];
+ uint16_t prev[16];
+ uint16_t firstcode[7];
+ uint16_t *next;
+ size_t i;
+ size_t j;
+ unsigned int code;
+ size_t next_secondary;
+
+ /* Count the number of code of each length. Set NEXT[val] to be the
+ next value after VAL with the same bit length. */
+
+ next = (uint16_t *) (((unsigned char *) zdebug_table)
+ + ZDEBUG_TABLE_WORK_OFFSET);
+
+ memset (&count[0], 0, 16 * sizeof (uint16_t));
+ for (i = 0; i < codes_len; ++i)
+ {
+ if (unlikely (codes[i] >= 16))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ if (count[codes[i]] == 0)
+ {
+ start[codes[i]] = i;
+ prev[codes[i]] = i;
+ }
+ else
+ {
+ next[prev[codes[i]]] = i;
+ prev[codes[i]] = i;
+ }
+
+ ++count[codes[i]];
+ }
+
+ /* For each length, fill in the table for the codes of that
+ length. */
+
+ memset (table, 0, HUFFMAN_TABLE_SIZE * sizeof (uint16_t));
+
+ /* Handle the values that do not require a secondary table. */
+
+ code = 0;
+ for (j = 1; j <= 8; ++j)
+ {
+ unsigned int jcnt;
+ unsigned int val;
+
+ jcnt = count[j];
+ if (jcnt == 0)
+ continue;
+
+ if (unlikely (jcnt > (1U << j)))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ /* There are JCNT values that have this length, the values
+ starting from START[j] continuing through NEXT[VAL]. Those
+ values are assigned consecutive values starting at CODE. */
+
+ val = start[j];
+ for (i = 0; i < jcnt; ++i)
+ {
+ uint16_t tval;
+ size_t ind;
+ unsigned int incr;
+
+ /* In the compressed bit stream, the value VAL is encoded as
+ J bits with the value C. */
+
+ if (unlikely ((val & ~HUFFMAN_VALUE_MASK) != 0))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ tval = val | ((j - 1) << HUFFMAN_BITS_SHIFT);
+
+ /* The table lookup uses 8 bits. If J is less than 8, we
+ don't know what the other bits will be. We need to fill
+ in all possibilities in the table. Since the Huffman
+ code is unambiguous, those entries can't be used for any
+ other code. */
+
+ for (ind = code; ind < 0x100; ind += 1 << j)
+ {
+ if (unlikely (table[ind] != 0))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+ table[ind] = tval;
+ }
+
+ /* Advance to the next value with this length. */
+ if (i + 1 < jcnt)
+ val = next[val];
+
+ /* The Huffman codes are stored in the bitstream with the
+ most significant bit first, as is required to make them
+ unambiguous. The effect is that when we read them from
+ the bitstream we see the bit sequence in reverse order:
+ the most significant bit of the Huffman code is the least
+ significant bit of the value we read from the bitstream.
+ That means that to make our table lookups work, we need
+ to reverse the bits of CODE. Since reversing bits is
+ tedious and in general requires using a table, we instead
+ increment CODE in reverse order. That is, if the number
+ of bits we are currently using, here named J, is 3, we
+ count as 000, 100, 010, 110, 001, 101, 011, 111, which is
+ to say the numbers from 0 to 7 but with the bits
+ reversed. Going to more bits, aka incrementing J,
+ effectively just adds more zero bits as the beginning,
+ and as such does not change the numeric value of CODE.
+
+ To increment CODE of length J in reverse order, find the
+ most significant zero bit and set it to one while
+ clearing all higher bits. In other words, add 1 modulo
+ 2^J, only reversed. */
+
+ incr = 1U << (j - 1);
+ while ((code & incr) != 0)
+ incr >>= 1;
+ if (incr == 0)
+ code = 0;
+ else
+ {
+ code &= incr - 1;
+ code += incr;
+ }
+ }
+ }
+
+ /* Handle the values that require a secondary table. */
+
+ /* Set FIRSTCODE, the number at which the codes start, for each
+ length. */
+
+ for (j = 9; j < 16; j++)
+ {
+ unsigned int jcnt;
+ unsigned int k;
+
+ jcnt = count[j];
+ if (jcnt == 0)
+ continue;
+
+ /* There are JCNT values that have this length, the values
+ starting from START[j]. Those values are assigned
+ consecutive values starting at CODE. */
+
+ firstcode[j - 9] = code;
+
+ /* Reverse add JCNT to CODE modulo 2^J. */
+ for (k = 0; k < j; ++k)
+ {
+ if ((jcnt & (1U << k)) != 0)
+ {
+ unsigned int m;
+ unsigned int bit;
+
+ bit = 1U << (j - k - 1);
+ for (m = 0; m < j - k; ++m, bit >>= 1)
+ {
+ if ((code & bit) == 0)
+ {
+ code += bit;
+ break;
+ }
+ code &= ~bit;
+ }
+ jcnt &= ~(1U << k);
+ }
+ }
+ if (unlikely (jcnt != 0))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+ }
+
+ /* For J from 9 to 15, inclusive, we store COUNT[J] consecutive
+ values starting at START[J] with consecutive codes starting at
+ FIRSTCODE[J - 9]. In the primary table we need to point to the
+ secondary table, and the secondary table will be indexed by J - 9
+ bits. We count down from 15 so that we install the larger
+ secondary tables first, as the smaller ones may be embedded in
+ the larger ones. */
+
+ next_secondary = 0; /* Index of next secondary table (after primary). */
+ for (j = 15; j >= 9; j--)
+ {
+ unsigned int jcnt;
+ unsigned int val;
+ size_t primary; /* Current primary index. */
+ size_t secondary; /* Offset to current secondary table. */
+ size_t secondary_bits; /* Bit size of current secondary table. */
+
+ jcnt = count[j];
+ if (jcnt == 0)
+ continue;
+
+ val = start[j];
+ code = firstcode[j - 9];
+ primary = 0x100;
+ secondary = 0;
+ secondary_bits = 0;
+ for (i = 0; i < jcnt; ++i)
+ {
+ uint16_t tval;
+ size_t ind;
+ unsigned int incr;
+
+ if ((code & 0xff) != primary)
+ {
+ uint16_t tprimary;
+
+ /* Fill in a new primary table entry. */
+
+ primary = code & 0xff;
+
+ tprimary = table[primary];
+ if (tprimary == 0)
+ {
+ /* Start a new secondary table. */
+
+ if (unlikely ((next_secondary & HUFFMAN_VALUE_MASK)
+ != next_secondary))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ secondary = next_secondary;
+ secondary_bits = j - 8;
+ next_secondary += 1 << secondary_bits;
+ table[primary] = (secondary
+ + ((j - 8) << HUFFMAN_BITS_SHIFT)
+ + (1U << HUFFMAN_SECONDARY_SHIFT));
+ }
+ else
+ {
+ /* There is an existing entry. It had better be a
+ secondary table with enough bits. */
+ if (unlikely ((tprimary & (1U << HUFFMAN_SECONDARY_SHIFT))
+ == 0))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+ secondary = tprimary & HUFFMAN_VALUE_MASK;
+ secondary_bits = ((tprimary >> HUFFMAN_BITS_SHIFT)
+ & HUFFMAN_BITS_MASK);
+ if (unlikely (secondary_bits < j - 8))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+ }
+ }
+
+ /* Fill in secondary table entries. */
+
+ tval = val | ((j - 8) << HUFFMAN_BITS_SHIFT);
+
+ for (ind = code >> 8;
+ ind < (1U << secondary_bits);
+ ind += 1U << (j - 8))
+ {
+ if (unlikely (table[secondary + 0x100 + ind] != 0))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+ table[secondary + 0x100 + ind] = tval;
+ }
+
+ if (i + 1 < jcnt)
+ val = next[val];
+
+ incr = 1U << (j - 1);
+ while ((code & incr) != 0)
+ incr >>= 1;
+ if (incr == 0)
+ code = 0;
+ else
+ {
+ code &= incr - 1;
+ code += incr;
+ }
+ }
+ }
+
+#ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE
+ final_next_secondary = next_secondary;
+#endif
+
+ return 1;
+}
+
+#ifdef BACKTRACE_GENERATE_FIXED_HUFFMAN_TABLE
+
+/* Used to generate the fixed Huffman table for block type 1. */
+
+#include <stdio.h>
+
+static uint16_t table[ZDEBUG_TABLE_SIZE];
+static unsigned char codes[288];
+
+int
+main ()
+{
+ size_t i;
+
+ for (i = 0; i <= 143; ++i)
+ codes[i] = 8;
+ for (i = 144; i <= 255; ++i)
+ codes[i] = 9;
+ for (i = 256; i <= 279; ++i)
+ codes[i] = 7;
+ for (i = 280; i <= 287; ++i)
+ codes[i] = 8;
+ if (!elf_zlib_inflate_table (&codes[0], 288, &table[0], &table[0]))
+ {
+ fprintf (stderr, "elf_zlib_inflate_table failed\n");
+ exit (EXIT_FAILURE);
+ }
+
+ printf ("static const uint16_t elf_zlib_default_table[%#zx] =\n",
+ final_next_secondary + 0x100);
+ printf ("{\n");
+ for (i = 0; i < final_next_secondary + 0x100; i += 8)
+ {
+ size_t j;
+
+ printf (" ");
+ for (j = i; j < final_next_secondary + 0x100 && j < i + 8; ++j)
+ printf (" %#x,", table[j]);
+ printf ("\n");
+ }
+ printf ("};\n");
+ printf ("\n");
+
+ for (i = 0; i < 32; ++i)
+ codes[i] = 5;
+ if (!elf_zlib_inflate_table (&codes[0], 32, &table[0], &table[0]))
+ {
+ fprintf (stderr, "elf_zlib_inflate_table failed\n");
+ exit (EXIT_FAILURE);
+ }
+
+ printf ("static const uint16_t elf_zlib_default_dist_table[%#zx] =\n",
+ final_next_secondary + 0x100);
+ printf ("{\n");
+ for (i = 0; i < final_next_secondary + 0x100; i += 8)
+ {
+ size_t j;
+
+ printf (" ");
+ for (j = i; j < final_next_secondary + 0x100 && j < i + 8; ++j)
+ printf (" %#x,", table[j]);
+ printf ("\n");
+ }
+ printf ("};\n");
+
+ return 0;
+}
+
+#endif
+
+/* The fixed tables generated by the #ifdef'ed out main function
+ above. */
+
+static const uint16_t elf_zlib_default_table[0x170] =
+{
+ 0xd00, 0xe50, 0xe10, 0xf18, 0xd10, 0xe70, 0xe30, 0x1230,
+ 0xd08, 0xe60, 0xe20, 0x1210, 0xe00, 0xe80, 0xe40, 0x1250,
+ 0xd04, 0xe58, 0xe18, 0x1200, 0xd14, 0xe78, 0xe38, 0x1240,
+ 0xd0c, 0xe68, 0xe28, 0x1220, 0xe08, 0xe88, 0xe48, 0x1260,
+ 0xd02, 0xe54, 0xe14, 0xf1c, 0xd12, 0xe74, 0xe34, 0x1238,
+ 0xd0a, 0xe64, 0xe24, 0x1218, 0xe04, 0xe84, 0xe44, 0x1258,
+ 0xd06, 0xe5c, 0xe1c, 0x1208, 0xd16, 0xe7c, 0xe3c, 0x1248,
+ 0xd0e, 0xe6c, 0xe2c, 0x1228, 0xe0c, 0xe8c, 0xe4c, 0x1268,
+ 0xd01, 0xe52, 0xe12, 0xf1a, 0xd11, 0xe72, 0xe32, 0x1234,
+ 0xd09, 0xe62, 0xe22, 0x1214, 0xe02, 0xe82, 0xe42, 0x1254,
+ 0xd05, 0xe5a, 0xe1a, 0x1204, 0xd15, 0xe7a, 0xe3a, 0x1244,
+ 0xd0d, 0xe6a, 0xe2a, 0x1224, 0xe0a, 0xe8a, 0xe4a, 0x1264,
+ 0xd03, 0xe56, 0xe16, 0xf1e, 0xd13, 0xe76, 0xe36, 0x123c,
+ 0xd0b, 0xe66, 0xe26, 0x121c, 0xe06, 0xe86, 0xe46, 0x125c,
+ 0xd07, 0xe5e, 0xe1e, 0x120c, 0xd17, 0xe7e, 0xe3e, 0x124c,
+ 0xd0f, 0xe6e, 0xe2e, 0x122c, 0xe0e, 0xe8e, 0xe4e, 0x126c,
+ 0xd00, 0xe51, 0xe11, 0xf19, 0xd10, 0xe71, 0xe31, 0x1232,
+ 0xd08, 0xe61, 0xe21, 0x1212, 0xe01, 0xe81, 0xe41, 0x1252,
+ 0xd04, 0xe59, 0xe19, 0x1202, 0xd14, 0xe79, 0xe39, 0x1242,
+ 0xd0c, 0xe69, 0xe29, 0x1222, 0xe09, 0xe89, 0xe49, 0x1262,
+ 0xd02, 0xe55, 0xe15, 0xf1d, 0xd12, 0xe75, 0xe35, 0x123a,
+ 0xd0a, 0xe65, 0xe25, 0x121a, 0xe05, 0xe85, 0xe45, 0x125a,
+ 0xd06, 0xe5d, 0xe1d, 0x120a, 0xd16, 0xe7d, 0xe3d, 0x124a,
+ 0xd0e, 0xe6d, 0xe2d, 0x122a, 0xe0d, 0xe8d, 0xe4d, 0x126a,
+ 0xd01, 0xe53, 0xe13, 0xf1b, 0xd11, 0xe73, 0xe33, 0x1236,
+ 0xd09, 0xe63, 0xe23, 0x1216, 0xe03, 0xe83, 0xe43, 0x1256,
+ 0xd05, 0xe5b, 0xe1b, 0x1206, 0xd15, 0xe7b, 0xe3b, 0x1246,
+ 0xd0d, 0xe6b, 0xe2b, 0x1226, 0xe0b, 0xe8b, 0xe4b, 0x1266,
+ 0xd03, 0xe57, 0xe17, 0xf1f, 0xd13, 0xe77, 0xe37, 0x123e,
+ 0xd0b, 0xe67, 0xe27, 0x121e, 0xe07, 0xe87, 0xe47, 0x125e,
+ 0xd07, 0xe5f, 0xe1f, 0x120e, 0xd17, 0xe7f, 0xe3f, 0x124e,
+ 0xd0f, 0xe6f, 0xe2f, 0x122e, 0xe0f, 0xe8f, 0xe4f, 0x126e,
+ 0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297,
+ 0x298, 0x299, 0x29a, 0x29b, 0x29c, 0x29d, 0x29e, 0x29f,
+ 0x2a0, 0x2a1, 0x2a2, 0x2a3, 0x2a4, 0x2a5, 0x2a6, 0x2a7,
+ 0x2a8, 0x2a9, 0x2aa, 0x2ab, 0x2ac, 0x2ad, 0x2ae, 0x2af,
+ 0x2b0, 0x2b1, 0x2b2, 0x2b3, 0x2b4, 0x2b5, 0x2b6, 0x2b7,
+ 0x2b8, 0x2b9, 0x2ba, 0x2bb, 0x2bc, 0x2bd, 0x2be, 0x2bf,
+ 0x2c0, 0x2c1, 0x2c2, 0x2c3, 0x2c4, 0x2c5, 0x2c6, 0x2c7,
+ 0x2c8, 0x2c9, 0x2ca, 0x2cb, 0x2cc, 0x2cd, 0x2ce, 0x2cf,
+ 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5, 0x2d6, 0x2d7,
+ 0x2d8, 0x2d9, 0x2da, 0x2db, 0x2dc, 0x2dd, 0x2de, 0x2df,
+ 0x2e0, 0x2e1, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7,
+ 0x2e8, 0x2e9, 0x2ea, 0x2eb, 0x2ec, 0x2ed, 0x2ee, 0x2ef,
+ 0x2f0, 0x2f1, 0x2f2, 0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7,
+ 0x2f8, 0x2f9, 0x2fa, 0x2fb, 0x2fc, 0x2fd, 0x2fe, 0x2ff,
+};
+
+static const uint16_t elf_zlib_default_dist_table[0x100] =
+{
+ 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
+ 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
+ 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
+ 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
+ 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
+ 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
+ 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
+ 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
+ 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
+ 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
+ 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
+ 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
+ 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
+ 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
+ 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
+ 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
+ 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
+ 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
+ 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
+ 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
+ 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
+ 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
+ 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
+ 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
+ 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
+ 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
+ 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
+ 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
+ 0x800, 0x810, 0x808, 0x818, 0x804, 0x814, 0x80c, 0x81c,
+ 0x802, 0x812, 0x80a, 0x81a, 0x806, 0x816, 0x80e, 0x81e,
+ 0x801, 0x811, 0x809, 0x819, 0x805, 0x815, 0x80d, 0x81d,
+ 0x803, 0x813, 0x80b, 0x81b, 0x807, 0x817, 0x80f, 0x81f,
+};
+
+/* Inflate a zlib stream from PIN/SIN to POUT/SOUT. Return 1 on
+ success, 0 on some error parsing the stream. */
+
+static int
+elf_zlib_inflate (const unsigned char *pin, size_t sin, uint16_t *zdebug_table,
+ unsigned char *pout, size_t sout)
+{
+ unsigned char *porigout;
+ const unsigned char *pinend;
+ unsigned char *poutend;
+
+ /* We can apparently see multiple zlib streams concatenated
+ together, so keep going as long as there is something to read.
+ The last 4 bytes are the checksum. */
+ porigout = pout;
+ pinend = pin + sin;
+ poutend = pout + sout;
+ while ((pinend - pin) > 4)
+ {
+ uint64_t val;
+ unsigned int bits;
+ int last;
+
+ /* Read the two byte zlib header. */
+
+ if (unlikely ((pin[0] & 0xf) != 8)) /* 8 is zlib encoding. */
+ {
+ /* Unknown compression method. */
+ elf_zlib_failed ();
+ return 0;
+ }
+ if (unlikely ((pin[0] >> 4) > 7))
+ {
+ /* Window size too large. Other than this check, we don't
+ care about the window size. */
+ elf_zlib_failed ();
+ return 0;
+ }
+ if (unlikely ((pin[1] & 0x20) != 0))
+ {
+ /* Stream expects a predefined dictionary, but we have no
+ dictionary. */
+ elf_zlib_failed ();
+ return 0;
+ }
+ val = (pin[0] << 8) | pin[1];
+ if (unlikely (val % 31 != 0))
+ {
+ /* Header check failure. */
+ elf_zlib_failed ();
+ return 0;
+ }
+ pin += 2;
+
+ /* Align PIN to a 32-bit boundary. */
+
+ val = 0;
+ bits = 0;
+ while ((((uintptr_t) pin) & 3) != 0)
+ {
+ val |= (uint64_t)*pin << bits;
+ bits += 8;
+ ++pin;
+ }
+
+ /* Read blocks until one is marked last. */
+
+ last = 0;
+
+ while (!last)
+ {
+ unsigned int type;
+ const uint16_t *tlit;
+ const uint16_t *tdist;
+
+ if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
+ return 0;
+
+ last = val & 1;
+ type = (val >> 1) & 3;
+ val >>= 3;
+ bits -= 3;
+
+ if (unlikely (type == 3))
+ {
+ /* Invalid block type. */
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ if (type == 0)
+ {
+ uint16_t len;
+ uint16_t lenc;
+
+ /* An uncompressed block. */
+
+ /* If we've read ahead more than a byte, back up. */
+ while (bits > 8)
+ {
+ --pin;
+ bits -= 8;
+ }
+
+ val = 0;
+ bits = 0;
+ if (unlikely ((pinend - pin) < 4))
+ {
+ /* Missing length. */
+ elf_zlib_failed ();
+ return 0;
+ }
+ len = pin[0] | (pin[1] << 8);
+ lenc = pin[2] | (pin[3] << 8);
+ pin += 4;
+ lenc = ~lenc;
+ if (unlikely (len != lenc))
+ {
+ /* Corrupt data. */
+ elf_zlib_failed ();
+ return 0;
+ }
+ if (unlikely (len > (unsigned int) (pinend - pin)
+ || len > (unsigned int) (poutend - pout)))
+ {
+ /* Not enough space in buffers. */
+ elf_zlib_failed ();
+ return 0;
+ }
+ memcpy (pout, pin, len);
+ pout += len;
+ pin += len;
+
+ /* Align PIN. */
+ while ((((uintptr_t) pin) & 3) != 0)
+ {
+ val |= (uint64_t)*pin << bits;
+ bits += 8;
+ ++pin;
+ }
+
+ /* Go around to read the next block. */
+ continue;
+ }
+
+ if (type == 1)
+ {
+ tlit = elf_zlib_default_table;
+ tdist = elf_zlib_default_dist_table;
+ }
+ else
+ {
+ unsigned int nlit;
+ unsigned int ndist;
+ unsigned int nclen;
+ unsigned char codebits[19];
+ unsigned char *plenbase;
+ unsigned char *plen;
+ unsigned char *plenend;
+
+ /* Read a Huffman encoding table. The various magic
+ numbers here are from RFC 1951. */
+
+ if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
+ return 0;
+
+ nlit = (val & 0x1f) + 257;
+ val >>= 5;
+ ndist = (val & 0x1f) + 1;
+ val >>= 5;
+ nclen = (val & 0xf) + 4;
+ val >>= 4;
+ bits -= 14;
+ if (unlikely (nlit > 286 || ndist > 30))
+ {
+ /* Values out of range. */
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ /* Read and build the table used to compress the
+ literal, length, and distance codes. */
+
+ memset(&codebits[0], 0, 19);
+
+ /* There are always at least 4 elements in the
+ table. */
+
+ if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
+ return 0;
+
+ codebits[16] = val & 7;
+ codebits[17] = (val >> 3) & 7;
+ codebits[18] = (val >> 6) & 7;
+ codebits[0] = (val >> 9) & 7;
+ val >>= 12;
+ bits -= 12;
+
+ if (nclen == 4)
+ goto codebitsdone;
+
+ codebits[8] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ if (nclen == 5)
+ goto codebitsdone;
+
+ if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
+ return 0;
+
+ codebits[7] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ if (nclen == 6)
+ goto codebitsdone;
+
+ codebits[9] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ if (nclen == 7)
+ goto codebitsdone;
+
+ codebits[6] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ if (nclen == 8)
+ goto codebitsdone;
+
+ codebits[10] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ if (nclen == 9)
+ goto codebitsdone;
+
+ codebits[5] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ if (nclen == 10)
+ goto codebitsdone;
+
+ if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
+ return 0;
+
+ codebits[11] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ if (nclen == 11)
+ goto codebitsdone;
+
+ codebits[4] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ if (nclen == 12)
+ goto codebitsdone;
+
+ codebits[12] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ if (nclen == 13)
+ goto codebitsdone;
+
+ codebits[3] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ if (nclen == 14)
+ goto codebitsdone;
+
+ codebits[13] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ if (nclen == 15)
+ goto codebitsdone;
+
+ if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
+ return 0;
+
+ codebits[2] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ if (nclen == 16)
+ goto codebitsdone;
+
+ codebits[14] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ if (nclen == 17)
+ goto codebitsdone;
+
+ codebits[1] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ if (nclen == 18)
+ goto codebitsdone;
+
+ codebits[15] = val & 7;
+ val >>= 3;
+ bits -= 3;
+
+ codebitsdone:
+
+ if (!elf_zlib_inflate_table (codebits, 19, zdebug_table,
+ zdebug_table))
+ return 0;
+
+ /* Read the compressed bit lengths of the literal,
+ length, and distance codes. We have allocated space
+ at the end of zdebug_table to hold them. */
+
+ plenbase = (((unsigned char *) zdebug_table)
+ + ZDEBUG_TABLE_CODELEN_OFFSET);
+ plen = plenbase;
+ plenend = plen + nlit + ndist;
+ while (plen < plenend)
+ {
+ uint16_t t;
+ unsigned int b;
+ uint16_t v;
+
+ if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
+ return 0;
+
+ t = zdebug_table[val & 0xff];
+
+ /* The compression here uses bit lengths up to 7, so
+ a secondary table is never necessary. */
+ if (unlikely ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) != 0))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
+ val >>= b + 1;
+ bits -= b + 1;
+
+ v = t & HUFFMAN_VALUE_MASK;
+ if (v < 16)
+ *plen++ = v;
+ else if (v == 16)
+ {
+ unsigned int c;
+ unsigned int prev;
+
+ /* Copy previous entry 3 to 6 times. */
+
+ if (unlikely (plen == plenbase))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ /* We used up to 7 bits since the last
+ elf_zlib_fetch, so we have at least 8 bits
+ available here. */
+
+ c = 3 + (val & 0x3);
+ val >>= 2;
+ bits -= 2;
+ if (unlikely ((unsigned int) (plenend - plen) < c))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ prev = plen[-1];
+ switch (c)
+ {
+ case 6:
+ *plen++ = prev;
+ /* fallthrough */
+ case 5:
+ *plen++ = prev;
+ /* fallthrough */
+ case 4:
+ *plen++ = prev;
+ }
+ *plen++ = prev;
+ *plen++ = prev;
+ *plen++ = prev;
+ }
+ else if (v == 17)
+ {
+ unsigned int c;
+
+ /* Store zero 3 to 10 times. */
+
+ /* We used up to 7 bits since the last
+ elf_zlib_fetch, so we have at least 8 bits
+ available here. */
+
+ c = 3 + (val & 0x7);
+ val >>= 3;
+ bits -= 3;
+ if (unlikely ((unsigned int) (plenend - plen) < c))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ switch (c)
+ {
+ case 10:
+ *plen++ = 0;
+ /* fallthrough */
+ case 9:
+ *plen++ = 0;
+ /* fallthrough */
+ case 8:
+ *plen++ = 0;
+ /* fallthrough */
+ case 7:
+ *plen++ = 0;
+ /* fallthrough */
+ case 6:
+ *plen++ = 0;
+ /* fallthrough */
+ case 5:
+ *plen++ = 0;
+ /* fallthrough */
+ case 4:
+ *plen++ = 0;
+ }
+ *plen++ = 0;
+ *plen++ = 0;
+ *plen++ = 0;
+ }
+ else if (v == 18)
+ {
+ unsigned int c;
+
+ /* Store zero 11 to 138 times. */
+
+ /* We used up to 7 bits since the last
+ elf_zlib_fetch, so we have at least 8 bits
+ available here. */
+
+ c = 11 + (val & 0x7f);
+ val >>= 7;
+ bits -= 7;
+ if (unlikely ((unsigned int) (plenend - plen) < c))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ memset (plen, 0, c);
+ plen += c;
+ }
+ else
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+ }
+
+ /* Make sure that the stop code can appear. */
+
+ plen = plenbase;
+ if (unlikely (plen[256] == 0))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ /* Build the decompression tables. */
+
+ if (!elf_zlib_inflate_table (plen, nlit, zdebug_table,
+ zdebug_table))
+ return 0;
+ if (!elf_zlib_inflate_table (plen + nlit, ndist, zdebug_table,
+ zdebug_table + HUFFMAN_TABLE_SIZE))
+ return 0;
+ tlit = zdebug_table;
+ tdist = zdebug_table + HUFFMAN_TABLE_SIZE;
+ }
+
+ /* Inflate values until the end of the block. This is the
+ main loop of the inflation code. */
+
+ while (1)
+ {
+ uint16_t t;
+ unsigned int b;
+ uint16_t v;
+ unsigned int lit;
+
+ if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
+ return 0;
+
+ t = tlit[val & 0xff];
+ b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
+ v = t & HUFFMAN_VALUE_MASK;
+
+ if ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) == 0)
+ {
+ lit = v;
+ val >>= b + 1;
+ bits -= b + 1;
+ }
+ else
+ {
+ t = tlit[v + 0x100 + ((val >> 8) & ((1U << b) - 1))];
+ b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
+ lit = t & HUFFMAN_VALUE_MASK;
+ val >>= b + 8;
+ bits -= b + 8;
+ }
+
+ if (lit < 256)
+ {
+ if (unlikely (pout == poutend))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ *pout++ = lit;
+
+ /* We will need to write the next byte soon. We ask
+ for high temporal locality because we will write
+ to the whole cache line soon. */
+ __builtin_prefetch (pout, 1, 3);
+ }
+ else if (lit == 256)
+ {
+ /* The end of the block. */
+ break;
+ }
+ else
+ {
+ unsigned int dist;
+ unsigned int len;
+
+ /* Convert lit into a length. */
+
+ if (lit < 265)
+ len = lit - 257 + 3;
+ else if (lit == 285)
+ len = 258;
+ else if (unlikely (lit > 285))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+ else
+ {
+ unsigned int extra;
+
+ if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
+ return 0;
+
+ /* This is an expression for the table of length
+ codes in RFC 1951 3.2.5. */
+ lit -= 265;
+ extra = (lit >> 2) + 1;
+ len = (lit & 3) << extra;
+ len += 11;
+ len += ((1U << (extra - 1)) - 1) << 3;
+ len += val & ((1U << extra) - 1);
+ val >>= extra;
+ bits -= extra;
+ }
+
+ if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
+ return 0;
+
+ t = tdist[val & 0xff];
+ b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
+ v = t & HUFFMAN_VALUE_MASK;
+
+ if ((t & (1U << HUFFMAN_SECONDARY_SHIFT)) == 0)
+ {
+ dist = v;
+ val >>= b + 1;
+ bits -= b + 1;
+ }
+ else
+ {
+ t = tdist[v + 0x100 + ((val >> 8) & ((1U << b) - 1))];
+ b = (t >> HUFFMAN_BITS_SHIFT) & HUFFMAN_BITS_MASK;
+ dist = t & HUFFMAN_VALUE_MASK;
+ val >>= b + 8;
+ bits -= b + 8;
+ }
+
+ /* Convert dist to a distance. */
+
+ if (dist == 0)
+ {
+ /* A distance of 1. A common case, meaning
+ repeat the last character LEN times. */
+
+ if (unlikely (pout == porigout))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ if (unlikely ((unsigned int) (poutend - pout) < len))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ memset (pout, pout[-1], len);
+ pout += len;
+ }
+ else if (unlikely (dist > 29))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+ else
+ {
+ if (dist < 4)
+ dist = dist + 1;
+ else
+ {
+ unsigned int extra;
+
+ if (!elf_zlib_fetch (&pin, pinend, &val, &bits))
+ return 0;
+
+ /* This is an expression for the table of
+ distance codes in RFC 1951 3.2.5. */
+ dist -= 4;
+ extra = (dist >> 1) + 1;
+ dist = (dist & 1) << extra;
+ dist += 5;
+ dist += ((1U << (extra - 1)) - 1) << 2;
+ dist += val & ((1U << extra) - 1);
+ val >>= extra;
+ bits -= extra;
+ }
+
+ /* Go back dist bytes, and copy len bytes from
+ there. */
+
+ if (unlikely ((unsigned int) (pout - porigout) < dist))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ if (unlikely ((unsigned int) (poutend - pout) < len))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ if (dist >= len)
+ {
+ memcpy (pout, pout - dist, len);
+ pout += len;
+ }
+ else
+ {
+ while (len > 0)
+ {
+ unsigned int copy;
+
+ copy = len < dist ? len : dist;
+ memcpy (pout, pout - dist, copy);
+ len -= copy;
+ pout += copy;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* We should have filled the output buffer. */
+ if (unlikely (pout != poutend))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ return 1;
+}
+
+/* Verify the zlib checksum. The checksum is in the 4 bytes at
+ CHECKBYTES, and the uncompressed data is at UNCOMPRESSED /
+ UNCOMPRESSED_SIZE. Returns 1 on success, 0 on failure. */
+
+static int
+elf_zlib_verify_checksum (const unsigned char *checkbytes,
+ const unsigned char *uncompressed,
+ size_t uncompressed_size)
+{
+ unsigned int i;
+ unsigned int cksum;
+ const unsigned char *p;
+ uint32_t s1;
+ uint32_t s2;
+ size_t hsz;
+
+ cksum = 0;
+ for (i = 0; i < 4; i++)
+ cksum = (cksum << 8) | checkbytes[i];
+
+ s1 = 1;
+ s2 = 0;
+
+ /* Minimize modulo operations. */
+
+ p = uncompressed;
+ hsz = uncompressed_size;
+ while (hsz >= 5552)
+ {
+ for (i = 0; i < 5552; i += 16)
+ {
+ /* Manually unroll loop 16 times. */
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ }
+ hsz -= 5552;
+ s1 %= 65521;
+ s2 %= 65521;
+ }
+
+ while (hsz >= 16)
+ {
+ /* Manually unroll loop 16 times. */
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+
+ hsz -= 16;
+ }
+
+ for (i = 0; i < hsz; ++i)
+ {
+ s1 = s1 + *p++;
+ s2 = s2 + s1;
+ }
+
+ s1 %= 65521;
+ s2 %= 65521;
+
+ if (unlikely ((s2 << 16) + s1 != cksum))
+ {
+ elf_zlib_failed ();
+ return 0;
+ }
+
+ return 1;
+}
+
+/* Inflate a zlib stream from PIN/SIN to POUT/SOUT, and verify the
+ checksum. Return 1 on success, 0 on error. */
+
+static int
+elf_zlib_inflate_and_verify (const unsigned char *pin, size_t sin,
+ uint16_t *zdebug_table, unsigned char *pout,
+ size_t sout)
+{
+ if (!elf_zlib_inflate (pin, sin, zdebug_table, pout, sout))
+ return 0;
+ if (!elf_zlib_verify_checksum (pin + sin - 4, pout, sout))
+ return 0;
+ return 1;
+}
+
+/* Uncompress the old compressed debug format, the one emitted by
+ --compress-debug-sections=zlib-gnu. The compressed data is in
+ COMPRESSED / COMPRESSED_SIZE, and the function writes to
+ *UNCOMPRESSED / *UNCOMPRESSED_SIZE. ZDEBUG_TABLE is work space to
+ hold Huffman tables. Returns 0 on error, 1 on successful
+ decompression or if something goes wrong. In general we try to
+ carry on, by returning 1, even if we can't decompress. */
+
+static int
+elf_uncompress_zdebug (struct backtrace_state *state,
+ const unsigned char *compressed, size_t compressed_size,
+ uint16_t *zdebug_table,
+ backtrace_error_callback error_callback, void *data,
+ unsigned char **uncompressed, size_t *uncompressed_size)
+{
+ size_t sz;
+ size_t i;
+ unsigned char *po;
+
+ *uncompressed = NULL;
+ *uncompressed_size = 0;
+
+ /* The format starts with the four bytes ZLIB, followed by the 8
+ byte length of the uncompressed data in big-endian order,
+ followed by a zlib stream. */
+
+ if (compressed_size < 12 || memcmp (compressed, "ZLIB", 4) != 0)
+ return 1;
+
+ sz = 0;
+ for (i = 0; i < 8; i++)
+ sz = (sz << 8) | compressed[i + 4];
+
+ if (*uncompressed != NULL && *uncompressed_size >= sz)
+ po = *uncompressed;
+ else
+ {
+ po = (unsigned char *) backtrace_alloc (state, sz, error_callback, data);
+ if (po == NULL)
+ return 0;
+ }
+
+ if (!elf_zlib_inflate_and_verify (compressed + 12, compressed_size - 12,
+ zdebug_table, po, sz))
+ return 1;
+
+ *uncompressed = po;
+ *uncompressed_size = sz;
+
+ return 1;
+}
+
+/* Uncompress the new compressed debug format, the official standard
+ ELF approach emitted by --compress-debug-sections=zlib-gabi. The
+ compressed data is in COMPRESSED / COMPRESSED_SIZE, and the
+ function writes to *UNCOMPRESSED / *UNCOMPRESSED_SIZE.
+ ZDEBUG_TABLE is work space as for elf_uncompress_zdebug. Returns 0
+ on error, 1 on successful decompression or if something goes wrong.
+ In general we try to carry on, by returning 1, even if we can't
+ decompress. */
+
+static int
+elf_uncompress_chdr (struct backtrace_state *state,
+ const unsigned char *compressed, size_t compressed_size,
+ uint16_t *zdebug_table,
+ backtrace_error_callback error_callback, void *data,
+ unsigned char **uncompressed, size_t *uncompressed_size)
+{
+ const b_elf_chdr *chdr;
+ unsigned char *po;
+
+ *uncompressed = NULL;
+ *uncompressed_size = 0;
+
+ /* The format starts with an ELF compression header. */
+ if (compressed_size < sizeof (b_elf_chdr))
+ return 1;
+
+ chdr = (const b_elf_chdr *) compressed;
+
+ if (chdr->ch_type != ELFCOMPRESS_ZLIB)
+ {
+ /* Unsupported compression algorithm. */
+ return 1;
+ }
+
+ if (*uncompressed != NULL && *uncompressed_size >= chdr->ch_size)
+ po = *uncompressed;
+ else
+ {
+ po = (unsigned char *) backtrace_alloc (state, chdr->ch_size,
+ error_callback, data);
+ if (po == NULL)
+ return 0;
+ }
+
+ if (!elf_zlib_inflate_and_verify (compressed + sizeof (b_elf_chdr),
+ compressed_size - sizeof (b_elf_chdr),
+ zdebug_table, po, chdr->ch_size))
+ return 1;
+
+ *uncompressed = po;
+ *uncompressed_size = chdr->ch_size;
+
+ return 1;
+}
+
+/* This function is a hook for testing the zlib support. It is only
+ used by tests. */
+
+int
+backtrace_uncompress_zdebug (struct backtrace_state *state,
+ const unsigned char *compressed,
+ size_t compressed_size,
+ backtrace_error_callback error_callback,
+ void *data, unsigned char **uncompressed,
+ size_t *uncompressed_size)
+{
+ uint16_t *zdebug_table;
+ int ret;
+
+ zdebug_table = ((uint16_t *) backtrace_alloc (state, ZDEBUG_TABLE_SIZE,
+ error_callback, data));
+ if (zdebug_table == NULL)
+ return 0;
+ ret = elf_uncompress_zdebug (state, compressed, compressed_size,
+ zdebug_table, error_callback, data,
+ uncompressed, uncompressed_size);
+ backtrace_free (state, zdebug_table, ZDEBUG_TABLE_SIZE,
+ error_callback, data);
+ return ret;
+}
+
+/* Add the backtrace data for one ELF file. Returns 1 on success,
+ 0 on failure (in both cases descriptor is closed) or -1 if exe
+ is non-zero and the ELF file is ET_DYN, which tells the caller that
+ elf_add will need to be called on the descriptor again after
+ base_address is determined. */
+
+static int
+elf_add (struct backtrace_state *state, const char *filename, int descriptor,
+ uintptr_t base_address, backtrace_error_callback error_callback,
+ void *data, fileline *fileline_fn, int *found_sym, int *found_dwarf,
+ int exe, int debuginfo)
+{
+ struct backtrace_view ehdr_view;
+ b_elf_ehdr ehdr;
+ off_t shoff;
+ unsigned int shnum;
+ unsigned int shstrndx;
+ struct backtrace_view shdrs_view;
+ int shdrs_view_valid;
+ const b_elf_shdr *shdrs;
+ const b_elf_shdr *shstrhdr;
+ size_t shstr_size;
+ off_t shstr_off;
+ struct backtrace_view names_view;
+ int names_view_valid;
+ const char *names;
+ unsigned int symtab_shndx;
+ unsigned int dynsym_shndx;
+ unsigned int i;
+ struct debug_section_info sections[DEBUG_MAX];
+ struct backtrace_view symtab_view;
+ int symtab_view_valid;
+ struct backtrace_view strtab_view;
+ int strtab_view_valid;
+ struct backtrace_view buildid_view;
+ int buildid_view_valid;
+ const char *buildid_data;
+ uint32_t buildid_size;
+ struct backtrace_view debuglink_view;
+ int debuglink_view_valid;
+ const char *debuglink_name;
+ uint32_t debuglink_crc;
+ off_t min_offset;
+ off_t max_offset;
+ struct backtrace_view debug_view;
+ int debug_view_valid;
+ unsigned int using_debug_view;
+ uint16_t *zdebug_table;
+ struct elf_ppc64_opd_data opd_data, *opd;
+
+ if (!debuginfo)
+ {
+ *found_sym = 0;
+ *found_dwarf = 0;
+ }
+
+ shdrs_view_valid = 0;
+ names_view_valid = 0;
+ symtab_view_valid = 0;
+ strtab_view_valid = 0;
+ buildid_view_valid = 0;
+ buildid_data = NULL;
+ buildid_size = 0;
+ debuglink_view_valid = 0;
+ debuglink_name = NULL;
+ debuglink_crc = 0;
+ debug_view_valid = 0;
+ opd = NULL;
+
+ if (!backtrace_get_view (state, descriptor, 0, sizeof ehdr, error_callback,
+ data, &ehdr_view))
+ goto fail;
+
+ memcpy (&ehdr, ehdr_view.data, sizeof ehdr);
+
+ backtrace_release_view (state, &ehdr_view, error_callback, data);
+
+ if (ehdr.e_ident[EI_MAG0] != ELFMAG0
+ || ehdr.e_ident[EI_MAG1] != ELFMAG1
+ || ehdr.e_ident[EI_MAG2] != ELFMAG2
+ || ehdr.e_ident[EI_MAG3] != ELFMAG3)
+ {
+ error_callback (data, "executable file is not ELF", 0);
+ goto fail;
+ }
+ if (ehdr.e_ident[EI_VERSION] != EV_CURRENT)
+ {
+ error_callback (data, "executable file is unrecognized ELF version", 0);
+ goto fail;
+ }
+
+#if BACKTRACE_ELF_SIZE == 32
+#define BACKTRACE_ELFCLASS ELFCLASS32
+#else
+#define BACKTRACE_ELFCLASS ELFCLASS64
+#endif
+
+ if (ehdr.e_ident[EI_CLASS] != BACKTRACE_ELFCLASS)
+ {
+ error_callback (data, "executable file is unexpected ELF class", 0);
+ goto fail;
+ }
+
+ if (ehdr.e_ident[EI_DATA] != ELFDATA2LSB
+ && ehdr.e_ident[EI_DATA] != ELFDATA2MSB)
+ {
+ error_callback (data, "executable file has unknown endianness", 0);
+ goto fail;
+ }
+
+ /* If the executable is ET_DYN, it is either a PIE, or we are running
+ directly a shared library with .interp. We need to wait for
+ dl_iterate_phdr in that case to determine the actual base_address. */
+ if (exe && ehdr.e_type == ET_DYN)
+ return -1;
+
+ shoff = ehdr.e_shoff;
+ shnum = ehdr.e_shnum;
+ shstrndx = ehdr.e_shstrndx;
+
+ if ((shnum == 0 || shstrndx == SHN_XINDEX)
+ && shoff != 0)
+ {
+ struct backtrace_view shdr_view;
+ const b_elf_shdr *shdr;
+
+ if (!backtrace_get_view (state, descriptor, shoff, sizeof shdr,
+ error_callback, data, &shdr_view))
+ goto fail;
+
+ shdr = (const b_elf_shdr *) shdr_view.data;
+
+ if (shnum == 0)
+ shnum = (unsigned int)shdr->sh_size;
+
+ if (shstrndx == SHN_XINDEX)
+ {
+ shstrndx = shdr->sh_link;
+
+ /* Versions of the GNU binutils between 2.12 and 2.18 did
+ not handle objects with more than SHN_LORESERVE sections
+ correctly. All large section indexes were offset by
+ 0x100. There is more information at
+ http://sourceware.org/bugzilla/show_bug.cgi?id-5900 .
+ Fortunately these object files are easy to detect, as the
+ GNU binutils always put the section header string table
+ near the end of the list of sections. Thus if the
+ section header string table index is larger than the
+ number of sections, then we know we have to subtract
+ 0x100 to get the real section index. */
+ if (shstrndx >= shnum && shstrndx >= SHN_LORESERVE + 0x100)
+ shstrndx -= 0x100;
+ }
+
+ backtrace_release_view (state, &shdr_view, error_callback, data);
+ }
+
+ /* To translate PC to file/line when using DWARF, we need to find
+ the .debug_info and .debug_line sections. */
+
+ /* Read the section headers, skipping the first one. */
+
+ if (!backtrace_get_view (state, descriptor, shoff + sizeof (b_elf_shdr),
+ (shnum - 1) * sizeof (b_elf_shdr),
+ error_callback, data, &shdrs_view))
+ goto fail;
+ shdrs_view_valid = 1;
+ shdrs = (const b_elf_shdr *) shdrs_view.data;
+
+ /* Read the section names. */
+
+ shstrhdr = &shdrs[shstrndx - 1];
+ shstr_size = shstrhdr->sh_size;
+ shstr_off = shstrhdr->sh_offset;
+
+ if (!backtrace_get_view (state, descriptor, shstr_off, shstr_size,
+ error_callback, data, &names_view))
+ goto fail;
+ names_view_valid = 1;
+ names = (const char *) names_view.data;
+
+ symtab_shndx = 0;
+ dynsym_shndx = 0;
+
+ memset (sections, 0, sizeof sections);
+
+ /* Look for the symbol table. */
+ for (i = 1; i < shnum; ++i)
+ {
+ const b_elf_shdr *shdr;
+ unsigned int sh_name;
+ const char *name;
+ int j;
+
+ shdr = &shdrs[i - 1];
+
+ if (shdr->sh_type == SHT_SYMTAB)
+ symtab_shndx = i;
+ else if (shdr->sh_type == SHT_DYNSYM)
+ dynsym_shndx = i;
+
+ sh_name = shdr->sh_name;
+ if (sh_name >= shstr_size)
+ {
+ error_callback (data, "ELF section name out of range", 0);
+ goto fail;
+ }
+
+ name = names + sh_name;
+
+ for (j = 0; j < (int) DEBUG_MAX; ++j)
+ {
+ if (strcmp (name, debug_section_names[j]) == 0)
+ {
+ sections[j].offset = shdr->sh_offset;
+ sections[j].size = shdr->sh_size;
+ sections[j].compressed = (shdr->sh_flags & SHF_COMPRESSED) != 0;
+ break;
+ }
+ }
+
+ /* Read the build ID if present. This could check for any
+ SHT_NOTE section with the right note name and type, but gdb
+ looks for a specific section name. */
+ if (!debuginfo
+ && !buildid_view_valid
+ && strcmp (name, ".note.gnu.build-id") == 0)
+ {
+ const b_elf_note *note;
+
+ if (!backtrace_get_view (state, descriptor, shdr->sh_offset,
+ shdr->sh_size, error_callback, data,
+ &buildid_view))
+ goto fail;
+
+ buildid_view_valid = 1;
+ note = (const b_elf_note *) buildid_view.data;
+ if (note->type == NT_GNU_BUILD_ID
+ && note->namesz == 4
+ && strncmp (note->name, "GNU", 4) == 0
+ && shdr->sh_size < 12 + ((note->namesz + 3) & ~ 3) + note->descsz)
+ {
+ buildid_data = &note->name[0] + ((note->namesz + 3) & ~ 3);
+ buildid_size = note->descsz;
+ }
+ }
+
+ /* Read the debuglink file if present. */
+ if (!debuginfo
+ && !debuglink_view_valid
+ && strcmp (name, ".gnu_debuglink") == 0)
+ {
+ const char *debuglink_data;
+ size_t crc_offset;
+
+ if (!backtrace_get_view (state, descriptor, shdr->sh_offset,
+ shdr->sh_size, error_callback, data,
+ &debuglink_view))
+ goto fail;
+
+ debuglink_view_valid = 1;
+ debuglink_data = (const char *) debuglink_view.data;
+ crc_offset = strnlen (debuglink_data, shdr->sh_size);
+ crc_offset = (crc_offset + 3) & ~3;
+ if (crc_offset + 4 <= shdr->sh_size)
+ {
+ debuglink_name = debuglink_data;
+ debuglink_crc = *(const uint32_t*)(debuglink_data + crc_offset);
+ }
+ }
+
+ /* Read the .opd section on PowerPC64 ELFv1. */
+ if (ehdr.e_machine == EM_PPC64
+ && (ehdr.e_flags & EF_PPC64_ABI) < 2
+ && shdr->sh_type == SHT_PROGBITS
+ && strcmp (name, ".opd") == 0)
+ {
+ if (!backtrace_get_view (state, descriptor, shdr->sh_offset,
+ shdr->sh_size, error_callback, data,
+ &opd_data.view))
+ goto fail;
+
+ opd = &opd_data;
+ opd->addr = shdr->sh_addr;
+ opd->data = (const char *) opd_data.view.data;
+ opd->size = shdr->sh_size;
+ }
+ }
+
+ if (symtab_shndx == 0)
+ symtab_shndx = dynsym_shndx;
+ if (symtab_shndx != 0 && !debuginfo)
+ {
+ const b_elf_shdr *symtab_shdr;
+ unsigned int strtab_shndx;
+ const b_elf_shdr *strtab_shdr;
+ struct elf_syminfo_data *sdata;
+
+ symtab_shdr = &shdrs[symtab_shndx - 1];
+ strtab_shndx = symtab_shdr->sh_link;
+ if (strtab_shndx >= shnum)
+ {
+ error_callback (data,
+ "ELF symbol table strtab link out of range", 0);
+ goto fail;
+ }
+ strtab_shdr = &shdrs[strtab_shndx - 1];
+
+ if (!backtrace_get_view (state, descriptor, symtab_shdr->sh_offset,
+ symtab_shdr->sh_size, error_callback, data,
+ &symtab_view))
+ goto fail;
+ symtab_view_valid = 1;
+
+ if (!backtrace_get_view (state, descriptor, strtab_shdr->sh_offset,
+ strtab_shdr->sh_size, error_callback, data,
+ &strtab_view))
+ goto fail;
+ strtab_view_valid = 1;
+
+ sdata = ((struct elf_syminfo_data *)
+ backtrace_alloc (state, sizeof *sdata, error_callback, data));
+ if (sdata == NULL)
+ goto fail;
+
+ if (!elf_initialize_syminfo (state, base_address,
+ symtab_view.data, symtab_shdr->sh_size,
+ strtab_view.data, strtab_shdr->sh_size,
+ error_callback, data, sdata, opd))
+ {
+ backtrace_free (state, sdata, sizeof *sdata, error_callback, data);
+ goto fail;
+ }
+
+ /* We no longer need the symbol table, but we hold on to the
+ string table permanently. */
+ backtrace_release_view (state, &symtab_view, error_callback, data);
+ symtab_view_valid = 0;
+
+ *found_sym = 1;
+
+ elf_add_syminfo_data (state, sdata);
+ }
+
+ backtrace_release_view (state, &shdrs_view, error_callback, data);
+ shdrs_view_valid = 0;
+ backtrace_release_view (state, &names_view, error_callback, data);
+ names_view_valid = 0;
+
+ /* If the debug info is in a separate file, read that one instead. */
+
+ if (buildid_data != NULL)
+ {
+ int d;
+
+ d = elf_open_debugfile_by_buildid (state, buildid_data, buildid_size,
+ error_callback, data);
+ if (d >= 0)
+ {
+ int ret;
+
+ backtrace_release_view (state, &buildid_view, error_callback, data);
+ if (debuglink_view_valid)
+ backtrace_release_view (state, &debuglink_view, error_callback,
+ data);
+ ret = elf_add (state, NULL, d, base_address, error_callback, data,
+ fileline_fn, found_sym, found_dwarf, 0, 1);
+ if (ret < 0)
+ backtrace_close (d, error_callback, data);
+ else
+ backtrace_close (descriptor, error_callback, data);
+ return ret;
+ }
+ }
+
+ if (buildid_view_valid)
+ {
+ backtrace_release_view (state, &buildid_view, error_callback, data);
+ buildid_view_valid = 0;
+ }
+
+ if (opd)
+ {
+ backtrace_release_view (state, &opd->view, error_callback, data);
+ opd = NULL;
+ }
+
+ if (debuglink_name != NULL)
+ {
+ int d;
+
+ d = elf_open_debugfile_by_debuglink (state, filename, debuglink_name,
+ debuglink_crc, error_callback,
+ data);
+ if (d >= 0)
+ {
+ int ret;
+
+ backtrace_release_view (state, &debuglink_view, error_callback,
+ data);
+ ret = elf_add (state, NULL, d, base_address, error_callback, data,
+ fileline_fn, found_sym, found_dwarf, 0, 1);
+ if (ret < 0)
+ backtrace_close (d, error_callback, data);
+ else
+ backtrace_close(descriptor, error_callback, data);
+ return ret;
+ }
+ }
+
+ if (debuglink_view_valid)
+ {
+ backtrace_release_view (state, &debuglink_view, error_callback, data);
+ debuglink_view_valid = 0;
+ }
+
+ /* Read all the debug sections in a single view, since they are
+ probably adjacent in the file. We never release this view. */
+
+ min_offset = 0;
+ max_offset = 0;
+ for (i = 0; i < (int) DEBUG_MAX; ++i)
+ {
+ off_t end;
+
+ if (sections[i].size == 0)
+ continue;
+ if (min_offset == 0 || sections[i].offset < min_offset)
+ min_offset = sections[i].offset;
+ end = sections[i].offset + sections[i].size;
+ if (end > max_offset)
+ max_offset = end;
+ }
+ if (min_offset == 0 || max_offset == 0)
+ {
+ if (!backtrace_close (descriptor, error_callback, data))
+ goto fail;
+ return 1;
+ }
+
+ if (!backtrace_get_view (state, descriptor, min_offset,
+ max_offset - min_offset,
+ error_callback, data, &debug_view))
+ goto fail;
+ debug_view_valid = 1;
+
+ /* We've read all we need from the executable. */
+ if (!backtrace_close (descriptor, error_callback, data))
+ goto fail;
+ descriptor = -1;
+
+ using_debug_view = 0;
+ for (i = 0; i < (int) DEBUG_MAX; ++i)
+ {
+ if (sections[i].size == 0)
+ sections[i].data = NULL;
+ else
+ {
+ sections[i].data = ((const unsigned char *) debug_view.data
+ + (sections[i].offset - min_offset));
+ if (i < ZDEBUG_INFO)
+ ++using_debug_view;
+ }
+ }
+
+ /* Uncompress the old format (--compress-debug-sections=zlib-gnu). */
+
+ zdebug_table = NULL;
+ for (i = 0; i < ZDEBUG_INFO; ++i)
+ {
+ struct debug_section_info *pz;
+
+ pz = &sections[i + ZDEBUG_INFO - DEBUG_INFO];
+ if (sections[i].size == 0 && pz->size > 0)
+ {
+ unsigned char *uncompressed_data;
+ size_t uncompressed_size;
+
+ if (zdebug_table == NULL)
+ {
+ zdebug_table = ((uint16_t *)
+ backtrace_alloc (state, ZDEBUG_TABLE_SIZE,
+ error_callback, data));
+ if (zdebug_table == NULL)
+ goto fail;
+ }
+
+ uncompressed_data = NULL;
+ uncompressed_size = 0;
+ if (!elf_uncompress_zdebug (state, pz->data, pz->size, zdebug_table,
+ error_callback, data,
+ &uncompressed_data, &uncompressed_size))
+ goto fail;
+ sections[i].data = uncompressed_data;
+ sections[i].size = uncompressed_size;
+ sections[i].compressed = 0;
+ }
+ }
+
+ /* Uncompress the official ELF format
+ (--compress-debug-sections=zlib-gabi). */
+ for (i = 0; i < ZDEBUG_INFO; ++i)
+ {
+ unsigned char *uncompressed_data;
+ size_t uncompressed_size;
+
+ if (sections[i].size == 0 || !sections[i].compressed)
+ continue;
+
+ if (zdebug_table == NULL)
+ {
+ zdebug_table = ((uint16_t *)
+ backtrace_alloc (state, ZDEBUG_TABLE_SIZE,
+ error_callback, data));
+ if (zdebug_table == NULL)
+ goto fail;
+ }
+
+ uncompressed_data = NULL;
+ uncompressed_size = 0;
+ if (!elf_uncompress_chdr (state, sections[i].data, sections[i].size,
+ zdebug_table, error_callback, data,
+ &uncompressed_data, &uncompressed_size))
+ goto fail;
+ sections[i].data = uncompressed_data;
+ sections[i].size = uncompressed_size;
+ sections[i].compressed = 0;
+
+ --using_debug_view;
+ }
+
+ if (zdebug_table != NULL)
+ backtrace_free (state, zdebug_table, ZDEBUG_TABLE_SIZE,
+ error_callback, data);
+
+ if (debug_view_valid && using_debug_view == 0)
+ {
+ backtrace_release_view (state, &debug_view, error_callback, data);
+ debug_view_valid = 0;
+ }
+
+ if (!backtrace_dwarf_add (state, base_address,
+ sections[DEBUG_INFO].data,
+ sections[DEBUG_INFO].size,
+ sections[DEBUG_LINE].data,
+ sections[DEBUG_LINE].size,
+ sections[DEBUG_ABBREV].data,
+ sections[DEBUG_ABBREV].size,
+ sections[DEBUG_RANGES].data,
+ sections[DEBUG_RANGES].size,
+ sections[DEBUG_STR].data,
+ sections[DEBUG_STR].size,
+ ehdr.e_ident[EI_DATA] == ELFDATA2MSB,
+ error_callback, data, fileline_fn))
+ goto fail;
+
+ *found_dwarf = 1;
+
+ return 1;
+
+ fail:
+ if (shdrs_view_valid)
+ backtrace_release_view (state, &shdrs_view, error_callback, data);
+ if (names_view_valid)
+ backtrace_release_view (state, &names_view, error_callback, data);
+ if (symtab_view_valid)
+ backtrace_release_view (state, &symtab_view, error_callback, data);
+ if (strtab_view_valid)
+ backtrace_release_view (state, &strtab_view, error_callback, data);
+ if (debuglink_view_valid)
+ backtrace_release_view (state, &debuglink_view, error_callback, data);
+ if (buildid_view_valid)
+ backtrace_release_view (state, &buildid_view, error_callback, data);
+ if (debug_view_valid)
+ backtrace_release_view (state, &debug_view, error_callback, data);
+ if (opd)
+ backtrace_release_view (state, &opd->view, error_callback, data);
+ if (descriptor != -1)
+ backtrace_close (descriptor, error_callback, data);
+ return 0;
+}
+
+/* Data passed to phdr_callback. */
+
+struct phdr_data
+{
+ struct backtrace_state *state;
+ backtrace_error_callback error_callback;
+ void *data;
+ fileline *fileline_fn;
+ int *found_sym;
+ int *found_dwarf;
+ const char *exe_filename;
+ int exe_descriptor;
+};
+
+/* Callback passed to dl_iterate_phdr. Load debug info from shared
+ libraries. */
+
+static int
+#ifdef __i386__
+__attribute__ ((__force_align_arg_pointer__))
+#endif
+phdr_callback (struct dl_phdr_info *info, size_t size ATTRIBUTE_UNUSED,
+ void *pdata)
+{
+ struct phdr_data *pd = (struct phdr_data *) pdata;
+ const char *filename;
+ int descriptor;
+ int does_not_exist;
+ fileline elf_fileline_fn;
+ int found_dwarf;
+
+ /* There is not much we can do if we don't have the module name,
+ unless executable is ET_DYN, where we expect the very first
+ phdr_callback to be for the PIE. */
+ if (info->dlpi_name == NULL || info->dlpi_name[0] == '\0')
+ {
+ if (pd->exe_descriptor == -1)
+ return 0;
+ filename = pd->exe_filename;
+ descriptor = pd->exe_descriptor;
+ pd->exe_descriptor = -1;
+ }
+ else
+ {
+ if (pd->exe_descriptor != -1)
+ {
+ backtrace_close (pd->exe_descriptor, pd->error_callback, pd->data);
+ pd->exe_descriptor = -1;
+ }
+
+ filename = info->dlpi_name;
+ descriptor = backtrace_open (info->dlpi_name, pd->error_callback,
+ pd->data, &does_not_exist);
+ if (descriptor < 0)
+ return 0;
+ }
+
+ if (elf_add (pd->state, filename, descriptor, info->dlpi_addr,
+ pd->error_callback, pd->data, &elf_fileline_fn, pd->found_sym,
+ &found_dwarf, 0, 0))
+ {
+ if (found_dwarf)
+ {
+ *pd->found_dwarf = 1;
+ *pd->fileline_fn = elf_fileline_fn;
+ }
+ }
+
+ return 0;
+}
+
+/* Initialize the backtrace data we need from an ELF executable. At
+ the ELF level, all we need to do is find the debug info
+ sections. */
+
+int
+backtrace_initialize (struct backtrace_state *state, const char *filename,
+ int descriptor, backtrace_error_callback error_callback,
+ void *data, fileline *fileline_fn)
+{
+ int ret;
+ int found_sym;
+ int found_dwarf;
+ fileline elf_fileline_fn = elf_nodebug;
+ struct phdr_data pd;
+
+ ret = elf_add (state, filename, descriptor, 0, error_callback, data,
+ &elf_fileline_fn, &found_sym, &found_dwarf, 1, 0);
+ if (!ret)
+ return 0;
+
+ pd.state = state;
+ pd.error_callback = error_callback;
+ pd.data = data;
+ pd.fileline_fn = &elf_fileline_fn;
+ pd.found_sym = &found_sym;
+ pd.found_dwarf = &found_dwarf;
+ pd.exe_filename = filename;
+ pd.exe_descriptor = ret < 0 ? descriptor : -1;
+
+ dl_iterate_phdr (phdr_callback, (void *) &pd);
+
+ if (!state->threaded)
+ {
+ if (found_sym)
+ state->syminfo_fn = elf_syminfo;
+ else if (state->syminfo_fn == NULL)
+ state->syminfo_fn = elf_nosyms;
+ }
+ else
+ {
+ if (found_sym)
+ backtrace_atomic_store_pointer (&state->syminfo_fn, elf_syminfo);
+ else
+ (void) __sync_bool_compare_and_swap (&state->syminfo_fn, NULL,
+ elf_nosyms);
+ }
+
+ if (!state->threaded)
+ *fileline_fn = state->fileline_fn;
+ else
+ *fileline_fn = backtrace_atomic_load_pointer (&state->fileline_fn);
+
+ if (*fileline_fn == NULL || *fileline_fn == elf_nodebug)
+ *fileline_fn = elf_fileline_fn;
+
+ return 1;
+}
diff --git a/3rdparty/libbacktrace/fileline.c b/3rdparty/libbacktrace/fileline.c
new file mode 100644
index 000000000..e56730683
--- /dev/null
+++ b/3rdparty/libbacktrace/fileline.c
@@ -0,0 +1,201 @@
+/* fileline.c -- Get file and line number information in a backtrace.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "backtrace.h"
+#include "internal.h"
+
+#ifndef HAVE_GETEXECNAME
+#define getexecname() NULL
+#endif
+
+/* Initialize the fileline information from the executable. Returns 1
+ on success, 0 on failure. */
+
+static int
+fileline_initialize (struct backtrace_state *state,
+ backtrace_error_callback error_callback, void *data)
+{
+ int failed;
+ fileline fileline_fn;
+ int pass;
+ int called_error_callback;
+ int descriptor;
+ const char *filename;
+ char buf[64];
+
+ if (!state->threaded)
+ failed = state->fileline_initialization_failed;
+ else
+ failed = backtrace_atomic_load_int (&state->fileline_initialization_failed);
+
+ if (failed)
+ {
+ error_callback (data, "failed to read executable information", -1);
+ return 0;
+ }
+
+ if (!state->threaded)
+ fileline_fn = state->fileline_fn;
+ else
+ fileline_fn = backtrace_atomic_load_pointer (&state->fileline_fn);
+ if (fileline_fn != NULL)
+ return 1;
+
+ /* We have not initialized the information. Do it now. */
+
+ descriptor = -1;
+ called_error_callback = 0;
+ for (pass = 0; pass < 5; ++pass)
+ {
+ int does_not_exist;
+
+ switch (pass)
+ {
+ case 0:
+ filename = state->filename;
+ break;
+ case 1:
+ filename = getexecname ();
+ break;
+ case 2:
+ filename = "/proc/self/exe";
+ break;
+ case 3:
+ filename = "/proc/curproc/file";
+ break;
+ case 4:
+ snprintf (buf, sizeof (buf), "/proc/%ld/object/a.out",
+ (long) getpid ());
+ filename = buf;
+ break;
+ default:
+ abort ();
+ }
+
+ if (filename == NULL)
+ continue;
+
+ descriptor = backtrace_open (filename, error_callback, data,
+ &does_not_exist);
+ if (descriptor < 0 && !does_not_exist)
+ {
+ called_error_callback = 1;
+ break;
+ }
+ if (descriptor >= 0)
+ break;
+ }
+
+ if (descriptor < 0)
+ {
+ if (!called_error_callback)
+ {
+ if (state->filename != NULL)
+ error_callback (data, state->filename, ENOENT);
+ else
+ error_callback (data,
+ "libbacktrace could not find executable to open",
+ 0);
+ }
+ failed = 1;
+ }
+
+ if (!failed)
+ {
+ if (!backtrace_initialize (state, filename, descriptor, error_callback,
+ data, &fileline_fn))
+ failed = 1;
+ }
+
+ if (failed)
+ {
+ if (!state->threaded)
+ state->fileline_initialization_failed = 1;
+ else
+ backtrace_atomic_store_int (&state->fileline_initialization_failed, 1);
+ return 0;
+ }
+
+ if (!state->threaded)
+ state->fileline_fn = fileline_fn;
+ else
+ {
+ backtrace_atomic_store_pointer (&state->fileline_fn, fileline_fn);
+
+ /* Note that if two threads initialize at once, one of the data
+ sets may be leaked. */
+ }
+
+ return 1;
+}
+
+/* Given a PC, find the file name, line number, and function name. */
+
+int
+backtrace_pcinfo (struct backtrace_state *state, uintptr_t pc,
+ backtrace_full_callback callback,
+ backtrace_error_callback error_callback, void *data)
+{
+ if (!fileline_initialize (state, error_callback, data))
+ return 0;
+
+ if (state->fileline_initialization_failed)
+ return 0;
+
+ return state->fileline_fn (state, pc, callback, error_callback, data);
+}
+
+/* Given a PC, find the symbol for it, and its value. */
+
+int
+backtrace_syminfo (struct backtrace_state *state, uintptr_t pc,
+ backtrace_syminfo_callback callback,
+ backtrace_error_callback error_callback, void *data)
+{
+ if (!fileline_initialize (state, error_callback, data))
+ return 0;
+
+ if (state->fileline_initialization_failed)
+ return 0;
+
+ state->syminfo_fn (state, pc, callback, error_callback, data);
+ return 1;
+}
diff --git a/3rdparty/libbacktrace/filenames.h b/3rdparty/libbacktrace/filenames.h
new file mode 100644
index 000000000..2dcd6643a
--- /dev/null
+++ b/3rdparty/libbacktrace/filenames.h
@@ -0,0 +1,49 @@
+/* btest.c -- Filename header for libbacktrace library
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#ifndef GCC_VERSION
+# define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
+#endif
+
+#if (GCC_VERSION < 2007)
+# define __attribute__(x)
+#endif
+
+#ifndef ATTRIBUTE_UNUSED
+# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+#endif
+
+#if defined(__MSDOS__) || defined(_WIN32) || defined(__OS2__) || defined (__CYGWIN__)
+# define IS_DIR_SEPARATOR(c) ((c) == '/' || (c) == '\\')
+#else
+# define IS_DIR_SEPARATOR(c) ((c) == '/')
+#endif
diff --git a/3rdparty/libbacktrace/filetype.awk b/3rdparty/libbacktrace/filetype.awk
new file mode 100644
index 000000000..a5f6c8cc1
--- /dev/null
+++ b/3rdparty/libbacktrace/filetype.awk
@@ -0,0 +1,11 @@
+# An awk script to determine the type of a file.
+/\177ELF\001/ { if (NR == 1) { print "elf32"; exit } }
+/\177ELF\002/ { if (NR == 1) { print "elf64"; exit } }
+/\114\001/ { if (NR == 1) { print "pecoff"; exit } }
+/\144\206/ { if (NR == 1) { print "pecoff"; exit } }
+/\xFE\xED\xFA\xCE/ { if (NR == 1) { print "macho32"; exit } }
+/\xCE\xFA\xED\xFE/ { if (NR == 1) { print "macho32"; exit } }
+/\xFE\xED\xFA\xCF/ { if (NR == 1) { print "macho64"; exit } }
+/\xCF\xFA\xED\xFE/ { if (NR == 1) { print "macho64"; exit } }
+/\xCA\xFE\xBA\xBE/ { if (NR == 1) { print "macho-fat"; exit } }
+/\xBE\xBA\xFE\xCA/ { if (NR == 1) { print "macho-fat"; exit } }
diff --git a/3rdparty/libbacktrace/internal.h b/3rdparty/libbacktrace/internal.h
new file mode 100644
index 000000000..bff8ed470
--- /dev/null
+++ b/3rdparty/libbacktrace/internal.h
@@ -0,0 +1,304 @@
+/* internal.h -- Internal header file for stack backtrace library.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#ifndef BACKTRACE_INTERNAL_H
+#define BACKTRACE_INTERNAL_H
+
+/* We assume that <sys/types.h> and "backtrace.h" have already been
+ included. */
+
+#ifndef GCC_VERSION
+# define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
+#endif
+
+#if (GCC_VERSION < 2007)
+# define __attribute__(x)
+#endif
+
+#ifndef ATTRIBUTE_UNUSED
+# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+#endif
+
+#ifndef ATTRIBUTE_MALLOC
+# if (GCC_VERSION >= 2096)
+# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+# define ATTRIBUTE_MALLOC
+# endif
+#endif
+
+#ifndef HAVE_SYNC_FUNCTIONS
+
+/* Define out the sync functions. These should never be called if
+ they are not available. */
+
+#define __sync_bool_compare_and_swap(A, B, C) (abort(), 1)
+#define __sync_lock_test_and_set(A, B) (abort(), 0)
+#define __sync_lock_release(A) abort()
+
+#endif /* !defined (HAVE_SYNC_FUNCTIONS) */
+
+#ifdef HAVE_ATOMIC_FUNCTIONS
+
+/* We have the atomic builtin functions. */
+
+#define backtrace_atomic_load_pointer(p) \
+ __atomic_load_n ((p), __ATOMIC_ACQUIRE)
+#define backtrace_atomic_load_int(p) \
+ __atomic_load_n ((p), __ATOMIC_ACQUIRE)
+#define backtrace_atomic_store_pointer(p, v) \
+ __atomic_store_n ((p), (v), __ATOMIC_RELEASE)
+#define backtrace_atomic_store_size_t(p, v) \
+ __atomic_store_n ((p), (v), __ATOMIC_RELEASE)
+#define backtrace_atomic_store_int(p, v) \
+ __atomic_store_n ((p), (v), __ATOMIC_RELEASE)
+
+#else /* !defined (HAVE_ATOMIC_FUNCTIONS) */
+#ifdef HAVE_SYNC_FUNCTIONS
+
+/* We have the sync functions but not the atomic functions. Define
+ the atomic ones in terms of the sync ones. */
+
+extern void *backtrace_atomic_load_pointer (void *);
+extern int backtrace_atomic_load_int (int *);
+extern void backtrace_atomic_store_pointer (void *, void *);
+extern void backtrace_atomic_store_size_t (size_t *, size_t);
+extern void backtrace_atomic_store_int (int *, int);
+
+#else /* !defined (HAVE_SYNC_FUNCTIONS) */
+
+/* We have neither the sync nor the atomic functions. These will
+ never be called. */
+
+#define backtrace_atomic_load_pointer(p) (abort(), (void *) NULL)
+#define backtrace_atomic_load_int(p) (abort(), 0)
+#define backtrace_atomic_store_pointer(p, v) abort()
+#define backtrace_atomic_store_size_t(p, v) abort()
+#define backtrace_atomic_store_int(p, v) abort()
+
+#endif /* !defined (HAVE_SYNC_FUNCTIONS) */
+#endif /* !defined (HAVE_ATOMIC_FUNCTIONS) */
+
+/* The type of the function that collects file/line information. This
+ is like backtrace_pcinfo. */
+
+typedef int (*fileline) (struct backtrace_state *state, uintptr_t pc,
+ backtrace_full_callback callback,
+ backtrace_error_callback error_callback, void *data);
+
+/* The type of the function that collects symbol information. This is
+ like backtrace_syminfo. */
+
+typedef void (*syminfo) (struct backtrace_state *state, uintptr_t pc,
+ backtrace_syminfo_callback callback,
+ backtrace_error_callback error_callback, void *data);
+
+/* What the backtrace state pointer points to. */
+
+struct backtrace_state
+{
+ /* The name of the executable. */
+ const char *filename;
+ /* Non-zero if threaded. */
+ int threaded;
+ /* The master lock for fileline_fn, fileline_data, syminfo_fn,
+ syminfo_data, fileline_initialization_failed and everything the
+ data pointers point to. */
+ void *lock;
+ /* The function that returns file/line information. */
+ fileline fileline_fn;
+ /* The data to pass to FILELINE_FN. */
+ void *fileline_data;
+ /* The function that returns symbol information. */
+ syminfo syminfo_fn;
+ /* The data to pass to SYMINFO_FN. */
+ void *syminfo_data;
+ /* Whether initializing the file/line information failed. */
+ int fileline_initialization_failed;
+ /* The lock for the freelist. */
+ int lock_alloc;
+ /* The freelist when using mmap. */
+ struct backtrace_freelist_struct *freelist;
+};
+
+/* Open a file for reading. Returns -1 on error. If DOES_NOT_EXIST
+ is not NULL, *DOES_NOT_EXIST will be set to 0 normally and set to 1
+ if the file does not exist. If the file does not exist and
+ DOES_NOT_EXIST is not NULL, the function will return -1 and will
+ not call ERROR_CALLBACK. On other errors, or if DOES_NOT_EXIST is
+ NULL, the function will call ERROR_CALLBACK before returning. */
+extern int backtrace_open (const char *filename,
+ backtrace_error_callback error_callback,
+ void *data,
+ int *does_not_exist);
+
+/* A view of the contents of a file. This supports mmap when
+ available. A view will remain in memory even after backtrace_close
+ is called on the file descriptor from which the view was
+ obtained. */
+
+struct backtrace_view
+{
+ /* The data that the caller requested. */
+ const void *data;
+ /* The base of the view. */
+ void *base;
+ /* The total length of the view. */
+ size_t len;
+};
+
+/* Create a view of SIZE bytes from DESCRIPTOR at OFFSET. Store the
+ result in *VIEW. Returns 1 on success, 0 on error. */
+extern int backtrace_get_view (struct backtrace_state *state, int descriptor,
+ off_t offset, size_t size,
+ backtrace_error_callback error_callback,
+ void *data, struct backtrace_view *view);
+
+/* Release a view created by backtrace_get_view. */
+extern void backtrace_release_view (struct backtrace_state *state,
+ struct backtrace_view *view,
+ backtrace_error_callback error_callback,
+ void *data);
+
+/* Close a file opened by backtrace_open. Returns 1 on success, 0 on
+ error. */
+
+extern int backtrace_close (int descriptor,
+ backtrace_error_callback error_callback,
+ void *data);
+
+/* Sort without using memory. */
+
+extern void backtrace_qsort (void *base, size_t count, size_t size,
+ int (*compar) (const void *, const void *));
+
+/* Allocate memory. This is like malloc. If ERROR_CALLBACK is NULL,
+ this does not report an error, it just returns NULL. */
+
+extern void *backtrace_alloc (struct backtrace_state *state, size_t size,
+ backtrace_error_callback error_callback,
+ void *data) ATTRIBUTE_MALLOC;
+
+/* Free memory allocated by backtrace_alloc. If ERROR_CALLBACK is
+ NULL, this does not report an error. */
+
+extern void backtrace_free (struct backtrace_state *state, void *mem,
+ size_t size,
+ backtrace_error_callback error_callback,
+ void *data);
+
+/* A growable vector of some struct. This is used for more efficient
+ allocation when we don't know the final size of some group of data
+ that we want to represent as an array. */
+
+struct backtrace_vector
+{
+ /* The base of the vector. */
+ void *base;
+ /* The number of bytes in the vector. */
+ size_t size;
+ /* The number of bytes available at the current allocation. */
+ size_t alc;
+};
+
+/* Grow VEC by SIZE bytes. Return a pointer to the newly allocated
+ bytes. Note that this may move the entire vector to a new memory
+ location. Returns NULL on failure. */
+
+extern void *backtrace_vector_grow (struct backtrace_state *state, size_t size,
+ backtrace_error_callback error_callback,
+ void *data,
+ struct backtrace_vector *vec);
+
+/* Finish the current allocation on VEC. Prepare to start a new
+ allocation. The finished allocation will never be freed. Returns
+ a pointer to the base of the finished entries, or NULL on
+ failure. */
+
+extern void* backtrace_vector_finish (struct backtrace_state *state,
+ struct backtrace_vector *vec,
+ backtrace_error_callback error_callback,
+ void *data);
+
+/* Release any extra space allocated for VEC. This may change
+ VEC->base. Returns 1 on success, 0 on failure. */
+
+extern int backtrace_vector_release (struct backtrace_state *state,
+ struct backtrace_vector *vec,
+ backtrace_error_callback error_callback,
+ void *data);
+
+/* Read initial debug data from a descriptor, and set the
+ fileline_data, syminfo_fn, and syminfo_data fields of STATE.
+ Return the fileln_fn field in *FILELN_FN--this is done this way so
+ that the synchronization code is only implemented once. This is
+ called after the descriptor has first been opened. It will close
+ the descriptor if it is no longer needed. Returns 1 on success, 0
+ on error. There will be multiple implementations of this function,
+ for different file formats. Each system will compile the
+ appropriate one. */
+
+extern int backtrace_initialize (struct backtrace_state *state,
+ const char *filename,
+ int descriptor,
+ backtrace_error_callback error_callback,
+ void *data,
+ fileline *fileline_fn);
+
+/* Add file/line information for a DWARF module. */
+
+extern int backtrace_dwarf_add (struct backtrace_state *state,
+ uintptr_t base_address,
+ const unsigned char* dwarf_info,
+ size_t dwarf_info_size,
+ const unsigned char *dwarf_line,
+ size_t dwarf_line_size,
+ const unsigned char *dwarf_abbrev,
+ size_t dwarf_abbrev_size,
+ const unsigned char *dwarf_ranges,
+ size_t dwarf_range_size,
+ const unsigned char *dwarf_str,
+ size_t dwarf_str_size,
+ int is_bigendian,
+ backtrace_error_callback error_callback,
+ void *data, fileline *fileline_fn);
+
+/* A test-only hook for elf_uncompress_zdebug. */
+
+extern int backtrace_uncompress_zdebug (struct backtrace_state *,
+ const unsigned char *compressed,
+ size_t compressed_size,
+ backtrace_error_callback, void *data,
+ unsigned char **uncompressed,
+ size_t *uncompressed_size);
+
+#endif
diff --git a/3rdparty/libbacktrace/ltmain.sh b/3rdparty/libbacktrace/ltmain.sh
new file mode 100644
index 000000000..a736cf994
--- /dev/null
+++ b/3rdparty/libbacktrace/ltmain.sh
@@ -0,0 +1,11156 @@
+#! /bin/sh
+## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
+## by inline-source v2014-01-03.01
+
+# libtool (GNU libtool) 2.4.6
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool 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 2 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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/>.
+
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION="2.4.6 Debian-2.4.6-2"
+package_revision=2.4.6
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Run './libtool --help' for help with using this script from the
+# command line.
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# After configure completes, it has a better idea of some of the
+# shell tools we need than the defaults used by the functions shared
+# with bootstrap, so set those here where they can still be over-
+# ridden by the user, but otherwise take precedence.
+
+: ${AUTOCONF="autoconf"}
+: ${AUTOMAKE="automake"}
+
+
+## -------------------------- ##
+## Source external libraries. ##
+## -------------------------- ##
+
+# Much of our low-level functionality needs to be sourced from external
+# libraries, which are installed to $pkgauxdir.
+
+# Set a version string for this script.
+scriptversion=2015-01-20.17; # UTC
+
+# General shell script boiler plate, and helper functions.
+# Written by Gary V. Vaughan, 2004
+
+# Copyright (C) 2004-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# This program 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.
+
+# As a special exception to the GNU General Public License, if you distribute
+# this file as part of a program or library that is built using GNU Libtool,
+# you may include this file under the same distribution terms that you use
+# for the rest of that program.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNES 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/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Evaluate this file near the top of your script to gain access to
+# the functions and variables defined here:
+#
+# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
+#
+# If you need to override any of the default environment variable
+# settings, do that before evaluating this file.
+
+
+## -------------------- ##
+## Shell normalisation. ##
+## -------------------- ##
+
+# Some shells need a little help to be as Bourne compatible as possible.
+# Before doing anything else, make sure all that help has been provided!
+
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
+fi
+
+# NLS nuisances: We save the old values in case they are required later.
+_G_user_locale=
+_G_safe_locale=
+for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+ eval "if test set = \"\${$_G_var+set}\"; then
+ save_$_G_var=\$$_G_var
+ $_G_var=C
+ export $_G_var
+ _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
+ _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
+ fi"
+done
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Make sure IFS has a sensible default
+sp=' '
+nl='
+'
+IFS="$sp $nl"
+
+# There are apparently some retarded systems that use ';' as a PATH separator!
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+
+## ------------------------- ##
+## Locate command utilities. ##
+## ------------------------- ##
+
+
+# func_executable_p FILE
+# ----------------------
+# Check that FILE is an executable regular file.
+func_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+}
+
+
+# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
+# --------------------------------------------
+# Search for either a program that responds to --version with output
+# containing "GNU", or else returned by CHECK_FUNC otherwise, by
+# trying all the directories in PATH with each of the elements of
+# PROGS_LIST.
+#
+# CHECK_FUNC should accept the path to a candidate program, and
+# set $func_check_prog_result if it truncates its output less than
+# $_G_path_prog_max characters.
+func_path_progs ()
+{
+ _G_progs_list=$1
+ _G_check_func=$2
+ _G_PATH=${3-"$PATH"}
+
+ _G_path_prog_max=0
+ _G_path_prog_found=false
+ _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
+ for _G_dir in $_G_PATH; do
+ IFS=$_G_save_IFS
+ test -z "$_G_dir" && _G_dir=.
+ for _G_prog_name in $_G_progs_list; do
+ for _exeext in '' .EXE; do
+ _G_path_prog=$_G_dir/$_G_prog_name$_exeext
+ func_executable_p "$_G_path_prog" || continue
+ case `"$_G_path_prog" --version 2>&1` in
+ *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
+ *) $_G_check_func $_G_path_prog
+ func_path_progs_result=$func_check_prog_result
+ ;;
+ esac
+ $_G_path_prog_found && break 3
+ done
+ done
+ done
+ IFS=$_G_save_IFS
+ test -z "$func_path_progs_result" && {
+ echo "no acceptable sed could be found in \$PATH" >&2
+ exit 1
+ }
+}
+
+
+# We want to be able to use the functions in this file before configure
+# has figured out where the best binaries are kept, which means we have
+# to search for them ourselves - except when the results are already set
+# where we skip the searches.
+
+# Unless the user overrides by setting SED, search the path for either GNU
+# sed, or the sed that truncates its output the least.
+test -z "$SED" && {
+ _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for _G_i in 1 2 3 4 5 6 7; do
+ _G_sed_script=$_G_sed_script$nl$_G_sed_script
+ done
+ echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
+ _G_sed_script=
+
+ func_check_prog_sed ()
+ {
+ _G_path_prog=$1
+
+ _G_count=0
+ printf 0123456789 >conftest.in
+ while :
+ do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo '' >> conftest.nl
+ "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
+ diff conftest.out conftest.nl >/dev/null 2>&1 || break
+ _G_count=`expr $_G_count + 1`
+ if test "$_G_count" -gt "$_G_path_prog_max"; then
+ # Best one so far, save it but keep looking for a better one
+ func_check_prog_result=$_G_path_prog
+ _G_path_prog_max=$_G_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test 10 -lt "$_G_count" && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out
+ }
+
+ func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
+ rm -f conftest.sed
+ SED=$func_path_progs_result
+}
+
+
+# Unless the user overrides by setting GREP, search the path for either GNU
+# grep, or the grep that truncates its output the least.
+test -z "$GREP" && {
+ func_check_prog_grep ()
+ {
+ _G_path_prog=$1
+
+ _G_count=0
+ _G_path_prog_max=0
+ printf 0123456789 >conftest.in
+ while :
+ do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo 'GREP' >> conftest.nl
+ "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
+ diff conftest.out conftest.nl >/dev/null 2>&1 || break
+ _G_count=`expr $_G_count + 1`
+ if test "$_G_count" -gt "$_G_path_prog_max"; then
+ # Best one so far, save it but keep looking for a better one
+ func_check_prog_result=$_G_path_prog
+ _G_path_prog_max=$_G_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test 10 -lt "$_G_count" && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out
+ }
+
+ func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
+ GREP=$func_path_progs_result
+}
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# All uppercase variable names are used for environment variables. These
+# variables can be overridden by the user before calling a script that
+# uses them if a suitable command of that name is not already available
+# in the command search PATH.
+
+: ${CP="cp -f"}
+: ${ECHO="printf %s\n"}
+: ${EGREP="$GREP -E"}
+: ${FGREP="$GREP -F"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+
+
+## -------------------- ##
+## Useful sed snippets. ##
+## -------------------- ##
+
+sed_dirname='s|/[^/]*$||'
+sed_basename='s|^.*/||'
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
+
+# Same as above, but do not quote variable references.
+sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
+
+# Sed substitution that converts a w32 file name or path
+# that contains forward slashes, into one that contains
+# (escaped) backslashes. A very naive implementation.
+sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-'\' parameter expansions in output of sed_double_quote_subst that
+# were '\'-ed in input to the same. If an odd number of '\' preceded a
+# '$' in input to sed_double_quote_subst, that '$' was protected from
+# expansion. Since each input '\' is now two '\'s, look for any number
+# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'.
+_G_bs='\\'
+_G_bs2='\\\\'
+_G_bs4='\\\\\\\\'
+_G_dollar='\$'
+sed_double_backslash="\
+ s/$_G_bs4/&\\
+/g
+ s/^$_G_bs2$_G_dollar/$_G_bs&/
+ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
+ s/\n//g"
+
+
+## ----------------- ##
+## Global variables. ##
+## ----------------- ##
+
+# Except for the global variables explicitly listed below, the following
+# functions in the '^func_' namespace, and the '^require_' namespace
+# variables initialised in the 'Resource management' section, sourcing
+# this file will not pollute your global namespace with anything
+# else. There's no portable way to scope variables in Bourne shell
+# though, so actually running these functions will sometimes place
+# results into a variable named after the function, and often use
+# temporary variables in the '^_G_' namespace. If you are careful to
+# avoid using those namespaces casually in your sourcing script, things
+# should continue to work as you expect. And, of course, you can freely
+# overwrite any of the functions or variables defined here before
+# calling anything to customize them.
+
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
+
+# Allow overriding, eg assuming that you follow the convention of
+# putting '$debug_cmd' at the start of all your functions, you can get
+# bash to show function call trace with:
+#
+# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
+debug_cmd=${debug_cmd-":"}
+exit_cmd=:
+
+# By convention, finish your script with:
+#
+# exit $exit_status
+#
+# so that you can set exit_status to non-zero if you want to indicate
+# something went wrong during execution without actually bailing out at
+# the point of failure.
+exit_status=$EXIT_SUCCESS
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath=$0
+
+# The name of this program.
+progname=`$ECHO "$progpath" |$SED "$sed_basename"`
+
+# Make sure we have an absolute progpath for reexecution:
+case $progpath in
+ [\\/]*|[A-Za-z]:\\*) ;;
+ *[\\/]*)
+ progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
+ progdir=`cd "$progdir" && pwd`
+ progpath=$progdir/$progname
+ ;;
+ *)
+ _G_IFS=$IFS
+ IFS=${PATH_SEPARATOR-:}
+ for progdir in $PATH; do
+ IFS=$_G_IFS
+ test -x "$progdir/$progname" && break
+ done
+ IFS=$_G_IFS
+ test -n "$progdir" || progdir=`pwd`
+ progpath=$progdir/$progname
+ ;;
+esac
+
+
+## ----------------- ##
+## Standard options. ##
+## ----------------- ##
+
+# The following options affect the operation of the functions defined
+# below, and should be set appropriately depending on run-time para-
+# meters passed on the command line.
+
+opt_dry_run=false
+opt_quiet=false
+opt_verbose=false
+
+# Categories 'all' and 'none' are always available. Append any others
+# you will pass as the first argument to func_warning from your own
+# code.
+warning_categories=
+
+# By default, display warnings according to 'opt_warning_types'. Set
+# 'warning_func' to ':' to elide all warnings, or func_fatal_error to
+# treat the next displayed warning as a fatal error.
+warning_func=func_warn_and_continue
+
+# Set to 'all' to display all warnings, 'none' to suppress all
+# warnings, or a space delimited list of some subset of
+# 'warning_categories' to display only the listed warnings.
+opt_warning_types=all
+
+
+## -------------------- ##
+## Resource management. ##
+## -------------------- ##
+
+# This section contains definitions for functions that each ensure a
+# particular resource (a file, or a non-empty configuration variable for
+# example) is available, and if appropriate to extract default values
+# from pertinent package files. Call them using their associated
+# 'require_*' variable to ensure that they are executed, at most, once.
+#
+# It's entirely deliberate that calling these functions can set
+# variables that don't obey the namespace limitations obeyed by the rest
+# of this file, in order that that they be as useful as possible to
+# callers.
+
+
+# require_term_colors
+# -------------------
+# Allow display of bold text on terminals that support it.
+require_term_colors=func_require_term_colors
+func_require_term_colors ()
+{
+ $debug_cmd
+
+ test -t 1 && {
+ # COLORTERM and USE_ANSI_COLORS environment variables take
+ # precedence, because most terminfo databases neglect to describe
+ # whether color sequences are supported.
+ test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
+
+ if test 1 = "$USE_ANSI_COLORS"; then
+ # Standard ANSI escape sequences
+ tc_reset=''
+ tc_bold=''; tc_standout=''
+ tc_red=''; tc_green=''
+ tc_blue=''; tc_cyan=''
+ else
+ # Otherwise trust the terminfo database after all.
+ test -n "`tput sgr0 2>/dev/null`" && {
+ tc_reset=`tput sgr0`
+ test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
+ tc_standout=$tc_bold
+ test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
+ test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
+ test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
+ test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
+ test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
+ }
+ fi
+ }
+
+ require_term_colors=:
+}
+
+
+## ----------------- ##
+## Function library. ##
+## ----------------- ##
+
+# This section contains a variety of useful functions to call in your
+# scripts. Take note of the portable wrappers for features provided by
+# some modern shells, which will fall back to slower equivalents on
+# less featureful shells.
+
+
+# func_append VAR VALUE
+# ---------------------
+# Append VALUE onto the existing contents of VAR.
+
+ # We should try to minimise forks, especially on Windows where they are
+ # unreasonably slow, so skip the feature probes when bash or zsh are
+ # being used:
+ if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
+ : ${_G_HAVE_ARITH_OP="yes"}
+ : ${_G_HAVE_XSI_OPS="yes"}
+ # The += operator was introduced in bash 3.1
+ case $BASH_VERSION in
+ [12].* | 3.0 | 3.0*) ;;
+ *)
+ : ${_G_HAVE_PLUSEQ_OP="yes"}
+ ;;
+ esac
+ fi
+
+ # _G_HAVE_PLUSEQ_OP
+ # Can be empty, in which case the shell is probed, "yes" if += is
+ # useable or anything else if it does not work.
+ test -z "$_G_HAVE_PLUSEQ_OP" \
+ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
+ && _G_HAVE_PLUSEQ_OP=yes
+
+if test yes = "$_G_HAVE_PLUSEQ_OP"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_append ()
+ {
+ $debug_cmd
+
+ eval "$1+=\$2"
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_append ()
+ {
+ $debug_cmd
+
+ eval "$1=\$$1\$2"
+ }
+fi
+
+
+# func_append_quoted VAR VALUE
+# ----------------------------
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+if test yes = "$_G_HAVE_PLUSEQ_OP"; then
+ eval 'func_append_quoted ()
+ {
+ $debug_cmd
+
+ func_quote_for_eval "$2"
+ eval "$1+=\\ \$func_quote_for_eval_result"
+ }'
+else
+ func_append_quoted ()
+ {
+ $debug_cmd
+
+ func_quote_for_eval "$2"
+ eval "$1=\$$1\\ \$func_quote_for_eval_result"
+ }
+fi
+
+
+# func_append_uniq VAR VALUE
+# --------------------------
+# Append unique VALUE onto the existing contents of VAR, assuming
+# entries are delimited by the first character of VALUE. For example:
+#
+# func_append_uniq options " --another-option option-argument"
+#
+# will only append to $options if " --another-option option-argument "
+# is not already present somewhere in $options already (note spaces at
+# each end implied by leading space in second argument).
+func_append_uniq ()
+{
+ $debug_cmd
+
+ eval _G_current_value='`$ECHO $'$1'`'
+ _G_delim=`expr "$2" : '\(.\)'`
+
+ case $_G_delim$_G_current_value$_G_delim in
+ *"$2$_G_delim"*) ;;
+ *) func_append "$@" ;;
+ esac
+}
+
+
+# func_arith TERM...
+# ------------------
+# Set func_arith_result to the result of evaluating TERMs.
+ test -z "$_G_HAVE_ARITH_OP" \
+ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
+ && _G_HAVE_ARITH_OP=yes
+
+if test yes = "$_G_HAVE_ARITH_OP"; then
+ eval 'func_arith ()
+ {
+ $debug_cmd
+
+ func_arith_result=$(( $* ))
+ }'
+else
+ func_arith ()
+ {
+ $debug_cmd
+
+ func_arith_result=`expr "$@"`
+ }
+fi
+
+
+# func_basename FILE
+# ------------------
+# Set func_basename_result to FILE with everything up to and including
+# the last / stripped.
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ # If this shell supports suffix pattern removal, then use it to avoid
+ # forking. Hide the definitions single quotes in case the shell chokes
+ # on unsupported syntax...
+ _b='func_basename_result=${1##*/}'
+ _d='case $1 in
+ */*) func_dirname_result=${1%/*}$2 ;;
+ * ) func_dirname_result=$3 ;;
+ esac'
+
+else
+ # ...otherwise fall back to using sed.
+ _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
+ _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"`
+ if test "X$func_dirname_result" = "X$1"; then
+ func_dirname_result=$3
+ else
+ func_append func_dirname_result "$2"
+ fi'
+fi
+
+eval 'func_basename ()
+{
+ $debug_cmd
+
+ '"$_b"'
+}'
+
+
+# func_dirname FILE APPEND NONDIR_REPLACEMENT
+# -------------------------------------------
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+eval 'func_dirname ()
+{
+ $debug_cmd
+
+ '"$_d"'
+}'
+
+
+# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
+# --------------------------------------------------------
+# Perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# For efficiency, we do not delegate to the functions above but instead
+# duplicate the functionality here.
+eval 'func_dirname_and_basename ()
+{
+ $debug_cmd
+
+ '"$_b"'
+ '"$_d"'
+}'
+
+
+# func_echo ARG...
+# ----------------
+# Echo program name prefixed message.
+func_echo ()
+{
+ $debug_cmd
+
+ _G_message=$*
+
+ func_echo_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_IFS
+ $ECHO "$progname: $_G_line"
+ done
+ IFS=$func_echo_IFS
+}
+
+
+# func_echo_all ARG...
+# --------------------
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+
+# func_echo_infix_1 INFIX ARG...
+# ------------------------------
+# Echo program name, followed by INFIX on the first line, with any
+# additional lines not showing INFIX.
+func_echo_infix_1 ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ _G_infix=$1; shift
+ _G_indent=$_G_infix
+ _G_prefix="$progname: $_G_infix: "
+ _G_message=$*
+
+ # Strip color escape sequences before counting printable length
+ for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
+ do
+ test -n "$_G_tc" && {
+ _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
+ _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
+ }
+ done
+ _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes
+
+ func_echo_infix_1_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_infix_1_IFS
+ $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
+ _G_prefix=$_G_indent
+ done
+ IFS=$func_echo_infix_1_IFS
+}
+
+
+# func_error ARG...
+# -----------------
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2
+}
+
+
+# func_fatal_error ARG...
+# -----------------------
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+ $debug_cmd
+
+ func_error "$*"
+ exit $EXIT_FAILURE
+}
+
+
+# func_grep EXPRESSION FILENAME
+# -----------------------------
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+ $debug_cmd
+
+ $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_len STRING
+# ---------------
+# Set func_len_result to the length of STRING. STRING may not
+# start with a hyphen.
+ test -z "$_G_HAVE_XSI_OPS" \
+ && (eval 'x=a/b/c;
+ test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+ && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_len ()
+ {
+ $debug_cmd
+
+ func_len_result=${#1}
+ }'
+else
+ func_len ()
+ {
+ $debug_cmd
+
+ func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+ }
+fi
+
+
+# func_mkdir_p DIRECTORY-PATH
+# ---------------------------
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+ $debug_cmd
+
+ _G_directory_path=$1
+ _G_dir_list=
+
+ if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
+
+ # Protect directory names starting with '-'
+ case $_G_directory_path in
+ -*) _G_directory_path=./$_G_directory_path ;;
+ esac
+
+ # While some portion of DIR does not yet exist...
+ while test ! -d "$_G_directory_path"; do
+ # ...make a list in topmost first order. Use a colon delimited
+ # list incase some portion of path contains whitespace.
+ _G_dir_list=$_G_directory_path:$_G_dir_list
+
+ # If the last portion added has no slash in it, the list is done
+ case $_G_directory_path in */*) ;; *) break ;; esac
+
+ # ...otherwise throw away the child directory and loop
+ _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
+ done
+ _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
+
+ func_mkdir_p_IFS=$IFS; IFS=:
+ for _G_dir in $_G_dir_list; do
+ IFS=$func_mkdir_p_IFS
+ # mkdir can fail with a 'File exist' error if two processes
+ # try to create one of the directories concurrently. Don't
+ # stop in that case!
+ $MKDIR "$_G_dir" 2>/dev/null || :
+ done
+ IFS=$func_mkdir_p_IFS
+
+ # Bail out if we (or some other process) failed to create a directory.
+ test -d "$_G_directory_path" || \
+ func_fatal_error "Failed to create '$1'"
+ fi
+}
+
+
+# func_mktempdir [BASENAME]
+# -------------------------
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible. If
+# given, BASENAME is the basename for that directory.
+func_mktempdir ()
+{
+ $debug_cmd
+
+ _G_template=${TMPDIR-/tmp}/${1-$progname}
+
+ if test : = "$opt_dry_run"; then
+ # Return a directory name, but don't create it in dry-run mode
+ _G_tmpdir=$_G_template-$$
+ else
+
+ # If mktemp works, use that first and foremost
+ _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
+
+ if test ! -d "$_G_tmpdir"; then
+ # Failing that, at least try and use $RANDOM to avoid a race
+ _G_tmpdir=$_G_template-${RANDOM-0}$$
+
+ func_mktempdir_umask=`umask`
+ umask 0077
+ $MKDIR "$_G_tmpdir"
+ umask $func_mktempdir_umask
+ fi
+
+ # If we're not in dry-run mode, bomb out on failure
+ test -d "$_G_tmpdir" || \
+ func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
+ fi
+
+ $ECHO "$_G_tmpdir"
+}
+
+
+# func_normal_abspath PATH
+# ------------------------
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+func_normal_abspath ()
+{
+ $debug_cmd
+
+ # These SED scripts presuppose an absolute path with a trailing slash.
+ _G_pathcar='s|^/\([^/]*\).*$|\1|'
+ _G_pathcdr='s|^/[^/]*||'
+ _G_removedotparts=':dotsl
+ s|/\./|/|g
+ t dotsl
+ s|/\.$|/|'
+ _G_collapseslashes='s|/\{1,\}|/|g'
+ _G_finalslash='s|/*$|/|'
+
+ # Start from root dir and reassemble the path.
+ func_normal_abspath_result=
+ func_normal_abspath_tpath=$1
+ func_normal_abspath_altnamespace=
+ case $func_normal_abspath_tpath in
+ "")
+ # Empty path, that just means $cwd.
+ func_stripname '' '/' "`pwd`"
+ func_normal_abspath_result=$func_stripname_result
+ return
+ ;;
+ # The next three entries are used to spot a run of precisely
+ # two leading slashes without using negated character classes;
+ # we take advantage of case's first-match behaviour.
+ ///*)
+ # Unusual form of absolute path, do nothing.
+ ;;
+ //*)
+ # Not necessarily an ordinary path; POSIX reserves leading '//'
+ # and for example Cygwin uses it to access remote file shares
+ # over CIFS/SMB, so we conserve a leading double slash if found.
+ func_normal_abspath_altnamespace=/
+ ;;
+ /*)
+ # Absolute path, do nothing.
+ ;;
+ *)
+ # Relative path, prepend $cwd.
+ func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+ ;;
+ esac
+
+ # Cancel out all the simple stuff to save iterations. We also want
+ # the path to end with a slash for ease of parsing, so make sure
+ # there is one (and only one) here.
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
+ while :; do
+ # Processed it all yet?
+ if test / = "$func_normal_abspath_tpath"; then
+ # If we ascended to the root using ".." the result may be empty now.
+ if test -z "$func_normal_abspath_result"; then
+ func_normal_abspath_result=/
+ fi
+ break
+ fi
+ func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_pathcar"`
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_pathcdr"`
+ # Figure out what to do with it
+ case $func_normal_abspath_tcomponent in
+ "")
+ # Trailing empty path component, ignore it.
+ ;;
+ ..)
+ # Parent dir; strip last assembled component from result.
+ func_dirname "$func_normal_abspath_result"
+ func_normal_abspath_result=$func_dirname_result
+ ;;
+ *)
+ # Actual path component, append it.
+ func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
+ ;;
+ esac
+ done
+ # Restore leading double-slash if one was found on entry.
+ func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+
+# func_notquiet ARG...
+# --------------------
+# Echo program name prefixed message only when not in quiet mode.
+func_notquiet ()
+{
+ $debug_cmd
+
+ $opt_quiet || func_echo ${1+"$@"}
+
+ # A bug in bash halts the script if the last line of a function
+ # fails when set -e is in force, so we need another command to
+ # work around that:
+ :
+}
+
+
+# func_relative_path SRCDIR DSTDIR
+# --------------------------------
+# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
+func_relative_path ()
+{
+ $debug_cmd
+
+ func_relative_path_result=
+ func_normal_abspath "$1"
+ func_relative_path_tlibdir=$func_normal_abspath_result
+ func_normal_abspath "$2"
+ func_relative_path_tbindir=$func_normal_abspath_result
+
+ # Ascend the tree starting from libdir
+ while :; do
+ # check if we have found a prefix of bindir
+ case $func_relative_path_tbindir in
+ $func_relative_path_tlibdir)
+ # found an exact match
+ func_relative_path_tcancelled=
+ break
+ ;;
+ $func_relative_path_tlibdir*)
+ # found a matching prefix
+ func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+ func_relative_path_tcancelled=$func_stripname_result
+ if test -z "$func_relative_path_result"; then
+ func_relative_path_result=.
+ fi
+ break
+ ;;
+ *)
+ func_dirname $func_relative_path_tlibdir
+ func_relative_path_tlibdir=$func_dirname_result
+ if test -z "$func_relative_path_tlibdir"; then
+ # Have to descend all the way to the root!
+ func_relative_path_result=../$func_relative_path_result
+ func_relative_path_tcancelled=$func_relative_path_tbindir
+ break
+ fi
+ func_relative_path_result=../$func_relative_path_result
+ ;;
+ esac
+ done
+
+ # Now calculate path; take care to avoid doubling-up slashes.
+ func_stripname '' '/' "$func_relative_path_result"
+ func_relative_path_result=$func_stripname_result
+ func_stripname '/' '/' "$func_relative_path_tcancelled"
+ if test -n "$func_stripname_result"; then
+ func_append func_relative_path_result "/$func_stripname_result"
+ fi
+
+ # Normalisation. If bindir is libdir, return '.' else relative path.
+ if test -n "$func_relative_path_result"; then
+ func_stripname './' '' "$func_relative_path_result"
+ func_relative_path_result=$func_stripname_result
+ fi
+
+ test -n "$func_relative_path_result" || func_relative_path_result=.
+
+ :
+}
+
+
+# func_quote_for_eval ARG...
+# --------------------------
+# Aesthetically quote ARGs to be evaled later.
+# This function returns two values:
+# i) func_quote_for_eval_result
+# double-quoted, suitable for a subsequent eval
+# ii) func_quote_for_eval_unquoted_result
+# has all characters that are still active within double
+# quotes backslashified.
+func_quote_for_eval ()
+{
+ $debug_cmd
+
+ func_quote_for_eval_unquoted_result=
+ func_quote_for_eval_result=
+ while test 0 -lt $#; do
+ case $1 in
+ *[\\\`\"\$]*)
+ _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
+ *)
+ _G_unquoted_arg=$1 ;;
+ esac
+ if test -n "$func_quote_for_eval_unquoted_result"; then
+ func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
+ else
+ func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
+ fi
+
+ case $_G_unquoted_arg in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting, command substitution and variable expansion
+ # for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ _G_quoted_arg=\"$_G_unquoted_arg\"
+ ;;
+ *)
+ _G_quoted_arg=$_G_unquoted_arg
+ ;;
+ esac
+
+ if test -n "$func_quote_for_eval_result"; then
+ func_append func_quote_for_eval_result " $_G_quoted_arg"
+ else
+ func_append func_quote_for_eval_result "$_G_quoted_arg"
+ fi
+ shift
+ done
+}
+
+
+# func_quote_for_expand ARG
+# -------------------------
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+ $debug_cmd
+
+ case $1 in
+ *[\\\`\"]*)
+ _G_arg=`$ECHO "$1" | $SED \
+ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
+ *)
+ _G_arg=$1 ;;
+ esac
+
+ case $_G_arg in
+ # Double-quote args containing shell metacharacters to delay
+ # word splitting and command substitution for a subsequent eval.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ _G_arg=\"$_G_arg\"
+ ;;
+ esac
+
+ func_quote_for_expand_result=$_G_arg
+}
+
+
+# func_stripname PREFIX SUFFIX NAME
+# ---------------------------------
+# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_stripname ()
+ {
+ $debug_cmd
+
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary variable first.
+ func_stripname_result=$3
+ func_stripname_result=${func_stripname_result#"$1"}
+ func_stripname_result=${func_stripname_result%"$2"}
+ }'
+else
+ func_stripname ()
+ {
+ $debug_cmd
+
+ case $2 in
+ .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
+ *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
+ esac
+ }
+fi
+
+
+# func_show_eval CMD [FAIL_EXP]
+# -----------------------------
+# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+ $debug_cmd
+
+ _G_cmd=$1
+ _G_fail_exp=${2-':'}
+
+ func_quote_for_expand "$_G_cmd"
+ eval "func_notquiet $func_quote_for_expand_result"
+
+ $opt_dry_run || {
+ eval "$_G_cmd"
+ _G_status=$?
+ if test 0 -ne "$_G_status"; then
+ eval "(exit $_G_status); $_G_fail_exp"
+ fi
+ }
+}
+
+
+# func_show_eval_locale CMD [FAIL_EXP]
+# ------------------------------------
+# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it. Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+ $debug_cmd
+
+ _G_cmd=$1
+ _G_fail_exp=${2-':'}
+
+ $opt_quiet || {
+ func_quote_for_expand "$_G_cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+
+ $opt_dry_run || {
+ eval "$_G_user_locale
+ $_G_cmd"
+ _G_status=$?
+ eval "$_G_safe_locale"
+ if test 0 -ne "$_G_status"; then
+ eval "(exit $_G_status); $_G_fail_exp"
+ fi
+ }
+}
+
+
+# func_tr_sh
+# ----------
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result. All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+ $debug_cmd
+
+ case $1 in
+ [0-9]* | *[!a-zA-Z0-9_]*)
+ func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
+ ;;
+ * )
+ func_tr_sh_result=$1
+ ;;
+ esac
+}
+
+
+# func_verbose ARG...
+# -------------------
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+ $debug_cmd
+
+ $opt_verbose && func_echo "$*"
+
+ :
+}
+
+
+# func_warn_and_continue ARG...
+# -----------------------------
+# Echo program name prefixed warning message to standard error.
+func_warn_and_continue ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
+}
+
+
+# func_warning CATEGORY ARG...
+# ----------------------------
+# Echo program name prefixed warning message to standard error. Warning
+# messages can be filtered according to CATEGORY, where this function
+# elides messages where CATEGORY is not listed in the global variable
+# 'opt_warning_types'.
+func_warning ()
+{
+ $debug_cmd
+
+ # CATEGORY must be in the warning_categories list!
+ case " $warning_categories " in
+ *" $1 "*) ;;
+ *) func_internal_error "invalid warning category '$1'" ;;
+ esac
+
+ _G_category=$1
+ shift
+
+ case " $opt_warning_types " in
+ *" $_G_category "*) $warning_func ${1+"$@"} ;;
+ esac
+}
+
+
+# func_sort_ver VER1 VER2
+# -----------------------
+# 'sort -V' is not generally available.
+# Note this deviates from the version comparison in automake
+# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
+# but this should suffice as we won't be specifying old
+# version formats or redundant trailing .0 in bootstrap.conf.
+# If we did want full compatibility then we should probably
+# use m4_version_compare from autoconf.
+func_sort_ver ()
+{
+ $debug_cmd
+
+ printf '%s\n%s\n' "$1" "$2" \
+ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
+}
+
+# func_lt_ver PREV CURR
+# ---------------------
+# Return true if PREV and CURR are in the correct order according to
+# func_sort_ver, otherwise false. Use it like this:
+#
+# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
+func_lt_ver ()
+{
+ $debug_cmd
+
+ test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+#! /bin/sh
+
+# Set a version string for this script.
+scriptversion=2014-01-07.03; # UTC
+
+# A portable, pluggable option parser for Bourne shell.
+# Written by Gary V. Vaughan, 2010
+
+# Copyright (C) 2010-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# This program 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/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# This file is a library for parsing options in your shell scripts along
+# with assorted other useful supporting features that you can make use
+# of too.
+#
+# For the simplest scripts you might need only:
+#
+# #!/bin/sh
+# . relative/path/to/funclib.sh
+# . relative/path/to/options-parser
+# scriptversion=1.0
+# func_options ${1+"$@"}
+# eval set dummy "$func_options_result"; shift
+# ...rest of your script...
+#
+# In order for the '--version' option to work, you will need to have a
+# suitably formatted comment like the one at the top of this file
+# starting with '# Written by ' and ending with '# warranty; '.
+#
+# For '-h' and '--help' to work, you will also need a one line
+# description of your script's purpose in a comment directly above the
+# '# Written by ' line, like the one at the top of this file.
+#
+# The default options also support '--debug', which will turn on shell
+# execution tracing (see the comment above debug_cmd below for another
+# use), and '--verbose' and the func_verbose function to allow your script
+# to display verbose messages only when your user has specified
+# '--verbose'.
+#
+# After sourcing this file, you can plug processing for additional
+# options by amending the variables from the 'Configuration' section
+# below, and following the instructions in the 'Option parsing'
+# section further down.
+
+## -------------- ##
+## Configuration. ##
+## -------------- ##
+
+# You should override these variables in your script after sourcing this
+# file so that they reflect the customisations you have added to the
+# option parser.
+
+# The usage line for option parsing errors and the start of '-h' and
+# '--help' output messages. You can embed shell variables for delayed
+# expansion at the time the message is displayed, but you will need to
+# quote other shell meta-characters carefully to prevent them being
+# expanded when the contents are evaled.
+usage='$progpath [OPTION]...'
+
+# Short help message in response to '-h' and '--help'. Add to this or
+# override it after sourcing this library to reflect the full set of
+# options your script accepts.
+usage_message="\
+ --debug enable verbose shell tracing
+ -W, --warnings=CATEGORY
+ report the warnings falling in CATEGORY [all]
+ -v, --verbose verbosely report processing
+ --version print version information and exit
+ -h, --help print short or long help message and exit
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+long_help_message="
+Warning categories include:
+ 'all' show all warnings
+ 'none' turn off all the warnings
+ 'error' warnings are treated as fatal errors"
+
+# Help message printed before fatal option parsing errors.
+fatal_help="Try '\$progname --help' for more information."
+
+
+
+## ------------------------- ##
+## Hook function management. ##
+## ------------------------- ##
+
+# This section contains functions for adding, removing, and running hooks
+# to the main code. A hook is just a named list of of function, that can
+# be run in order later on.
+
+# func_hookable FUNC_NAME
+# -----------------------
+# Declare that FUNC_NAME will run hooks added with
+# 'func_add_hook FUNC_NAME ...'.
+func_hookable ()
+{
+ $debug_cmd
+
+ func_append hookable_fns " $1"
+}
+
+
+# func_add_hook FUNC_NAME HOOK_FUNC
+# ---------------------------------
+# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must
+# first have been declared "hookable" by a call to 'func_hookable'.
+func_add_hook ()
+{
+ $debug_cmd
+
+ case " $hookable_fns " in
+ *" $1 "*) ;;
+ *) func_fatal_error "'$1' does not accept hook functions." ;;
+ esac
+
+ eval func_append ${1}_hooks '" $2"'
+}
+
+
+# func_remove_hook FUNC_NAME HOOK_FUNC
+# ------------------------------------
+# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
+func_remove_hook ()
+{
+ $debug_cmd
+
+ eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
+}
+
+
+# func_run_hooks FUNC_NAME [ARG]...
+# ---------------------------------
+# Run all hook functions registered to FUNC_NAME.
+# It is assumed that the list of hook functions contains nothing more
+# than a whitespace-delimited list of legal shell function names, and
+# no effort is wasted trying to catch shell meta-characters or preserve
+# whitespace.
+func_run_hooks ()
+{
+ $debug_cmd
+
+ case " $hookable_fns " in
+ *" $1 "*) ;;
+ *) func_fatal_error "'$1' does not support hook funcions.n" ;;
+ esac
+
+ eval _G_hook_fns=\$$1_hooks; shift
+
+ for _G_hook in $_G_hook_fns; do
+ eval $_G_hook '"$@"'
+
+ # store returned options list back into positional
+ # parameters for next 'cmd' execution.
+ eval _G_hook_result=\$${_G_hook}_result
+ eval set dummy "$_G_hook_result"; shift
+ done
+
+ func_quote_for_eval ${1+"$@"}
+ func_run_hooks_result=$func_quote_for_eval_result
+}
+
+
+
+## --------------- ##
+## Option parsing. ##
+## --------------- ##
+
+# In order to add your own option parsing hooks, you must accept the
+# full positional parameter list in your hook function, remove any
+# options that you action, and then pass back the remaining unprocessed
+# options in '<hooked_function_name>_result', escaped suitably for
+# 'eval'. Like this:
+#
+# my_options_prep ()
+# {
+# $debug_cmd
+#
+# # Extend the existing usage message.
+# usage_message=$usage_message'
+# -s, --silent don'\''t print informational messages
+# '
+#
+# func_quote_for_eval ${1+"$@"}
+# my_options_prep_result=$func_quote_for_eval_result
+# }
+# func_add_hook func_options_prep my_options_prep
+#
+#
+# my_silent_option ()
+# {
+# $debug_cmd
+#
+# # Note that for efficiency, we parse as many options as we can
+# # recognise in a loop before passing the remainder back to the
+# # caller on the first unrecognised argument we encounter.
+# while test $# -gt 0; do
+# opt=$1; shift
+# case $opt in
+# --silent|-s) opt_silent=: ;;
+# # Separate non-argument short options:
+# -s*) func_split_short_opt "$_G_opt"
+# set dummy "$func_split_short_opt_name" \
+# "-$func_split_short_opt_arg" ${1+"$@"}
+# shift
+# ;;
+# *) set dummy "$_G_opt" "$*"; shift; break ;;
+# esac
+# done
+#
+# func_quote_for_eval ${1+"$@"}
+# my_silent_option_result=$func_quote_for_eval_result
+# }
+# func_add_hook func_parse_options my_silent_option
+#
+#
+# my_option_validation ()
+# {
+# $debug_cmd
+#
+# $opt_silent && $opt_verbose && func_fatal_help "\
+# '--silent' and '--verbose' options are mutually exclusive."
+#
+# func_quote_for_eval ${1+"$@"}
+# my_option_validation_result=$func_quote_for_eval_result
+# }
+# func_add_hook func_validate_options my_option_validation
+#
+# You'll alse need to manually amend $usage_message to reflect the extra
+# options you parse. It's preferable to append if you can, so that
+# multiple option parsing hooks can be added safely.
+
+
+# func_options [ARG]...
+# ---------------------
+# All the functions called inside func_options are hookable. See the
+# individual implementations for details.
+func_hookable func_options
+func_options ()
+{
+ $debug_cmd
+
+ func_options_prep ${1+"$@"}
+ eval func_parse_options \
+ ${func_options_prep_result+"$func_options_prep_result"}
+ eval func_validate_options \
+ ${func_parse_options_result+"$func_parse_options_result"}
+
+ eval func_run_hooks func_options \
+ ${func_validate_options_result+"$func_validate_options_result"}
+
+ # save modified positional parameters for caller
+ func_options_result=$func_run_hooks_result
+}
+
+
+# func_options_prep [ARG]...
+# --------------------------
+# All initialisations required before starting the option parse loop.
+# Note that when calling hook functions, we pass through the list of
+# positional parameters. If a hook function modifies that list, and
+# needs to propogate that back to rest of this script, then the complete
+# modified list must be put in 'func_run_hooks_result' before
+# returning.
+func_hookable func_options_prep
+func_options_prep ()
+{
+ $debug_cmd
+
+ # Option defaults:
+ opt_verbose=false
+ opt_warning_types=
+
+ func_run_hooks func_options_prep ${1+"$@"}
+
+ # save modified positional parameters for caller
+ func_options_prep_result=$func_run_hooks_result
+}
+
+
+# func_parse_options [ARG]...
+# ---------------------------
+# The main option parsing loop.
+func_hookable func_parse_options
+func_parse_options ()
+{
+ $debug_cmd
+
+ func_parse_options_result=
+
+ # this just eases exit handling
+ while test $# -gt 0; do
+ # Defer to hook functions for initial option parsing, so they
+ # get priority in the event of reusing an option name.
+ func_run_hooks func_parse_options ${1+"$@"}
+
+ # Adjust func_parse_options positional parameters to match
+ eval set dummy "$func_run_hooks_result"; shift
+
+ # Break out of the loop if we already parsed every option.
+ test $# -gt 0 || break
+
+ _G_opt=$1
+ shift
+ case $_G_opt in
+ --debug|-x) debug_cmd='set -x'
+ func_echo "enabling shell trace mode"
+ $debug_cmd
+ ;;
+
+ --no-warnings|--no-warning|--no-warn)
+ set dummy --warnings none ${1+"$@"}
+ shift
+ ;;
+
+ --warnings|--warning|-W)
+ test $# = 0 && func_missing_arg $_G_opt && break
+ case " $warning_categories $1" in
+ *" $1 "*)
+ # trailing space prevents matching last $1 above
+ func_append_uniq opt_warning_types " $1"
+ ;;
+ *all)
+ opt_warning_types=$warning_categories
+ ;;
+ *none)
+ opt_warning_types=none
+ warning_func=:
+ ;;
+ *error)
+ opt_warning_types=$warning_categories
+ warning_func=func_fatal_error
+ ;;
+ *)
+ func_fatal_error \
+ "unsupported warning category: '$1'"
+ ;;
+ esac
+ shift
+ ;;
+
+ --verbose|-v) opt_verbose=: ;;
+ --version) func_version ;;
+ -\?|-h) func_usage ;;
+ --help) func_help ;;
+
+ # Separate optargs to long options (plugins may need this):
+ --*=*) func_split_equals "$_G_opt"
+ set dummy "$func_split_equals_lhs" \
+ "$func_split_equals_rhs" ${1+"$@"}
+ shift
+ ;;
+
+ # Separate optargs to short options:
+ -W*)
+ func_split_short_opt "$_G_opt"
+ set dummy "$func_split_short_opt_name" \
+ "$func_split_short_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+ # Separate non-argument short options:
+ -\?*|-h*|-v*|-x*)
+ func_split_short_opt "$_G_opt"
+ set dummy "$func_split_short_opt_name" \
+ "-$func_split_short_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+ --) break ;;
+ -*) func_fatal_help "unrecognised option: '$_G_opt'" ;;
+ *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+ esac
+ done
+
+ # save modified positional parameters for caller
+ func_quote_for_eval ${1+"$@"}
+ func_parse_options_result=$func_quote_for_eval_result
+}
+
+
+# func_validate_options [ARG]...
+# ------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+func_hookable func_validate_options
+func_validate_options ()
+{
+ $debug_cmd
+
+ # Display all warnings if -W was not given.
+ test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
+
+ func_run_hooks func_validate_options ${1+"$@"}
+
+ # Bail if the options were screwed!
+ $exit_cmd $EXIT_FAILURE
+
+ # save modified positional parameters for caller
+ func_validate_options_result=$func_run_hooks_result
+}
+
+
+
+## ----------------- ##
+## Helper functions. ##
+## ----------------- ##
+
+# This section contains the helper functions used by the rest of the
+# hookable option parser framework in ascii-betical order.
+
+
+# func_fatal_help ARG...
+# ----------------------
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+ $debug_cmd
+
+ eval \$ECHO \""Usage: $usage"\"
+ eval \$ECHO \""$fatal_help"\"
+ func_error ${1+"$@"}
+ exit $EXIT_FAILURE
+}
+
+
+# func_help
+# ---------
+# Echo long help message to standard output and exit.
+func_help ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "$long_help_message"
+ exit 0
+}
+
+
+# func_missing_arg ARGNAME
+# ------------------------
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+ $debug_cmd
+
+ func_error "Missing argument for '$1'."
+ exit_cmd=exit
+}
+
+
+# func_split_equals STRING
+# ------------------------
+# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
+# splitting STRING at the '=' sign.
+test -z "$_G_HAVE_XSI_OPS" \
+ && (eval 'x=a/b/c;
+ test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+ && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_split_equals ()
+ {
+ $debug_cmd
+
+ func_split_equals_lhs=${1%%=*}
+ func_split_equals_rhs=${1#*=}
+ test "x$func_split_equals_lhs" = "x$1" \
+ && func_split_equals_rhs=
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_split_equals ()
+ {
+ $debug_cmd
+
+ func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
+ func_split_equals_rhs=
+ test "x$func_split_equals_lhs" = "x$1" \
+ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
+ }
+fi #func_split_equals
+
+
+# func_split_short_opt SHORTOPT
+# -----------------------------
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_split_short_opt ()
+ {
+ $debug_cmd
+
+ func_split_short_opt_arg=${1#??}
+ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_split_short_opt ()
+ {
+ $debug_cmd
+
+ func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
+ func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
+ }
+fi #func_split_short_opt
+
+
+# func_usage
+# ----------
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
+ exit 0
+}
+
+
+# func_usage_message
+# ------------------
+# Echo short help message to standard output.
+func_usage_message ()
+{
+ $debug_cmd
+
+ eval \$ECHO \""Usage: $usage"\"
+ echo
+ $SED -n 's|^# ||
+ /^Written by/{
+ x;p;x
+ }
+ h
+ /^Written by/q' < "$progpath"
+ echo
+ eval \$ECHO \""$usage_message"\"
+}
+
+
+# func_version
+# ------------
+# Echo version message to standard output and exit.
+func_version ()
+{
+ $debug_cmd
+
+ printf '%s\n' "$progname $scriptversion"
+ $SED -n '
+ /(C)/!b go
+ :more
+ /\./!{
+ N
+ s|\n# | |
+ b more
+ }
+ :go
+ /^# Written by /,/# warranty; / {
+ s|^# ||
+ s|^# *$||
+ s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+ p
+ }
+ /^# Written by / {
+ s|^# ||
+ p
+ }
+ /^warranty; /q' < "$progpath"
+
+ exit $?
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+
+# Set a version string.
+scriptversion='(GNU libtool) 2.4.6'
+
+
+# func_echo ARG...
+# ----------------
+# Libtool also displays the current mode in messages, so override
+# funclib.sh func_echo with this custom definition.
+func_echo ()
+{
+ $debug_cmd
+
+ _G_message=$*
+
+ func_echo_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_IFS
+ $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
+ done
+ IFS=$func_echo_IFS
+}
+
+
+# func_warning ARG...
+# -------------------
+# Libtool warnings are not categorized, so override funclib.sh
+# func_warning with this simpler definition.
+func_warning ()
+{
+ $debug_cmd
+
+ $warning_func ${1+"$@"}
+}
+
+
+## ---------------- ##
+## Options parsing. ##
+## ---------------- ##
+
+# Hook in the functions to make sure our own options are parsed during
+# the option parsing loop.
+
+usage='$progpath [OPTION]... [MODE-ARG]...'
+
+# Short help message in response to '-h'.
+usage_message="Options:
+ --config show all configuration variables
+ --debug enable verbose shell tracing
+ -n, --dry-run display commands without modifying any files
+ --features display basic configuration information and exit
+ --mode=MODE use operation mode MODE
+ --no-warnings equivalent to '-Wnone'
+ --preserve-dup-deps don't remove duplicate dependency libraries
+ --quiet, --silent don't print informational messages
+ --tag=TAG use configuration variables from tag TAG
+ -v, --verbose print more informational messages than default
+ --version print version information
+ -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all]
+ -h, --help, --help-all print short, long, or detailed help message
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+func_help ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "$long_help_message
+
+MODE must be one of the following:
+
+ clean remove files from the build directory
+ compile compile a source file into a libtool object
+ execute automatically set library path, then run a program
+ finish complete the installation of libtool libraries
+ install install libraries or executables
+ link create a library or an executable
+ uninstall remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE. When passed as first option,
+'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
+Try '$progname --help --mode=MODE' for a more detailed description of MODE.
+
+When reporting a bug, please describe a test case to reproduce it and
+include the following information:
+
+ host-triplet: $host
+ shell: $SHELL
+ compiler: $LTCC
+ compiler flags: $LTCFLAGS
+ linker: $LD (gnu? $with_gnu_ld)
+ version: $progname $scriptversion Debian-2.4.6-2
+ automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
+ autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
+
+Report bugs to <bug-libtool@gnu.org>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
+ exit 0
+}
+
+
+# func_lo2o OBJECT-NAME
+# ---------------------
+# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
+# object suffix.
+
+lo2o=s/\\.lo\$/.$objext/
+o2lo=s/\\.$objext\$/.lo/
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_lo2o ()
+ {
+ case $1 in
+ *.lo) func_lo2o_result=${1%.lo}.$objext ;;
+ * ) func_lo2o_result=$1 ;;
+ esac
+ }'
+
+ # func_xform LIBOBJ-OR-SOURCE
+ # ---------------------------
+ # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
+ # suffix to a '.lo' libtool-object suffix.
+ eval 'func_xform ()
+ {
+ func_xform_result=${1%.*}.lo
+ }'
+else
+ # ...otherwise fall back to using sed.
+ func_lo2o ()
+ {
+ func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
+ }
+
+ func_xform ()
+ {
+ func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
+ }
+fi
+
+
+# func_fatal_configuration ARG...
+# -------------------------------
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+ func__fatal_error ${1+"$@"} \
+ "See the $PACKAGE documentation for more information." \
+ "Fatal configuration error."
+}
+
+
+# func_config
+# -----------
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+ re_begincf='^# ### BEGIN LIBTOOL'
+ re_endcf='^# ### END LIBTOOL'
+
+ # Default configuration.
+ $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+ done
+
+ exit $?
+}
+
+
+# func_features
+# -------------
+# Display the features supported by this script.
+func_features ()
+{
+ echo "host: $host"
+ if test yes = "$build_libtool_libs"; then
+ echo "enable shared libraries"
+ else
+ echo "disable shared libraries"
+ fi
+ if test yes = "$build_old_libs"; then
+ echo "enable static libraries"
+ else
+ echo "disable static libraries"
+ fi
+
+ exit $?
+}
+
+
+# func_enable_tag TAGNAME
+# -----------------------
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+ # Global variable:
+ tagname=$1
+
+ re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+ re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+ sed_extractcf=/$re_begincf/,/$re_endcf/p
+
+ # Validate tagname.
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ func_fatal_error "invalid tag name: $tagname"
+ ;;
+ esac
+
+ # Don't test for the "default" C tag, as we know it's
+ # there but not specially marked.
+ case $tagname in
+ CC) ;;
+ *)
+ if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+ taglist="$taglist $tagname"
+
+ # Evaluate the configuration. Be careful to quote the path
+ # and the sed script, to avoid splitting on whitespace, but
+ # also don't use non-portable quotes within backquotes within
+ # quotes we have to do it in 2 steps:
+ extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+ eval "$extractedcf"
+ else
+ func_error "ignoring unknown tag $tagname"
+ fi
+ ;;
+ esac
+}
+
+
+# func_check_version_match
+# ------------------------
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+ if test "$package_revision" != "$macro_revision"; then
+ if test "$VERSION" != "$macro_version"; then
+ if test -z "$macro_version"; then
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ fi
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+ fi
+
+ exit $EXIT_MISMATCH
+ fi
+}
+
+
+# libtool_options_prep [ARG]...
+# -----------------------------
+# Preparation for options parsed by libtool.
+libtool_options_prep ()
+{
+ $debug_mode
+
+ # Option defaults:
+ opt_config=false
+ opt_dlopen=
+ opt_dry_run=false
+ opt_help=false
+ opt_mode=
+ opt_preserve_dup_deps=false
+ opt_quiet=false
+
+ nonopt=
+ preserve_args=
+
+ # Shorthand for --mode=foo, only valid as the first argument
+ case $1 in
+ clean|clea|cle|cl)
+ shift; set dummy --mode clean ${1+"$@"}; shift
+ ;;
+ compile|compil|compi|comp|com|co|c)
+ shift; set dummy --mode compile ${1+"$@"}; shift
+ ;;
+ execute|execut|execu|exec|exe|ex|e)
+ shift; set dummy --mode execute ${1+"$@"}; shift
+ ;;
+ finish|finis|fini|fin|fi|f)
+ shift; set dummy --mode finish ${1+"$@"}; shift
+ ;;
+ install|instal|insta|inst|ins|in|i)
+ shift; set dummy --mode install ${1+"$@"}; shift
+ ;;
+ link|lin|li|l)
+ shift; set dummy --mode link ${1+"$@"}; shift
+ ;;
+ uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+ shift; set dummy --mode uninstall ${1+"$@"}; shift
+ ;;
+ esac
+
+ # Pass back the list of options.
+ func_quote_for_eval ${1+"$@"}
+ libtool_options_prep_result=$func_quote_for_eval_result
+}
+func_add_hook func_options_prep libtool_options_prep
+
+
+# libtool_parse_options [ARG]...
+# ---------------------------------
+# Provide handling for libtool specific options.
+libtool_parse_options ()
+{
+ $debug_cmd
+
+ # Perform our own loop to consume as many options as possible in
+ # each iteration.
+ while test $# -gt 0; do
+ _G_opt=$1
+ shift
+ case $_G_opt in
+ --dry-run|--dryrun|-n)
+ opt_dry_run=:
+ ;;
+
+ --config) func_config ;;
+
+ --dlopen|-dlopen)
+ opt_dlopen="${opt_dlopen+$opt_dlopen
+}$1"
+ shift
+ ;;
+
+ --preserve-dup-deps)
+ opt_preserve_dup_deps=: ;;
+
+ --features) func_features ;;
+
+ --finish) set dummy --mode finish ${1+"$@"}; shift ;;
+
+ --help) opt_help=: ;;
+
+ --help-all) opt_help=': help-all' ;;
+
+ --mode) test $# = 0 && func_missing_arg $_G_opt && break
+ opt_mode=$1
+ case $1 in
+ # Valid mode arguments:
+ clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+ # Catch anything else as an error
+ *) func_error "invalid argument for $_G_opt"
+ exit_cmd=exit
+ break
+ ;;
+ esac
+ shift
+ ;;
+
+ --no-silent|--no-quiet)
+ opt_quiet=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --no-warnings|--no-warning|--no-warn)
+ opt_warning=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --no-verbose)
+ opt_verbose=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --silent|--quiet)
+ opt_quiet=:
+ opt_verbose=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --tag) test $# = 0 && func_missing_arg $_G_opt && break
+ opt_tag=$1
+ func_append preserve_args " $_G_opt $1"
+ func_enable_tag "$1"
+ shift
+ ;;
+
+ --verbose|-v) opt_quiet=false
+ opt_verbose=:
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ # An option not handled by this hook function:
+ *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+ esac
+ done
+
+
+ # save modified positional parameters for caller
+ func_quote_for_eval ${1+"$@"}
+ libtool_parse_options_result=$func_quote_for_eval_result
+}
+func_add_hook func_parse_options libtool_parse_options
+
+
+
+# libtool_validate_options [ARG]...
+# ---------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+libtool_validate_options ()
+{
+ # save first non-option argument
+ if test 0 -lt $#; then
+ nonopt=$1
+ shift
+ fi
+
+ # preserve --debug
+ test : = "$debug_cmd" || func_append preserve_args " --debug"
+
+ case $host in
+ # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
+ # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
+ *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
+ # don't eliminate duplications in $postdeps and $predeps
+ opt_duplicate_compiler_generated_deps=:
+ ;;
+ *)
+ opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+ ;;
+ esac
+
+ $opt_help || {
+ # Sanity checks first:
+ func_check_version_match
+
+ test yes != "$build_libtool_libs" \
+ && test yes != "$build_old_libs" \
+ && func_fatal_configuration "not configured to build any kind of library"
+
+ # Darwin sucks
+ eval std_shrext=\"$shrext_cmds\"
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
+ func_error "unrecognized option '-dlopen'"
+ $ECHO "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help=$help
+ help="Try '$progname --help --mode=$opt_mode' for more information."
+ }
+
+ # Pass back the unparsed argument list
+ func_quote_for_eval ${1+"$@"}
+ libtool_validate_options_result=$func_quote_for_eval_result
+}
+func_add_hook func_validate_options libtool_validate_options
+
+
+# Process options as early as possible so that --help and --version
+# can return quickly.
+func_options ${1+"$@"}
+eval set dummy "$func_options_result"; shift
+
+
+
+## ----------- ##
+## Main. ##
+## ----------- ##
+
+magic='%%%MAGIC variable%%%'
+magic_exe='%%%MAGIC EXE variable%%%'
+
+# Global variables.
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# func_generated_by_libtool
+# True iff stdin has been generated by Libtool. This function is only
+# a basic sanity check; it will hardly flush out determined imposters.
+func_generated_by_libtool_p ()
+{
+ $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+ test -f "$1" &&
+ $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs. To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway. Works if 'file' does not exist.
+func_lalib_unsafe_p ()
+{
+ lalib_p=no
+ if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+ for lalib_p_l in 1 2 3 4
+ do
+ read lalib_p_line
+ case $lalib_p_line in
+ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+ esac
+ done
+ exec 0<&5 5<&-
+ fi
+ test yes = "$lalib_p"
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+ test -f "$1" &&
+ $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+ func_ltwrapper_exec_suffix=
+ case $1 in
+ *.exe) ;;
+ *) func_ltwrapper_exec_suffix=.exe ;;
+ esac
+ $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+ func_dirname_and_basename "$1" "" "."
+ func_stripname '' '.exe' "$func_basename_result"
+ func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+ func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+ $debug_cmd
+
+ save_ifs=$IFS; IFS='~'
+ for cmd in $1; do
+ IFS=$sp$nl
+ eval cmd=\"$cmd\"
+ IFS=$save_ifs
+ func_show_eval "$cmd" "${2-:}"
+ done
+ IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)! Also, sourcing
+# 'FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+ $debug_cmd
+
+ case $1 in
+ */* | *\\*) . "$1" ;;
+ *) . "./$1" ;;
+ esac
+}
+
+
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot. Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+ func_resolve_sysroot_result=$1
+ case $func_resolve_sysroot_result in
+ =*)
+ func_stripname '=' '' "$func_resolve_sysroot_result"
+ func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+ ;;
+ esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+ case $lt_sysroot:$1 in
+ ?*:"$lt_sysroot"*)
+ func_stripname "$lt_sysroot" '' "$1"
+ func_replace_sysroot_result='='$func_stripname_result
+ ;;
+ *)
+ # Including no sysroot.
+ func_replace_sysroot_result=$1
+ ;;
+ esac
+}
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+ $debug_cmd
+
+ if test -n "$available_tags" && test -z "$tagname"; then
+ CC_quoted=
+ for arg in $CC; do
+ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+ case $@ in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+ CC_quoted=
+ for arg in $CC; do
+ # Double-quote args containing other shell metacharacters.
+ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+ case "$@ " in
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ func_echo "unable to infer tagged configuration"
+ func_fatal_error "specify a tag with '--tag'"
+# else
+# func_verbose "using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+ write_libobj=$1
+ if test yes = "$build_libtool_libs"; then
+ write_lobj=\'$2\'
+ else
+ write_lobj=none
+ fi
+
+ if test yes = "$build_old_libs"; then
+ write_oldobj=\'$3\'
+ else
+ write_oldobj=none
+ fi
+
+ $opt_dry_run || {
+ cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+ $MV "${write_libobj}T" "$write_libobj"
+ }
+}
+
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+ $debug_cmd
+
+ func_convert_core_file_wine_to_w32_result=$1
+ if test -n "$1"; then
+ # Unfortunately, winepath does not exit with a non-zero error code, so we
+ # are forced to check the contents of stdout. On the other hand, if the
+ # command is not found, the shell will set an exit code of 127 and print
+ # *an error message* to stdout. So we must check for both error code of
+ # zero AND non-empty stdout, which explains the odd construction:
+ func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+ if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
+ func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+ $SED -e "$sed_naive_backslashify"`
+ else
+ func_convert_core_file_wine_to_w32_result=
+ fi
+ fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+ $debug_cmd
+
+ # unfortunately, winepath doesn't convert paths, only file names
+ func_convert_core_path_wine_to_w32_result=
+ if test -n "$1"; then
+ oldIFS=$IFS
+ IFS=:
+ for func_convert_core_path_wine_to_w32_f in $1; do
+ IFS=$oldIFS
+ func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+ if test -n "$func_convert_core_file_wine_to_w32_result"; then
+ if test -z "$func_convert_core_path_wine_to_w32_result"; then
+ func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
+ else
+ func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+ fi
+ fi
+ done
+ IFS=$oldIFS
+ fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+ $debug_cmd
+
+ if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+ func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+ if test "$?" -ne 0; then
+ # on failure, ensure result is empty
+ func_cygpath_result=
+ fi
+ else
+ func_cygpath_result=
+ func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
+ fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format. Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+ $debug_cmd
+
+ # awkward: cmd appends spaces to result
+ func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+ $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+ $debug_cmd
+
+ if test -z "$2" && test -n "$1"; then
+ func_error "Could not determine host file name corresponding to"
+ func_error " '$1'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback:
+ func_to_host_file_result=$1
+ fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+ $debug_cmd
+
+ if test -z "$4" && test -n "$3"; then
+ func_error "Could not determine the host path corresponding to"
+ func_error " '$3'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback. This is a deliberately simplistic "conversion" and
+ # should not be "improved". See libtool.info.
+ if test "x$1" != "x$2"; then
+ lt_replace_pathsep_chars="s|$1|$2|g"
+ func_to_host_path_result=`echo "$3" |
+ $SED -e "$lt_replace_pathsep_chars"`
+ else
+ func_to_host_path_result=$3
+ fi
+ fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+ $debug_cmd
+
+ case $4 in
+ $1 ) func_to_host_path_result=$3$func_to_host_path_result
+ ;;
+ esac
+ case $4 in
+ $2 ) func_append func_to_host_path_result "$3"
+ ;;
+ esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via '$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+ $debug_cmd
+
+ $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result. If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+ $debug_cmd
+
+ case ,$2, in
+ *,"$to_tool_file_cmd",*)
+ func_to_tool_file_result=$1
+ ;;
+ *)
+ $to_tool_file_cmd "$1"
+ func_to_tool_file_result=$func_to_host_file_result
+ ;;
+ esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+ func_to_host_file_result=$1
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper. Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_msys_to_w32 "$1"
+ func_to_host_file_result=$func_convert_core_msys_to_w32_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format. Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+ # LT_CYGPATH in this case.
+ func_to_host_file_result=`cygpath -m "$1"`
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format. Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_file_wine_to_w32 "$1"
+ func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_msys_to_w32 "$1"
+ func_cygpath -u "$func_convert_core_msys_to_w32_result"
+ func_to_host_file_result=$func_cygpath_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set. Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+ func_convert_core_file_wine_to_w32 "$1"
+ func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+ func_to_host_file_result=$func_cygpath_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via '$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format. If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+# file name conversion function : func_convert_file_X_to_Y ()
+# path conversion function : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same. If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+ $debug_cmd
+
+ if test -z "$to_host_path_cmd"; then
+ func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+ to_host_path_cmd=func_convert_path_$func_stripname_result
+ fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+ $debug_cmd
+
+ func_init_to_host_path_cmd
+ $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+ func_to_host_path_result=$1
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper. Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # Remove leading and trailing path separator characters from ARG. MSYS
+ # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+ # and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+ func_to_host_path_result=$func_convert_core_msys_to_w32_result
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format. Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format. Requires a wine environment and
+# a working winepath. Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+ func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+ func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+ func_to_host_path_result=$func_cygpath_result
+ func_convert_path_check : : \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+ fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set. Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # Remove leading and trailing path separator characters from
+ # ARG. msys behavior is inconsistent here, cygpath turns them
+ # into '.;' and ';.', and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+ func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+ func_to_host_path_result=$func_cygpath_result
+ func_convert_path_check : : \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+ fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
+# func_dll_def_p FILE
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with _LT_DLL_DEF_P in libtool.m4
+func_dll_def_p ()
+{
+ $debug_cmd
+
+ func_dll_def_p_tmp=`$SED -n \
+ -e 's/^[ ]*//' \
+ -e '/^\(;.*\)*$/d' \
+ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \
+ -e q \
+ "$1"`
+ test DEF = "$func_dll_def_p_tmp"
+}
+
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+ $debug_cmd
+
+ # Get the compilation command and the source file.
+ base_compile=
+ srcfile=$nonopt # always keep a non-empty value in "srcfile"
+ suppress_opt=yes
+ suppress_output=
+ arg_mode=normal
+ libobj=
+ later=
+ pie_flag=
+
+ for arg
+ do
+ case $arg_mode in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg=$arg
+ arg_mode=normal
+ ;;
+
+ target )
+ libobj=$arg
+ arg_mode=normal
+ continue
+ ;;
+
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ test -n "$libobj" && \
+ func_fatal_error "you cannot specify '-o' more than once"
+ arg_mode=target
+ continue
+ ;;
+
+ -pie | -fpie | -fPIE)
+ func_append pie_flag " $arg"
+ continue
+ ;;
+
+ -shared | -static | -prefer-pic | -prefer-non-pic)
+ func_append later " $arg"
+ continue
+ ;;
+
+ -no-suppress)
+ suppress_opt=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ lastarg=
+ save_ifs=$IFS; IFS=,
+ for arg in $args; do
+ IFS=$save_ifs
+ func_append_quoted lastarg "$arg"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$lastarg"
+ lastarg=$func_stripname_result
+
+ # Add the arguments to base_compile.
+ func_append base_compile " $lastarg"
+ continue
+ ;;
+
+ *)
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg=$srcfile
+ srcfile=$arg
+ ;;
+ esac # case $arg
+ ;;
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
+ func_append_quoted base_compile "$lastarg"
+ done # for arg
+
+ case $arg_mode in
+ arg)
+ func_fatal_error "you must specify an argument for -Xcompile"
+ ;;
+ target)
+ func_fatal_error "you must specify a target with '-o'"
+ ;;
+ *)
+ # Get the name of the library object.
+ test -z "$libobj" && {
+ func_basename "$srcfile"
+ libobj=$func_basename_result
+ }
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ case $libobj in
+ *.[cCFSifmso] | \
+ *.ada | *.adb | *.ads | *.asm | \
+ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
+ func_xform "$libobj"
+ libobj=$func_xform_result
+ ;;
+ esac
+
+ case $libobj in
+ *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+ *)
+ func_fatal_error "cannot determine name of library object from '$libobj'"
+ ;;
+ esac
+
+ func_infer_tag $base_compile
+
+ for arg in $later; do
+ case $arg in
+ -shared)
+ test yes = "$build_libtool_libs" \
+ || func_fatal_configuration "cannot build a shared library"
+ build_old_libs=no
+ continue
+ ;;
+
+ -static)
+ build_libtool_libs=no
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+ esac
+ done
+
+ func_quote_for_eval "$libobj"
+ test "X$libobj" != "X$func_quote_for_eval_result" \
+ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
+ && func_warning "libobj name '$libobj' may not contain shell special characters."
+ func_dirname_and_basename "$obj" "/" ""
+ objname=$func_basename_result
+ xdir=$func_dirname_result
+ lobj=$xdir$objdir/$objname
+
+ test -z "$base_compile" && \
+ func_fatal_help "you must specify a compilation command"
+
+ # Delete any leftover library objects.
+ if test yes = "$build_old_libs"; then
+ removelist="$obj $lobj $libobj ${libobj}T"
+ else
+ removelist="$lobj $libobj ${libobj}T"
+ fi
+
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2* | cegcc*)
+ pic_mode=default
+ ;;
+ esac
+ if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
+ # Calculate the filename of the output object if compiler does
+ # not support -o with -c
+ if test no = "$compiler_c_o"; then
+ output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
+ lockfile=$output_obj.lock
+ else
+ output_obj=
+ need_locks=no
+ lockfile=
+ fi
+
+ # Lock this critical section if it is needed
+ # We use this script file to make the link, it avoids creating a new file
+ if test yes = "$need_locks"; then
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ elif test warn = "$need_locks"; then
+ if test -f "$lockfile"; then
+ $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+ func_append removelist " $output_obj"
+ $ECHO "$srcfile" > "$lockfile"
+ fi
+
+ $opt_dry_run || $RM $removelist
+ func_append removelist " $lockfile"
+ trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+ func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+ srcfile=$func_to_tool_file_result
+ func_quote_for_eval "$srcfile"
+ qsrcfile=$func_quote_for_eval_result
+
+ # Only build a PIC object if we are building libtool libraries.
+ if test yes = "$build_libtool_libs"; then
+ # Without this assignment, base_compile gets emptied.
+ fbsd_hideous_sh_bug=$base_compile
+
+ if test no != "$pic_mode"; then
+ command="$base_compile $qsrcfile $pic_flag"
+ else
+ # Don't build PIC code
+ command="$base_compile $qsrcfile"
+ fi
+
+ func_mkdir_p "$xdir$objdir"
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ func_append command " -o $lobj"
+ fi
+
+ func_show_eval_locale "$command" \
+ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+ if test warn = "$need_locks" &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed, then go on to compile the next one
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ func_show_eval '$MV "$output_obj" "$lobj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+
+ # Allow error messages only from the first compilation.
+ if test yes = "$suppress_opt"; then
+ suppress_output=' >/dev/null 2>&1'
+ fi
+ fi
+
+ # Only build a position-dependent object if we build old libraries.
+ if test yes = "$build_old_libs"; then
+ if test yes != "$pic_mode"; then
+ # Don't build PIC code
+ command="$base_compile $qsrcfile$pie_flag"
+ else
+ command="$base_compile $qsrcfile $pic_flag"
+ fi
+ if test yes = "$compiler_c_o"; then
+ func_append command " -o $obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+ func_append command "$suppress_output"
+ func_show_eval_locale "$command" \
+ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+ if test warn = "$need_locks" &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+ func_show_eval '$MV "$output_obj" "$obj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+ fi
+
+ $opt_dry_run || {
+ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+ # Unlock the critical section if it was locked
+ if test no != "$need_locks"; then
+ removelist=$lockfile
+ $RM "$lockfile"
+ fi
+ }
+
+ exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+ test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+ # We need to display help for each of the modes.
+ case $opt_mode in
+ "")
+ # Generic help is extracted from the usage comments
+ # at the start of this file.
+ func_help
+ ;;
+
+ clean)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ compile)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -no-suppress do not suppress compiler output for multiple passes
+ -prefer-pic try to build PIC objects only
+ -prefer-non-pic try to build non-PIC objects only
+ -shared do not build a '.o' file suitable for static linking
+ -static only build a '.o' file suitable for static linking
+ -Wc,FLAG pass FLAG directly to the compiler
+
+COMPILE-COMMAND is a command to be used in creating a 'standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix '.c' with the
+library object suffix, '.lo'."
+ ;;
+
+ execute)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to '-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+ finish)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the '--dry-run' option if you just want to see what would be executed."
+ ;;
+
+ install)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the 'install' or 'cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+ -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+ link)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -bindir BINDIR specify path to binaries directory (for systems where
+ libraries must be found in the PATH setting at runtime)
+ -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE use a list of object files found in FILE to specify objects
+ -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes)
+ -precious-files-regex REGEX
+ don't remove output files matching REGEX
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -shared only do dynamic linking of libtool libraries
+ -shrext SUFFIX override the standard shared library file extension
+ -static do not do any dynamic linking of uninstalled libtool libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+ -weak LIBNAME declare that the target provides the LIBNAME interface
+ -Wc,FLAG
+ -Xcompiler FLAG pass linker-specific FLAG directly to the compiler
+ -Wl,FLAG
+ -Xlinker FLAG pass linker-specific FLAG directly to the linker
+ -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
+
+All other options (arguments beginning with '-') are ignored.
+
+Every other argument is treated as a filename. Files ending in '.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in '.la', then a libtool library is created,
+only library objects ('.lo' files) may be specified, and '-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
+using 'ar' and 'ranlib', or on Windows using 'lib'.
+
+If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+ uninstall)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ *)
+ func_fatal_help "invalid operation mode '$opt_mode'"
+ ;;
+ esac
+
+ echo
+ $ECHO "Try '$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+ if test : = "$opt_help"; then
+ func_mode_help
+ else
+ {
+ func_help noexit
+ for opt_mode in compile link execute install finish uninstall clean; do
+ func_mode_help
+ done
+ } | $SED -n '1p; 2,$s/^Usage:/ or: /p'
+ {
+ func_help noexit
+ for opt_mode in compile link execute install finish uninstall clean; do
+ echo
+ func_mode_help
+ done
+ } |
+ $SED '1d
+ /^When reporting/,/^Report/{
+ H
+ d
+ }
+ $x
+ /information about other modes/d
+ /more detailed .*MODE/d
+ s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+ fi
+ exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+ $debug_cmd
+
+ # The first argument is the command name.
+ cmd=$nonopt
+ test -z "$cmd" && \
+ func_fatal_help "you must specify a COMMAND"
+
+ # Handle -dlopen flags immediately.
+ for file in $opt_dlopen; do
+ test -f "$file" \
+ || func_fatal_help "'$file' is not a file"
+
+ dir=
+ case $file in
+ *.la)
+ func_resolve_sysroot "$file"
+ file=$func_resolve_sysroot_result
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "'$lib' is not a valid libtool archive"
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+ func_source "$file"
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && \
+ func_warning "'$file' was not linked with '-export-dynamic'"
+ continue
+ fi
+
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+
+ if test -f "$dir/$objdir/$dlname"; then
+ func_append dir "/$objdir"
+ else
+ if test ! -f "$dir/$dlname"; then
+ func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
+ fi
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+ ;;
+
+ *)
+ func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir=$absdir
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic=$magic
+
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -* | *.la | *.lo ) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if func_ltwrapper_script_p "$file"; then
+ func_source "$file"
+ # Transform arg to wrapped name.
+ file=$progdir/$program
+ elif func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ func_source "$func_ltwrapper_scriptname_result"
+ # Transform arg to wrapped name.
+ file=$progdir/$program
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ func_append_quoted args "$file"
+ done
+
+ if $opt_dry_run; then
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+ echo "export $shlibpath_var"
+ fi
+ $ECHO "$cmd$args"
+ exit $EXIT_SUCCESS
+ else
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+ do
+ eval "if test \"\${save_$lt_var+set}\" = set; then
+ $lt_var=\$save_$lt_var; export $lt_var
+ else
+ $lt_unset $lt_var
+ fi"
+ done
+
+ # Now prepare to actually exec the command.
+ exec_cmd=\$cmd$args
+ fi
+}
+
+test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+ $debug_cmd
+
+ libs=
+ libdirs=
+ admincmds=
+
+ for opt in "$nonopt" ${1+"$@"}
+ do
+ if test -d "$opt"; then
+ func_append libdirs " $opt"
+
+ elif test -f "$opt"; then
+ if func_lalib_unsafe_p "$opt"; then
+ func_append libs " $opt"
+ else
+ func_warning "'$opt' is not a valid libtool archive"
+ fi
+
+ else
+ func_fatal_error "invalid argument '$opt'"
+ fi
+ done
+
+ if test -n "$libs"; then
+ if test -n "$lt_sysroot"; then
+ sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+ sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+ else
+ sysroot_cmd=
+ fi
+
+ # Remove sysroot references
+ if $opt_dry_run; then
+ for lib in $libs; do
+ echo "removing references to $lt_sysroot and '=' prefixes from $lib"
+ done
+ else
+ tmpdir=`func_mktempdir`
+ for lib in $libs; do
+ $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+ > $tmpdir/tmp-la
+ mv -f $tmpdir/tmp-la $lib
+ done
+ ${RM}r "$tmpdir"
+ fi
+ fi
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $opt_dry_run || eval "$cmds" || func_append admincmds "
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ $opt_quiet && exit $EXIT_SUCCESS
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ echo "----------------------------------------------------------------------"
+ echo "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $ECHO " $libdir"
+ done
+ echo
+ echo "If you ever happen to want to link against installed libraries"
+ echo "in a given directory, LIBDIR, you must either use libtool, and"
+ echo "specify the full pathname of the library, or use the '-LLIBDIR'"
+ echo "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ echo " - add LIBDIR to the '$shlibpath_var' environment variable"
+ echo " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ echo " - add LIBDIR to the '$runpath_var' environment variable"
+ echo " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $ECHO " - use the '$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $ECHO " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
+ fi
+ echo
+
+ echo "See any operating system documentation about shared libraries for"
+ case $host in
+ solaris2.[6789]|solaris2.1[0-9])
+ echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+ echo "pages."
+ ;;
+ *)
+ echo "more information, such as the ld(1) and ld.so(8) manual pages."
+ ;;
+ esac
+ echo "----------------------------------------------------------------------"
+ fi
+ exit $EXIT_SUCCESS
+}
+
+test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+ $debug_cmd
+
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
+ # Allow the use of GNU shtool's install command.
+ case $nonopt in *shtool*) :;; *) false;; esac
+ then
+ # Aesthetically quote it.
+ func_quote_for_eval "$nonopt"
+ install_prog="$func_quote_for_eval_result "
+ arg=$1
+ shift
+ else
+ install_prog=
+ arg=$nonopt
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ func_quote_for_eval "$arg"
+ func_append install_prog "$func_quote_for_eval_result"
+ install_shared_prog=$install_prog
+ case " $install_prog " in
+ *[\\\ /]cp\ *) install_cp=: ;;
+ *) install_cp=false ;;
+ esac
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=false
+ stripme=
+ no_mode=:
+ for arg
+ do
+ arg2=
+ if test -n "$dest"; then
+ func_append files " $dest"
+ dest=$arg
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=: ;;
+ -f)
+ if $install_cp; then :; else
+ prev=$arg
+ fi
+ ;;
+ -g | -m | -o)
+ prev=$arg
+ ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*)
+ ;;
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ if test X-m = "X$prev" && test -n "$install_override_mode"; then
+ arg2=$install_override_mode
+ no_mode=false
+ fi
+ prev=
+ else
+ dest=$arg
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ func_quote_for_eval "$arg"
+ func_append install_prog " $func_quote_for_eval_result"
+ if test -n "$arg2"; then
+ func_quote_for_eval "$arg2"
+ fi
+ func_append install_shared_prog " $func_quote_for_eval_result"
+ done
+
+ test -z "$install_prog" && \
+ func_fatal_help "you must specify an install program"
+
+ test -n "$prev" && \
+ func_fatal_help "the '$prev' option requires an argument"
+
+ if test -n "$install_override_mode" && $no_mode; then
+ if $install_cp; then :; else
+ func_quote_for_eval "$install_override_mode"
+ func_append install_shared_prog " -m $func_quote_for_eval_result"
+ fi
+ fi
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ func_fatal_help "no file or destination specified"
+ else
+ func_fatal_help "you must specify a destination"
+ fi
+ fi
+
+ # Strip any trailing slash from the destination.
+ func_stripname '' '/' "$dest"
+ dest=$func_stripname_result
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=:
+ if $isdir; then
+ destdir=$dest
+ destname=
+ else
+ func_dirname_and_basename "$dest" "" "."
+ destdir=$func_dirname_result
+ destname=$func_basename_result
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files; shift
+ test "$#" -gt 1 && \
+ func_fatal_help "'$dest' is not a directory"
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ func_fatal_help "'$destdir' must be an absolute directory name"
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic=$magic
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ func_append staticlibs " $file"
+ ;;
+
+ *.la)
+ func_resolve_sysroot "$file"
+ file=$func_resolve_sysroot_result
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "'$file' is not a valid libtool archive"
+
+ library_names=
+ old_library=
+ relink_command=
+ func_source "$file"
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) func_append current_libdirs " $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) func_append future_libdirs " $libdir" ;;
+ esac
+ fi
+
+ func_dirname "$file" "/" ""
+ dir=$func_dirname_result
+ func_append dir "$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ test "$inst_prefix_dir" = "$destdir" && \
+ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ fi
+
+ func_warning "relinking '$file'"
+ func_show_eval "$relink_command" \
+ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names; shift
+ if test -n "$1"; then
+ realname=$1
+ shift
+
+ srcname=$realname
+ test -n "$relink_command" && srcname=${realname}T
+
+ # Install the shared library and build the symlinks.
+ func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+ 'exit $?'
+ tstripme=$stripme
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $realname in
+ *.dll.a)
+ tstripme=
+ ;;
+ esac
+ ;;
+ os2*)
+ case $realname in
+ *_dll.a)
+ tstripme=
+ ;;
+ esac
+ ;;
+ esac
+ if test -n "$tstripme" && test -n "$striplib"; then
+ func_show_eval "$striplib $destdir/$realname" 'exit $?'
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ # Try 'ln -sf' first, because the 'ln' binary might depend on
+ # the symlink we replace! Solaris /bin/ln does not understand -f,
+ # so we also need to try rm && ln -s.
+ for linkname
+ do
+ test "$linkname" != "$realname" \
+ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib=$destdir/$realname
+ func_execute_cmds "$postinstall_cmds" 'exit $?'
+ fi
+
+ # Install the pseudo-library for information purposes.
+ func_basename "$file"
+ name=$func_basename_result
+ instname=$dir/${name}i
+ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile=$destdir/$destname
+ else
+ func_basename "$file"
+ destfile=$func_basename_result
+ destfile=$destdir/$destfile
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ func_lo2o "$destfile"
+ staticdest=$func_lo2o_result
+ ;;
+ *.$objext)
+ staticdest=$destfile
+ destfile=
+ ;;
+ *)
+ func_fatal_help "cannot copy a libtool object to '$destfile'"
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ test -n "$destfile" && \
+ func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+ # Install the old object if enabled.
+ if test yes = "$build_old_libs"; then
+ # Deduce the name of the old-style object file.
+ func_lo2o "$file"
+ staticobj=$func_lo2o_result
+ func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile=$destdir/$destname
+ else
+ func_basename "$file"
+ destfile=$func_basename_result
+ destfile=$destdir/$destfile
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ stripped_ext=.exe
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin* | *mingw*)
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ wrapper=$func_ltwrapper_scriptname_result
+ else
+ func_stripname '' '.exe' "$file"
+ wrapper=$func_stripname_result
+ fi
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if func_ltwrapper_script_p "$wrapper"; then
+ notinst_deplibs=
+ relink_command=
+
+ func_source "$wrapper"
+
+ # Check the variables that should have been set.
+ test -z "$generated_by_libtool_version" && \
+ func_fatal_error "invalid libtool wrapper script '$wrapper'"
+
+ finalize=:
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ func_source "$lib"
+ fi
+ libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ func_warning "'$lib' has not been installed in '$libdir'"
+ finalize=false
+ fi
+ done
+
+ relink_command=
+ func_source "$wrapper"
+
+ outputname=
+ if test no = "$fast_install" && test -n "$relink_command"; then
+ $opt_dry_run || {
+ if $finalize; then
+ tmpdir=`func_mktempdir`
+ func_basename "$file$stripped_ext"
+ file=$func_basename_result
+ outputname=$tmpdir/$file
+ # Replace the output file specification.
+ relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $opt_quiet || {
+ func_quote_for_expand "$relink_command"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ if eval "$relink_command"; then :
+ else
+ func_error "error: relink '$file' with the above command before installing it"
+ $opt_dry_run || ${RM}r "$tmpdir"
+ continue
+ fi
+ file=$outputname
+ else
+ func_warning "cannot relink '$file'"
+ fi
+ }
+ else
+ # Install the binary that we compiled earlier.
+ file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyway
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ func_stripname '' '.exe' "$destfile"
+ destfile=$func_stripname_result
+ ;;
+ esac
+ ;;
+ esac
+ func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+ $opt_dry_run || if test -n "$outputname"; then
+ ${RM}r "$tmpdir"
+ fi
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ func_basename "$file"
+ name=$func_basename_result
+
+ # Set up the ranlib parameters.
+ oldlib=$destdir/$name
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
+
+ func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
+ fi
+
+ # Do each command in the postinstall commands.
+ func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+ done
+
+ test -n "$future_libdirs" && \
+ func_warning "remember to run '$progname --finish$future_libdirs'"
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ $opt_dry_run && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
+ else
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test install = "$opt_mode" && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+ $debug_cmd
+
+ my_outputname=$1
+ my_originator=$2
+ my_pic_p=${3-false}
+ my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
+ my_dlsyms=
+
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ my_dlsyms=${my_outputname}S.c
+ else
+ func_error "not configured to extract global symbols from dlpreopened files"
+ fi
+ fi
+
+ if test -n "$my_dlsyms"; then
+ case $my_dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist=$output_objdir/$my_outputname.nm
+
+ func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+ # Parse the name list into a source file.
+ func_verbose "creating $output_objdir/$my_dlsyms"
+
+ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data. */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test yes = "$dlself"; then
+ func_verbose "generating symbol list for '$output'"
+
+ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ for progfile in $progfiles; do
+ func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+ func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
+ $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $opt_dry_run || {
+ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $opt_dry_run || {
+ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols=$output_objdir/$outputname.exp
+ $opt_dry_run || {
+ $RM $export_symbols
+ eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ else
+ $opt_dry_run || {
+ eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ fi
+ fi
+
+ for dlprefile in $dlprefiles; do
+ func_verbose "extracting global C symbols from '$dlprefile'"
+ func_basename "$dlprefile"
+ name=$func_basename_result
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ # if an import library, we need to obtain dlname
+ if func_win32_import_lib_p "$dlprefile"; then
+ func_tr_sh "$dlprefile"
+ eval "curr_lafile=\$libfile_$func_tr_sh_result"
+ dlprefile_dlbasename=
+ if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+ # Use subshell, to avoid clobbering current variable values
+ dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+ if test -n "$dlprefile_dlname"; then
+ func_basename "$dlprefile_dlname"
+ dlprefile_dlbasename=$func_basename_result
+ else
+ # no lafile. user explicitly requested -dlpreopen <import library>.
+ $sharedlib_from_linklib_cmd "$dlprefile"
+ dlprefile_dlbasename=$sharedlib_from_linklib_result
+ fi
+ fi
+ $opt_dry_run || {
+ if test -n "$dlprefile_dlbasename"; then
+ eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+ else
+ func_warning "Could not compute DLL name from $name"
+ eval '$ECHO ": $name " >> "$nlist"'
+ fi
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+ $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+ }
+ else # not an import lib
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ fi
+ ;;
+ *)
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ ;;
+ esac
+ done
+
+ $opt_dry_run || {
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $MV "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if $GREP -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ $GREP -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+ else
+ echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+ fi
+
+ func_show_eval '$RM "${nlist}I"'
+ if test -n "$global_symbol_to_import"; then
+ eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
+ fi
+
+ echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols. */
+typedef struct {
+ const char *name;
+ void *address;
+} lt_dlsymlist;
+extern LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];\
+"
+
+ if test -s "$nlist"I; then
+ echo >> "$output_objdir/$my_dlsyms" "\
+static void lt_syminit(void)
+{
+ LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
+ for (; symbol->name; ++symbol)
+ {"
+ $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
+ echo >> "$output_objdir/$my_dlsyms" "\
+ }
+}"
+ fi
+ echo >> "$output_objdir/$my_dlsyms" "\
+LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{ {\"$my_originator\", (void *) 0},"
+
+ if test -s "$nlist"I; then
+ echo >> "$output_objdir/$my_dlsyms" "\
+ {\"@INIT@\", (void *) &lt_syminit},"
+ fi
+
+ case $need_lib_prefix in
+ no)
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ *)
+ eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ esac
+ echo >> "$output_objdir/$my_dlsyms" "\
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ } # !$opt_dry_run
+
+ pic_flag_for_symtable=
+ case "$compile_command " in
+ *" -static "*) ;;
+ *)
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+ *-*-hpux*)
+ pic_flag_for_symtable=" $pic_flag" ;;
+ *)
+ $my_pic_p && pic_flag_for_symtable=" $pic_flag"
+ ;;
+ esac
+ ;;
+ esac
+ symtab_cflags=
+ for arg in $LTCFLAGS; do
+ case $arg in
+ -pie | -fpie | -fPIE) ;;
+ *) func_append symtab_cflags " $arg" ;;
+ esac
+ done
+
+ # Now compile the dynamic symbol file.
+ func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+ # Clean up the generated files.
+ func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
+
+ # Transform the symbol file into the correct name.
+ symfileobj=$output_objdir/${my_outputname}S.$objext
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ if test -f "$output_objdir/$my_outputname.def"; then
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ else
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ fi
+ ;;
+ *)
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ ;;
+ esac
+ ;;
+ *)
+ func_fatal_error "unknown suffix for '$my_dlsyms'"
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+ fi
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+ $debug_cmd
+
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+ test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+ $debug_cmd
+
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+ test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+ $debug_cmd
+
+ win32_libid_type=unknown
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+ $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+ case $nm_interface in
+ "MS dumpbin")
+ if func_cygming_ms_implib_p "$1" ||
+ func_cygming_gnu_implib_p "$1"
+ then
+ win32_nmres=import
+ else
+ win32_nmres=
+ fi
+ ;;
+ *)
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+ $SED -n -e '
+ 1,100{
+ / I /{
+ s|.*|import|
+ p
+ q
+ }
+ }'`
+ ;;
+ esac
+ case $win32_nmres in
+ import*) win32_libid_type="x86 archive import";;
+ *) win32_libid_type="x86 archive static";;
+ esac
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $ECHO "$win32_libid_type"
+}
+
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+# $sharedlib_from_linklib_cmd
+# Result is available in the variable
+# $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+ $debug_cmd
+
+ sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+ $debug_cmd
+
+ match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+ $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+ $SED '/^Contents of section '"$match_literal"':/{
+ # Place marker at beginning of archive member dllname section
+ s/.*/====MARK====/
+ p
+ d
+ }
+ # These lines can sometimes be longer than 43 characters, but
+ # are always uninteresting
+ /:[ ]*file format pe[i]\{,1\}-/d
+ /^In archive [^:]*:/d
+ # Ensure marker is printed
+ /^====MARK====/p
+ # Remove all lines with less than 43 characters
+ /^.\{43\}/!d
+ # From remaining lines, remove first 43 characters
+ s/^.\{43\}//' |
+ $SED -n '
+ # Join marker and all lines until next marker into a single line
+ /^====MARK====/ b para
+ H
+ $ b para
+ b
+ :para
+ x
+ s/\n//g
+ # Remove the marker
+ s/^====MARK====//
+ # Remove trailing dots and whitespace
+ s/[\. \t]*$//
+ # Print
+ /./p' |
+ # we now have a list, one entry per line, of the stringified
+ # contents of the appropriate section of all members of the
+ # archive that possess that section. Heuristic: eliminate
+ # all those that have a first or second character that is
+ # a '.' (that is, objdump's representation of an unprintable
+ # character.) This should work for all archives with less than
+ # 0x302f exports -- but will fail for DLLs whose name actually
+ # begins with a literal '.' or a single character followed by
+ # a '.'.
+ #
+ # Of those that remain, print the first one.
+ $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+# $sharedlib_from_linklib_cmd
+# Result is available in the variable
+# $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+ $debug_cmd
+
+ if func_cygming_gnu_implib_p "$1"; then
+ # binutils import library
+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+ elif func_cygming_ms_implib_p "$1"; then
+ # ms-generated import library
+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+ else
+ # unknown
+ sharedlib_from_linklib_result=
+ fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+ $debug_cmd
+
+ f_ex_an_ar_dir=$1; shift
+ f_ex_an_ar_oldlib=$1
+ if test yes = "$lock_old_archive_extraction"; then
+ lockfile=$f_ex_an_ar_oldlib.lock
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ fi
+ func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+ 'stat=$?; rm -f "$lockfile"; exit $stat'
+ if test yes = "$lock_old_archive_extraction"; then
+ $opt_dry_run || rm -f "$lockfile"
+ fi
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+ fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+ $debug_cmd
+
+ my_gentop=$1; shift
+ my_oldlibs=${1+"$@"}
+ my_oldobjs=
+ my_xlib=
+ my_xabs=
+ my_xdir=
+
+ for my_xlib in $my_oldlibs; do
+ # Extract the objects.
+ case $my_xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
+ *) my_xabs=`pwd`"/$my_xlib" ;;
+ esac
+ func_basename "$my_xlib"
+ my_xlib=$func_basename_result
+ my_xlib_u=$my_xlib
+ while :; do
+ case " $extracted_archives " in
+ *" $my_xlib_u "*)
+ func_arith $extracted_serial + 1
+ extracted_serial=$func_arith_result
+ my_xlib_u=lt$extracted_serial-$my_xlib ;;
+ *) break ;;
+ esac
+ done
+ extracted_archives="$extracted_archives $my_xlib_u"
+ my_xdir=$my_gentop/$my_xlib_u
+
+ func_mkdir_p "$my_xdir"
+
+ case $host in
+ *-darwin*)
+ func_verbose "Extracting $my_xabs"
+ # Do not bother doing anything if just a dry run
+ $opt_dry_run || {
+ darwin_orig_dir=`pwd`
+ cd $my_xdir || exit $?
+ darwin_archive=$my_xabs
+ darwin_curdir=`pwd`
+ func_basename "$darwin_archive"
+ darwin_base_archive=$func_basename_result
+ darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+ if test -n "$darwin_arches"; then
+ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+ darwin_arch=
+ func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+ for darwin_arch in $darwin_arches; do
+ func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
+ $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
+ cd "unfat-$$/$darwin_base_archive-$darwin_arch"
+ func_extract_an_archive "`pwd`" "$darwin_base_archive"
+ cd "$darwin_curdir"
+ $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
+ done # $darwin_arches
+ ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
+ darwin_file=
+ darwin_files=
+ for darwin_file in $darwin_filelist; do
+ darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+ $LIPO -create -output "$darwin_file" $darwin_files
+ done # $darwin_filelist
+ $RM -rf unfat-$$
+ cd "$darwin_orig_dir"
+ else
+ cd $darwin_orig_dir
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ fi # $darwin_arches
+ } # !$opt_dry_run
+ ;;
+ *)
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ ;;
+ esac
+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+ done
+
+ func_extract_archives_result=$my_oldobjs
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable. Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take. If 'yes', then the emitted script
+# will assume that the directory where it is stored is
+# the $objdir directory. This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+ func_emit_wrapper_arg1=${1-no}
+
+ $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+ # install mode needs the following variables:
+ generated_by_libtool_version='$macro_version'
+ notinst_deplibs='$notinst_deplibs'
+else
+ # When we are sourced in execute mode, \$file and \$ECHO are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ file=\"\$0\""
+
+ qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+ $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+ ECHO=\"$qECHO\"
+ fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ that is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options that match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+ lt_script_arg0=\$0
+ shift
+ for lt_opt
+ do
+ case \"\$lt_opt\" in
+ --lt-debug) lt_option_debug=1 ;;
+ --lt-dump-script)
+ lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+ test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+ lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+ cat \"\$lt_dump_D/\$lt_dump_F\"
+ exit 0
+ ;;
+ --lt-*)
+ \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+
+ # Print the debug banner immediately:
+ if test -n \"\$lt_option_debug\"; then
+ echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
+ fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+ lt_dump_args_N=1;
+ for lt_arg
+ do
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
+ lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+ done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2* | *-cegcc*)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $ECHO "\
+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+ exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+ case \" \$* \" in
+ *\\ --lt-*)
+ for lt_wr_arg
+ do
+ case \$lt_wr_arg in
+ --lt-*) ;;
+ *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+ esac
+ shift
+ done ;;
+ esac
+ func_exec_program_core \${1+\"\$@\"}
+}
+
+ # Parse options
+ func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+ done
+
+ # Usually 'no', except on cygwin/mingw when embedded into
+ # the cwrapper.
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+ if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+ # special case for '.'
+ if test \"\$thisdir\" = \".\"; then
+ thisdir=\`pwd\`
+ fi
+ # remove .libs from thisdir
+ case \"\$thisdir\" in
+ *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+ $objdir ) thisdir=. ;;
+ esac
+ fi
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test yes = "$fast_install"; then
+ $ECHO "\
+ program=lt-'$outputname'$exeext
+ progdir=\"\$thisdir/$objdir\"
+
+ if test ! -f \"\$progdir/\$program\" ||
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $MKDIR \"\$progdir\"
+ else
+ $RM \"\$progdir/\$file\"
+ fi"
+
+ $ECHO "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ \$ECHO \"\$relink_command_output\" >&2
+ $RM \"\$progdir/\$file\"
+ exit 1
+ fi
+ fi
+
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $RM \"\$progdir/\$program\";
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $RM \"\$progdir/\$file\"
+ fi"
+ else
+ $ECHO "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $ECHO "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # fixup the dll searchpath if we need to.
+ #
+ # Fix the DLL searchpath if we need to. Do this before prepending
+ # to shlibpath, because on Windows, both are PATH and uninstalled
+ # libraries must come first.
+ if test -n "$dllsearchpath"; then
+ $ECHO "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ # Export our shlibpath_var if we have one.
+ if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $ECHO "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ $ECHO "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+ func_exec_program \${1+\"\$@\"}
+ fi
+ else
+ # The program doesn't exist.
+ \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
+ \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+ \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit 1
+ fi
+fi\
+"
+}
+
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+ cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+*/
+EOF
+ cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+# include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* declarations of non-ANSI functions */
+#if defined __MINGW32__
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined __CYGWIN__
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined other_platform || defined ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined _MSC_VER
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+# define S_IXUSR _S_IEXEC
+#elif defined __MINGW32__
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+#elif defined __CYGWIN__
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined other platforms ... */
+#endif
+
+#if defined PATH_MAX
+# define LT_PATHMAX PATH_MAX
+#elif defined MAXPATHLEN
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
+ defined __OS2__
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+# define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+# define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free (stale); stale = 0; } \
+} while (0)
+
+#if defined LT_DEBUGWRAPPER
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+ cat <<EOF
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
+# define externally_visible volatile
+#else
+# define externally_visible __attribute__((externally_visible)) volatile
+#endif
+externally_visible const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+ if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ func_to_host_path "$temp_rpath"
+ cat <<EOF
+const char * LIB_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * LIB_PATH_VALUE = "";
+EOF
+ fi
+
+ if test -n "$dllsearchpath"; then
+ func_to_host_path "$dllsearchpath:"
+ cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE = "";
+EOF
+ fi
+
+ if test yes = "$fast_install"; then
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+ else
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+ fi
+
+
+ cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int newargc;
+ char *tmp_pathspec;
+ char *actual_cwrapper_path;
+ char *actual_cwrapper_name;
+ char *target_name;
+ char *lt_argv_zero;
+ int rval = 127;
+
+ int i;
+
+ program_name = (char *) xstrdup (base_name (argv[0]));
+ newargz = XMALLOC (char *, (size_t) argc + 1);
+
+ /* very simple arg parsing; don't want to rely on getopt
+ * also, copy all non cwrapper options to newargz, except
+ * argz[0], which is handled differently
+ */
+ newargc=0;
+ for (i = 1; i < argc; i++)
+ {
+ if (STREQ (argv[i], dumpscript_opt))
+ {
+EOF
+ case $host in
+ *mingw* | *cygwin* )
+ # make stdout use "unix" line endings
+ echo " setmode(1,_O_BINARY);"
+ ;;
+ esac
+
+ cat <<"EOF"
+ lt_dump_script (stdout);
+ return 0;
+ }
+ if (STREQ (argv[i], debug_opt))
+ {
+ lt_debug = 1;
+ continue;
+ }
+ if (STREQ (argv[i], ltwrapper_option_prefix))
+ {
+ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+ namespace, but it is not one of the ones we know about and
+ have already dealt with, above (inluding dump-script), then
+ report an error. Otherwise, targets might begin to believe
+ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+ namespace. The first time any user complains about this, we'll
+ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+ or a configure.ac-settable value.
+ */
+ lt_fatal (__FILE__, __LINE__,
+ "unrecognized %s option: '%s'",
+ ltwrapper_option_prefix, argv[i]);
+ }
+ /* otherwise ... */
+ newargz[++newargc] = xstrdup (argv[i]);
+ }
+ newargz[++newargc] = NULL;
+
+EOF
+ cat <<EOF
+ /* The GNU banner must be the first non-error debug message */
+ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
+EOF
+ cat <<"EOF"
+ lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+ tmp_pathspec = find_executable (argv[0]);
+ if (tmp_pathspec == NULL)
+ lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (before symlink chase) at: %s\n",
+ tmp_pathspec);
+
+ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (after symlink chase) at: %s\n",
+ actual_cwrapper_path);
+ XFREE (tmp_pathspec);
+
+ actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+ strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+ /* wrapper name transforms */
+ strendzap (actual_cwrapper_name, ".exe");
+ tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+ XFREE (actual_cwrapper_name);
+ actual_cwrapper_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ /* target_name transforms -- use actual target program name; might have lt- prefix */
+ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+ strendzap (target_name, ".exe");
+ tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+ XFREE (target_name);
+ target_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) libtool target name: %s\n",
+ target_name);
+EOF
+
+ cat <<EOF
+ newargz[0] =
+ XMALLOC (char, (strlen (actual_cwrapper_path) +
+ strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+ strcpy (newargz[0], actual_cwrapper_path);
+ strcat (newargz[0], "$objdir");
+ strcat (newargz[0], "/");
+EOF
+
+ cat <<"EOF"
+ /* stop here, and copy so we don't have to do this twice */
+ tmp_pathspec = xstrdup (newargz[0]);
+
+ /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+ strcat (newargz[0], actual_cwrapper_name);
+
+ /* DO want the lt- prefix here if it exists, so use target_name */
+ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+ XFREE (tmp_pathspec);
+ tmp_pathspec = NULL;
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ {
+ char* p;
+ while ((p = strchr (newargz[0], '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ }
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+ XFREE (target_name);
+ XFREE (actual_cwrapper_path);
+ XFREE (actual_cwrapper_name);
+
+ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
+ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
+ be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+ because on Windows, both *_VARNAMEs are PATH but uninstalled
+ libraries must come first. */
+ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+ lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+ nonnull (lt_argv_zero));
+ for (i = 0; i < newargc; i++)
+ {
+ lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+ i, nonnull (newargz[i]));
+ }
+
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ /* execv doesn't actually work on mingw as expected on unix */
+ newargz = prepare_spawn (newargz);
+ rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+ if (rval == -1)
+ {
+ /* failed to start process */
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) failed to launch target \"%s\": %s\n",
+ lt_argv_zero, nonnull (strerror (errno)));
+ return 127;
+ }
+ return rval;
+EOF
+ ;;
+ *)
+ cat <<"EOF"
+ execv (lt_argv_zero, newargz);
+ return rval; /* =127, but avoids unused variable warning */
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void *p = (void *) malloc (num);
+ if (!p)
+ lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+ string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+ const char *base;
+
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return base;
+}
+
+int
+check_executable (const char *path)
+{
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if ((stat (path, &st) >= 0)
+ && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+ return 1;
+ else
+ return 0;
+}
+
+int
+make_executable (const char *path)
+{
+ int rval = 0;
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if (stat (path, &st) >= 0)
+ {
+ rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+ }
+ return rval;
+}
+
+/* Searches for the full path of the wrapper. Returns
+ newly allocated full path name if found, NULL otherwise
+ Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+ int has_slash = 0;
+ const char *p;
+ const char *p_next;
+ /* static buffer for getcwd */
+ char tmp[LT_PATHMAX + 1];
+ size_t tmp_len;
+ char *concat_name;
+
+ lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+ nonempty (wrapper));
+
+ if ((wrapper == NULL) || (*wrapper == '\0'))
+ return NULL;
+
+ /* Absolute path? */
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ else
+ {
+#endif
+ if (IS_DIR_SEPARATOR (wrapper[0]))
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ }
+#endif
+
+ for (p = wrapper; *p; p++)
+ if (*p == '/')
+ {
+ has_slash = 1;
+ break;
+ }
+ if (!has_slash)
+ {
+ /* no slashes; search PATH */
+ const char *path = getenv ("PATH");
+ if (path != NULL)
+ {
+ for (p = path; *p; p = p_next)
+ {
+ const char *q;
+ size_t p_len;
+ for (q = p; *q; q++)
+ if (IS_PATH_SEPARATOR (*q))
+ break;
+ p_len = (size_t) (q - p);
+ p_next = (*q == '\0' ? q : q + 1);
+ if (p_len == 0)
+ {
+ /* empty path: current directory */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name =
+ XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+ }
+ else
+ {
+ concat_name =
+ XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, p, p_len);
+ concat_name[p_len] = '/';
+ strcpy (concat_name + p_len + 1, wrapper);
+ }
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ }
+ /* not found in PATH; assume curdir */
+ }
+ /* Relative path | not found in path: prepend cwd */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+ return xstrdup (pathspec);
+#else
+ char buf[LT_PATHMAX];
+ struct stat s;
+ char *tmp_pathspec = xstrdup (pathspec);
+ char *p;
+ int has_symlinks = 0;
+ while (strlen (tmp_pathspec) && !has_symlinks)
+ {
+ lt_debugprintf (__FILE__, __LINE__,
+ "checking path component for symlinks: %s\n",
+ tmp_pathspec);
+ if (lstat (tmp_pathspec, &s) == 0)
+ {
+ if (S_ISLNK (s.st_mode) != 0)
+ {
+ has_symlinks = 1;
+ break;
+ }
+
+ /* search backwards for last DIR_SEPARATOR */
+ p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+ while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ p--;
+ if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ {
+ /* no more DIR_SEPARATORS left */
+ break;
+ }
+ *p = '\0';
+ }
+ else
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "error accessing file \"%s\": %s",
+ tmp_pathspec, nonnull (strerror (errno)));
+ }
+ }
+ XFREE (tmp_pathspec);
+
+ if (!has_symlinks)
+ {
+ return xstrdup (pathspec);
+ }
+
+ tmp_pathspec = realpath (pathspec, buf);
+ if (tmp_pathspec == 0)
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "could not follow symlinks for %s", pathspec);
+ }
+ return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert (str != NULL);
+ assert (pat != NULL);
+
+ len = strlen (str);
+ patlen = strlen (pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (STREQ (str, pat))
+ *str = '\0';
+ }
+ return str;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+ va_list args;
+ if (lt_debug)
+ {
+ (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+ va_start (args, fmt);
+ (void) vfprintf (stderr, fmt, args);
+ va_end (args);
+ }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+ int line, const char *mode,
+ const char *message, va_list ap)
+{
+ fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+ va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+ return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+ return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_setenv) setting '%s' to '%s'\n",
+ nonnull (name), nonnull (value));
+ {
+#ifdef HAVE_SETENV
+ /* always make a copy, for consistency with !HAVE_SETENV */
+ char *str = xstrdup (value);
+ setenv (name, str, 1);
+#else
+ size_t len = strlen (name) + 1 + strlen (value) + 1;
+ char *str = XMALLOC (char, len);
+ sprintf (str, "%s=%s", name, value);
+ if (putenv (str) != EXIT_SUCCESS)
+ {
+ XFREE (str);
+ }
+#endif
+ }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+ char *new_value;
+ if (orig_value && *orig_value)
+ {
+ size_t orig_value_len = strlen (orig_value);
+ size_t add_len = strlen (add);
+ new_value = XMALLOC (char, add_len + orig_value_len + 1);
+ if (to_end)
+ {
+ strcpy (new_value, orig_value);
+ strcpy (new_value + orig_value_len, add);
+ }
+ else
+ {
+ strcpy (new_value, add);
+ strcpy (new_value + add_len, orig_value);
+ }
+ }
+ else
+ {
+ new_value = xstrdup (add);
+ }
+ return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ /* some systems can't cope with a ':'-terminated path #' */
+ size_t len = strlen (new_value);
+ while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+ {
+ new_value[--len] = '\0';
+ }
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+EOF
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+ Note that spawn() does not by itself call the command interpreter
+ (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+ ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&v);
+ v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+ }) ? "cmd.exe" : "command.com").
+ Instead it simply concatenates the arguments, separated by ' ', and calls
+ CreateProcess(). We must quote the arguments since Win32 CreateProcess()
+ interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+ special way:
+ - Space and tab are interpreted as delimiters. They are not treated as
+ delimiters if they are surrounded by double quotes: "...".
+ - Unescaped double quotes are removed from the input. Their only effect is
+ that within double quotes, space and tab are treated like normal
+ characters.
+ - Backslashes not followed by double quotes are not special.
+ - But 2*n+1 backslashes followed by a double quote become
+ n backslashes followed by a double quote (n >= 0):
+ \" -> "
+ \\\" -> \"
+ \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+ size_t argc;
+ char **new_argv;
+ size_t i;
+
+ /* Count number of arguments. */
+ for (argc = 0; argv[argc] != NULL; argc++)
+ ;
+
+ /* Allocate new argument vector. */
+ new_argv = XMALLOC (char *, argc + 1);
+
+ /* Put quoted arguments into the new argument vector. */
+ for (i = 0; i < argc; i++)
+ {
+ const char *string = argv[i];
+
+ if (string[0] == '\0')
+ new_argv[i] = xstrdup ("\"\"");
+ else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+ {
+ int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+ size_t length;
+ unsigned int backslashes;
+ const char *s;
+ char *quoted_string;
+ char *p;
+
+ length = 0;
+ backslashes = 0;
+ if (quote_around)
+ length++;
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ length += backslashes + 1;
+ length++;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ length += backslashes + 1;
+
+ quoted_string = XMALLOC (char, length + 1);
+
+ p = quoted_string;
+ backslashes = 0;
+ if (quote_around)
+ *p++ = '"';
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ {
+ unsigned int j;
+ for (j = backslashes + 1; j > 0; j--)
+ *p++ = '\\';
+ }
+ *p++ = c;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ {
+ unsigned int j;
+ for (j = backslashes; j > 0; j--)
+ *p++ = '\\';
+ *p++ = '"';
+ }
+ *p = '\0';
+
+ new_argv[i] = quoted_string;
+ }
+ else
+ new_argv[i] = (char *) string;
+ }
+ new_argv[argc] = NULL;
+
+ return new_argv;
+}
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+ func_emit_wrapper yes |
+ $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/ fputs ("\1", f);/p
+g
+D'
+ cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+ $debug_cmd
+
+ case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+ *import*) : ;;
+ *) false ;;
+ esac
+}
+
+# func_suncc_cstd_abi
+# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
+# Several compiler flags select an ABI that is incompatible with the
+# Cstd library. Avoid specifying it if any are in CXXFLAGS.
+func_suncc_cstd_abi ()
+{
+ $debug_cmd
+
+ case " $compile_command " in
+ *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
+ suncc_use_cstd_abi=no
+ ;;
+ *)
+ suncc_use_cstd_abi=yes
+ ;;
+ esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+ $debug_cmd
+
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ # It is impossible to link a dll without this setting, and
+ # we shouldn't force the makefile maintainer to figure out
+ # what system we are compiling for in order to pass an extra
+ # flag for every libtool invocation.
+ # allow_undefined=no
+
+ # FIXME: Unfortunately, there are problems with the above when trying
+ # to make a dll that has undefined symbols, in which case not
+ # even a static library is built. For now, we need to specify
+ # -no-undefined on the libtool link line when we can be certain
+ # that all symbols are satisfied, otherwise we get a static library.
+ allow_undefined=yes
+ ;;
+ *)
+ allow_undefined=yes
+ ;;
+ esac
+ libtool_args=$nonopt
+ base_compile="$nonopt $@"
+ compile_command=$nonopt
+ finalize_command=$nonopt
+
+ compile_rpath=
+ finalize_rpath=
+ compile_shlibpath=
+ finalize_shlibpath=
+ convenience=
+ old_convenience=
+ deplibs=
+ old_deplibs=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
+ inst_prefix_dir=
+ new_inherited_linker_flags=
+
+ avoid_version=no
+ bindir=
+ dlfiles=
+ dlprefiles=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ ltlibs=
+ module=no
+ no_install=no
+ objs=
+ os2dllname=
+ non_pic_objects=
+ precious_files_regex=
+ prefer_static_libs=no
+ preload=false
+ prev=
+ prevarg=
+ release=
+ rpath=
+ xrpath=
+ perm_rpath=
+ temp_rpath=
+ thread_safe=no
+ vinfo=
+ vinfo_number=no
+ weak_libs=
+ single_module=$wl-single_module
+ func_infer_tag $base_compile
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ case $arg in
+ -shared)
+ test yes != "$build_libtool_libs" \
+ && func_fatal_configuration "cannot build a shared library"
+ build_old_libs=no
+ break
+ ;;
+ -all-static | -static | -static-libtool-libs)
+ case $arg in
+ -all-static)
+ if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
+ func_warning "complete static linking is impossible in this configuration"
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ -static)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=built
+ ;;
+ -static-libtool-libs)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ esac
+ build_libtool_libs=no
+ build_old_libs=yes
+ break
+ ;;
+ esac
+ done
+
+ # See if our shared archives depend on static archives.
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+ # Go through the arguments, transforming them on the way.
+ while test "$#" -gt 0; do
+ arg=$1
+ shift
+ func_quote_for_eval "$arg"
+ qarg=$func_quote_for_eval_unquoted_result
+ func_append libtool_args " $func_quote_for_eval_result"
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ output)
+ func_append compile_command " @OUTPUT@"
+ func_append finalize_command " @OUTPUT@"
+ ;;
+ esac
+
+ case $prev in
+ bindir)
+ bindir=$arg
+ prev=
+ continue
+ ;;
+ dlfiles|dlprefiles)
+ $preload || {
+ # Add the symbol object into the linking commands.
+ func_append compile_command " @SYMFILE@"
+ func_append finalize_command " @SYMFILE@"
+ preload=:
+ }
+ case $arg in
+ *.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test no = "$dlself"; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ self)
+ if test dlprefiles = "$prev"; then
+ dlself=yes
+ elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
+ dlself=yes
+ else
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ if test dlfiles = "$prev"; then
+ func_append dlfiles " $arg"
+ else
+ func_append dlprefiles " $arg"
+ fi
+ prev=
+ continue
+ ;;
+ esac
+ ;;
+ expsyms)
+ export_symbols=$arg
+ test -f "$arg" \
+ || func_fatal_error "symbol file '$arg' does not exist"
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex=$arg
+ prev=
+ continue
+ ;;
+ framework)
+ case $host in
+ *-*-darwin*)
+ case "$deplibs " in
+ *" $qarg.ltframework "*) ;;
+ *) func_append deplibs " $qarg.ltframework" # this is fixed later
+ ;;
+ esac
+ ;;
+ esac
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir=$arg
+ prev=
+ continue
+ ;;
+ mllvm)
+ # Clang does not use LLVM to link, so we can simply discard any
+ # '-mllvm $arg' options when doing the link step.
+ prev=
+ continue
+ ;;
+ objectlist)
+ if test -f "$arg"; then
+ save_arg=$arg
+ moreargs=
+ for fil in `cat "$save_arg"`
+ do
+# func_append moreargs " $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test none = "$pic_object" &&
+ test none = "$non_pic_object"; then
+ func_fatal_error "cannot find name of object for '$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ if test none != "$pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ pic_object=$xdir$pic_object
+
+ if test dlfiles = "$prev"; then
+ if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+ func_append dlfiles " $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test dlprefiles = "$prev"; then
+ # Preload the old-style object.
+ func_append dlprefiles " $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg=$pic_object
+ fi
+
+ # Non-PIC object.
+ if test none != "$non_pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object=$xdir$non_pic_object
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test none = "$pic_object"; then
+ arg=$non_pic_object
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object=$pic_object
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "'$arg' is not a valid libtool object"
+ fi
+ fi
+ done
+ else
+ func_fatal_error "link input file '$arg' does not exist"
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ os2dllname)
+ os2dllname=$arg
+ prev=
+ continue
+ ;;
+ precious_regex)
+ precious_files_regex=$arg
+ prev=
+ continue
+ ;;
+ release)
+ release=-$arg
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case $arg in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ if test rpath = "$prev"; then
+ case "$rpath " in
+ *" $arg "*) ;;
+ *) func_append rpath " $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+ *) func_append xrpath " $arg" ;;
+ esac
+ fi
+ prev=
+ continue
+ ;;
+ shrext)
+ shrext_cmds=$arg
+ prev=
+ continue
+ ;;
+ weak)
+ func_append weak_libs " $arg"
+ prev=
+ continue
+ ;;
+ xcclinker)
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xcompiler)
+ func_append compiler_flags " $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xlinker)
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $wl$qarg"
+ prev=
+ func_append compile_command " $wl$qarg"
+ func_append finalize_command " $wl$qarg"
+ continue
+ ;;
+ *)
+ eval "$prev=\"\$arg\""
+ prev=
+ continue
+ ;;
+ esac
+ fi # test -n "$prev"
+
+ prevarg=$arg
+
+ case $arg in
+ -all-static)
+ if test -n "$link_static_flag"; then
+ # See comment for -static flag below, for more details.
+ func_append compile_command " $link_static_flag"
+ func_append finalize_command " $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ func_fatal_error "'-allow-undefined' must not be used because it is the default"
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -bindir)
+ prev=bindir
+ continue
+ ;;
+
+ -dlopen)
+ prev=dlfiles
+ continue
+ ;;
+
+ -dlpreopen)
+ prev=dlprefiles
+ continue
+ ;;
+
+ -export-dynamic)
+ export_dynamic=yes
+ continue
+ ;;
+
+ -export-symbols | -export-symbols-regex)
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ func_fatal_error "more than one -exported-symbols argument is not allowed"
+ fi
+ if test X-export-symbols = "X$arg"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -framework)
+ prev=framework
+ continue
+ ;;
+
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix* | /*-*-irix*)
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ ;;
+ esac
+ continue
+ ;;
+
+ -L*)
+ func_stripname "-L" '' "$arg"
+ if test -z "$func_stripname_result"; then
+ if test "$#" -gt 0; then
+ func_fatal_error "require no space between '-L' and '$1'"
+ else
+ func_fatal_error "need path for '-L' option"
+ fi
+ fi
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ test -z "$absdir" && \
+ func_fatal_error "cannot determine absolute directory name of '$dir'"
+ dir=$absdir
+ ;;
+ esac
+ case "$deplibs " in
+ *" -L$dir "* | *" $arg "*)
+ # Will only happen for absolute or sysroot arguments
+ ;;
+ *)
+ # Preserve sysroot, but never include relative directories
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+ *) func_append deplibs " -L$dir" ;;
+ esac
+ func_append lib_search_path " $dir"
+ ;;
+ esac
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ ::) dllsearchpath=$dir;;
+ *) func_append dllsearchpath ":$dir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) func_append dllsearchpath ":$testbindir";;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+
+ -l*)
+ if test X-lc = "X$arg" || test X-lm = "X$arg"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ # These systems don't actually have a C or math library (as such)
+ continue
+ ;;
+ *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+ # Do not include libc due to us having libc/libc_r.
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ func_append deplibs " System.ltframework"
+ continue
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ test X-lc = "X$arg" && continue
+ ;;
+ esac
+ elif test X-lc_r = "X$arg"; then
+ case $host in
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
+ fi
+ func_append deplibs " $arg"
+ continue
+ ;;
+
+ -mllvm)
+ prev=mllvm
+ continue
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
+ # classes, name mangling, and exception handling.
+ # Darwin uses the -arch flag to determine output architecture.
+ -model|-arch|-isysroot|--sysroot)
+ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ prev=xcompiler
+ continue
+ ;;
+
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) func_append new_inherited_linker_flags " $arg" ;;
+ esac
+ continue
+ ;;
+
+ -multi_module)
+ single_module=$wl-multi_module
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # and Darwin in order for the loader to find any dlls it needs.
+ func_warning "'-no-install' is ignored for $host"
+ func_warning "assuming '-no-fast-install' instead"
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
+ -no-undefined)
+ allow_undefined=no
+ continue
+ ;;
+
+ -objectlist)
+ prev=objectlist
+ continue
+ ;;
+
+ -os2dllname)
+ prev=os2dllname
+ continue
+ ;;
+
+ -o) prev=output ;;
+
+ -precious-files-regex)
+ prev=precious_regex
+ continue
+ ;;
+
+ -release)
+ prev=release
+ continue
+ ;;
+
+ -rpath)
+ prev=rpath
+ continue
+ ;;
+
+ -R)
+ prev=xrpath
+ continue
+ ;;
+
+ -R*)
+ func_stripname '-R' '' "$arg"
+ dir=$func_stripname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ =*)
+ func_stripname '=' '' "$dir"
+ dir=$lt_sysroot$func_stripname_result
+ ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) func_append xrpath " $dir" ;;
+ esac
+ continue
+ ;;
+
+ -shared)
+ # The effects of -shared are defined in a previous loop.
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -static | -static-libtool-libs)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
+ continue
+ ;;
+
+ -thread-safe)
+ thread_safe=yes
+ continue
+ ;;
+
+ -version-info)
+ prev=vinfo
+ continue
+ ;;
+
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -weak)
+ prev=weak
+ continue
+ ;;
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs=$IFS; IFS=,
+ for flag in $args; do
+ IFS=$save_ifs
+ func_quote_for_eval "$flag"
+ func_append arg " $func_quote_for_eval_result"
+ func_append compiler_flags " $func_quote_for_eval_result"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Wl,*)
+ func_stripname '-Wl,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs=$IFS; IFS=,
+ for flag in $args; do
+ IFS=$save_ifs
+ func_quote_for_eval "$flag"
+ func_append arg " $wl$func_quote_for_eval_result"
+ func_append compiler_flags " $wl$func_quote_for_eval_result"
+ func_append linker_flags " $func_quote_for_eval_result"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ # -msg_* for osf cc
+ -msg_*)
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ ;;
+
+ # Flags to be passed through unchanged, with rationale:
+ # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
+ # -r[0-9][0-9]* specify processor for the SGI compiler
+ # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+ # +DA*, +DD* enable 64-bit mode for the HP compiler
+ # -q* compiler args for the IBM compiler
+ # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+ # -F/path path to uninstalled frameworks, gcc on darwin
+ # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
+ # -fstack-protector* stack protector flags for GCC
+ # @file GCC response files
+ # -tp=* Portland pgcc target processor selection
+ # --sysroot=* for sysroot support
+ # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ # -specs=* GCC specs files
+ # -stdlib=* select c++ std lib with clang
+ # -fsanitize=* Clang/GCC memory and address sanitizer
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+ -specs=*|-fsanitize=*)
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ func_append compiler_flags " $arg"
+ continue
+ ;;
+
+ -Z*)
+ if test os2 = "`expr $host : '.*\(os2\)'`"; then
+ # OS/2 uses -Zxxx to specify OS/2-specific options
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case $arg in
+ -Zlinker | -Zstack)
+ prev=xcompiler
+ ;;
+ esac
+ continue
+ else
+ # Otherwise treat like 'Some other compiler flag' below
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ fi
+ ;;
+
+ # Some other compiler flag.
+ -* | +*)
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ ;;
+
+ *.$objext)
+ # A standard object.
+ func_append objs " $arg"
+ ;;
+
+ *.lo)
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test none = "$pic_object" &&
+ test none = "$non_pic_object"; then
+ func_fatal_error "cannot find name of object for '$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ test none = "$pic_object" || {
+ # Prepend the subdirectory the object is found in.
+ pic_object=$xdir$pic_object
+
+ if test dlfiles = "$prev"; then
+ if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+ func_append dlfiles " $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test dlprefiles = "$prev"; then
+ # Preload the old-style object.
+ func_append dlprefiles " $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg=$pic_object
+ }
+
+ # Non-PIC object.
+ if test none != "$non_pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object=$xdir$non_pic_object
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test none = "$pic_object"; then
+ arg=$non_pic_object
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object=$pic_object
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "'$arg' is not a valid libtool object"
+ fi
+ fi
+ ;;
+
+ *.$libext)
+ # An archive.
+ func_append deplibs " $arg"
+ func_append old_deplibs " $arg"
+ continue
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
+ func_resolve_sysroot "$arg"
+ if test dlfiles = "$prev"; then
+ # This library was specified with -dlopen.
+ func_append dlfiles " $func_resolve_sysroot_result"
+ prev=
+ elif test dlprefiles = "$prev"; then
+ # The library was specified with -dlpreopen.
+ func_append dlprefiles " $func_resolve_sysroot_result"
+ prev=
+ else
+ func_append deplibs " $func_resolve_sysroot_result"
+ fi
+ continue
+ ;;
+
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ func_quote_for_eval "$arg"
+ arg=$func_quote_for_eval_result
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+ done # argument parsing loop
+
+ test -n "$prev" && \
+ func_fatal_help "the '$prevarg' option requires an argument"
+
+ if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ func_basename "$output"
+ outputname=$func_basename_result
+ libobjs_save=$libobjs
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ # Definition is injected by LT_CONFIG during libtool generation.
+ func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
+
+ func_dirname "$output" "/" ""
+ output_objdir=$func_dirname_result$objdir
+ func_to_tool_file "$output_objdir/"
+ tool_output_objdir=$func_to_tool_file_result
+ # Create the object directory.
+ func_mkdir_p "$output_objdir"
+
+ # Determine the type of output
+ case $output in
+ "")
+ func_fatal_help "you must specify an output file"
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ specialdeplibs=
+
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ if $opt_preserve_dup_deps; then
+ case "$libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append libs " $deplib"
+ done
+
+ if test lib = "$linkmode"; then
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+ # Compute libraries that are listed more than once in $predeps
+ # $postdeps and mark them as special (i.e., whose duplicates are
+ # not to be eliminated).
+ pre_post_deps=
+ if $opt_duplicate_compiler_generated_deps; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+ esac
+ func_append pre_post_deps " $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+
+ case $linkmode in
+ lib)
+ passes="conv dlpreopen link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=false
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+
+ for pass in $passes; do
+ # The preopen pass in lib mode reverses $deplibs; put it back here
+ # so that -L comes before libs that need it for instance...
+ if test lib,link = "$linkmode,$pass"; then
+ ## FIXME: Find the place where the list is rebuilt in the wrong
+ ## order, and fix it there properly
+ tmp_deplibs=
+ for deplib in $deplibs; do
+ tmp_deplibs="$deplib $tmp_deplibs"
+ done
+ deplibs=$tmp_deplibs
+ fi
+
+ if test lib,link = "$linkmode,$pass" ||
+ test prog,scan = "$linkmode,$pass"; then
+ libs=$deplibs
+ deplibs=
+ fi
+ if test prog = "$linkmode"; then
+ case $pass in
+ dlopen) libs=$dlfiles ;;
+ dlpreopen) libs=$dlprefiles ;;
+ link)
+ libs="$deplibs %DEPLIBS%"
+ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+ ;;
+ esac
+ fi
+ if test lib,dlpreopen = "$linkmode,$pass"; then
+ # Collect and forward deplibs of preopened libtool libs
+ for lib in $dlprefiles; do
+ # Ignore non-libtool-libs
+ dependency_libs=
+ func_resolve_sysroot "$lib"
+ case $lib in
+ *.la) func_source "$func_resolve_sysroot_result" ;;
+ esac
+
+ # Collect preopened libtool deplibs, except any this library
+ # has declared as weak libs
+ for deplib in $dependency_libs; do
+ func_basename "$deplib"
+ deplib_base=$func_basename_result
+ case " $weak_libs " in
+ *" $deplib_base "*) ;;
+ *) func_append deplibs " $deplib" ;;
+ esac
+ done
+ done
+ libs=$dlprefiles
+ fi
+ if test dlopen = "$pass"; then
+ # Collect dlpreopened libraries
+ save_deplibs=$deplibs
+ deplibs=
+ fi
+
+ for deplib in $libs; do
+ lib=
+ found=false
+ case $deplib in
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ func_append compiler_flags " $deplib"
+ if test lib = "$linkmode"; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -l*)
+ if test lib != "$linkmode" && test prog != "$linkmode"; then
+ func_warning "'-l' is ignored for archives/objects"
+ continue
+ fi
+ func_stripname '-l' '' "$deplib"
+ name=$func_stripname_result
+ if test lib = "$linkmode"; then
+ searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+ else
+ searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+ fi
+ for searchdir in $searchdirs; do
+ for search_ext in .la $std_shrext .so .a; do
+ # Search the libtool library
+ lib=$searchdir/lib$name$search_ext
+ if test -f "$lib"; then
+ if test .la = "$search_ext"; then
+ found=:
+ else
+ found=false
+ fi
+ break 2
+ fi
+ done
+ done
+ if $found; then
+ # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if func_lalib_p "$lib"; then
+ library_names=
+ old_library=
+ func_source "$lib"
+ for l in $old_library $library_names; do
+ ll=$l
+ done
+ if test "X$ll" = "X$old_library"; then # only static version available
+ found=false
+ func_dirname "$lib" "" "."
+ ladir=$func_dirname_result
+ lib=$ladir/$old_library
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
+ else
+ # deplib doesn't seem to be a libtool library
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ ;; # -l
+ *.ltframework)
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ if test lib = "$linkmode"; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test conv = "$pass" && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ prog)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test scan = "$pass"; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ *)
+ func_warning "'-L' is ignored for archives/objects"
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test link = "$pass"; then
+ func_stripname '-R' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) func_append xrpath " $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la)
+ func_resolve_sysroot "$deplib"
+ lib=$func_resolve_sysroot_result
+ ;;
+ *.$libext)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ # Linking convenience modules into shared libraries is allowed,
+ # but linking other static libraries is non-portable.
+ case " $dlpreconveniencelibs " in
+ *" $deplib "*) ;;
+ *)
+ valid_a_lib=false
+ case $deplibs_check_method in
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ valid_a_lib=:
+ fi
+ ;;
+ pass_all)
+ valid_a_lib=:
+ ;;
+ esac
+ if $valid_a_lib; then
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the"
+ $ECHO "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ else
+ echo
+ $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because the file extensions .$libext of this argument makes me believe"
+ echo "*** that it is just a static archive that I should not use here."
+ fi
+ ;;
+ esac
+ continue
+ ;;
+ prog)
+ if test link != "$pass"; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ elif test prog = "$linkmode"; then
+ if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ func_append newdlprefiles " $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ func_append newdlfiles " $deplib"
+ fi
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=:
+ continue
+ ;;
+ esac # case $deplib
+
+ $found || test -f "$lib" \
+ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$lib" \
+ || func_fatal_error "'$lib' is not a valid libtool archive"
+
+ func_dirname "$lib" "" "."
+ ladir=$func_dirname_result
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
+ inherited_linker_flags=
+ # If the library was installed with an old release of libtool,
+ # it will not redefine variables installed, or shouldnotlink
+ installed=yes
+ shouldnotlink=no
+ avoidtemprpath=
+
+
+ # Read the .la file
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+ *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+ esac
+ done
+ fi
+ dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ if test lib,link = "$linkmode,$pass" ||
+ test prog,scan = "$linkmode,$pass" ||
+ { test prog != "$linkmode" && test lib != "$linkmode"; }; then
+ test -n "$dlopen" && func_append dlfiles " $dlopen"
+ test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+ fi
+
+ if test conv = "$pass"; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ func_fatal_error "cannot find name of link library for '$lib'"
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ func_append convenience " $ladir/$objdir/$old_library"
+ func_append old_convenience " $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
+ elif test prog != "$linkmode" && test lib != "$linkmode"; then
+ func_fatal_error "'$lib' is not a convenience library"
+ fi
+ continue
+ fi # $pass = conv
+
+
+ # Get the name of the library we link against.
+ linklib=
+ if test -n "$old_library" &&
+ { test yes = "$prefer_static_libs" ||
+ test built,no = "$prefer_static_libs,$installed"; }; then
+ linklib=$old_library
+ else
+ for l in $old_library $library_names; do
+ linklib=$l
+ done
+ fi
+ if test -z "$linklib"; then
+ func_fatal_error "cannot find name of link library for '$lib'"
+ fi
+
+ # This library was specified with -dlopen.
+ if test dlopen = "$pass"; then
+ test -z "$libdir" \
+ && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
+ if test -z "$dlname" ||
+ test yes != "$dlopen_support" ||
+ test no = "$build_libtool_libs"
+ then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ func_append dlprefiles " $lib $dependency_libs"
+ else
+ func_append newdlfiles " $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ func_warning "cannot determine absolute directory name of '$ladir'"
+ func_warning "passing it literally to the linker, although it might fail"
+ abs_ladir=$ladir
+ fi
+ ;;
+ esac
+ func_basename "$lib"
+ laname=$func_basename_result
+
+ # Find the relevant object directory and library name.
+ if test yes = "$installed"; then
+ if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ func_warning "library '$lib' was moved."
+ dir=$ladir
+ absdir=$abs_ladir
+ libdir=$abs_ladir
+ else
+ dir=$lt_sysroot$libdir
+ absdir=$lt_sysroot$libdir
+ fi
+ test yes = "$hardcode_automatic" && avoidtemprpath=yes
+ else
+ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ dir=$ladir
+ absdir=$abs_ladir
+ # Remove this search path later
+ func_append notinst_path " $abs_ladir"
+ else
+ dir=$ladir/$objdir
+ absdir=$abs_ladir/$objdir
+ # Remove this search path later
+ func_append notinst_path " $abs_ladir"
+ fi
+ fi # $installed = yes
+ func_stripname 'lib' '.la' "$laname"
+ name=$func_stripname_result
+
+ # This library was specified with -dlpreopen.
+ if test dlpreopen = "$pass"; then
+ if test -z "$libdir" && test prog = "$linkmode"; then
+ func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
+ fi
+ case $host in
+ # special handling for platforms with PE-DLLs.
+ *cygwin* | *mingw* | *cegcc* )
+ # Linker will automatically link against shared library if both
+ # static and shared are present. Therefore, ensure we extract
+ # symbols from the import library if a shared library is present
+ # (otherwise, the dlopen module name will be incorrect). We do
+ # this by putting the import library name into $newdlprefiles.
+ # We recover the dlopen module name by 'saving' the la file
+ # name in a special purpose variable, and (later) extracting the
+ # dlname from the la file.
+ if test -n "$dlname"; then
+ func_tr_sh "$dir/$linklib"
+ eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+ func_append newdlprefiles " $dir/$linklib"
+ else
+ func_append newdlprefiles " $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ func_append dlpreconveniencelibs " $dir/$old_library"
+ fi
+ ;;
+ * )
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ func_append newdlprefiles " $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ func_append dlpreconveniencelibs " $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ func_append newdlprefiles " $dir/$dlname"
+ else
+ func_append newdlprefiles " $dir/$linklib"
+ fi
+ ;;
+ esac
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+ # Link the convenience library
+ if test lib = "$linkmode"; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs" # used for prog,scan pass
+ fi
+ continue
+ fi
+
+
+ if test prog = "$linkmode" && test link != "$pass"; then
+ func_append newlib_search_path " $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=false
+ if test no != "$link_all_deplibs" || test -z "$library_names" ||
+ test no = "$build_libtool_libs"; then
+ linkalldeplibs=:
+ fi
+
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ esac
+ # Need to link against all dependency_libs?
+ if $linkalldeplibs; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+
+ if test prog,link = "$linkmode,$pass"; then
+ if test -n "$library_names" &&
+ { { test no = "$prefer_static_libs" ||
+ test built,yes = "$prefer_static_libs,$installed"; } ||
+ test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
+ # Make sure the rpath contains only unique directories.
+ case $temp_rpath: in
+ *"$absdir:"*) ;;
+ *) func_append temp_rpath "$absdir:" ;;
+ esac
+ fi
+
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) func_append compile_rpath " $absdir" ;;
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ ;;
+ esac
+ fi # $linkmode,$pass = prog,link...
+
+ if $alldeplibs &&
+ { test pass_all = "$deplibs_check_method" ||
+ { test yes = "$build_libtool_libs" &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
+ fi
+ fi
+
+ link_static=no # Whether the deplib will be linked statically
+ use_static_libs=$prefer_static_libs
+ if test built = "$use_static_libs" && test yes = "$installed"; then
+ use_static_libs=no
+ fi
+ if test -n "$library_names" &&
+ { test no = "$use_static_libs" || test -z "$old_library"; }; then
+ case $host in
+ *cygwin* | *mingw* | *cegcc* | *os2*)
+ # No point in relinking DLLs because paths are not encoded
+ func_append notinst_deplibs " $lib"
+ need_relink=no
+ ;;
+ *)
+ if test no = "$installed"; then
+ func_append notinst_deplibs " $lib"
+ need_relink=yes
+ fi
+ ;;
+ esac
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on some
+ # systems (darwin). Don't bleat about dlopened modules though!
+ dlopenmodule=
+ for dlpremoduletest in $dlprefiles; do
+ if test "X$dlpremoduletest" = "X$lib"; then
+ dlopenmodule=$dlpremoduletest
+ break
+ fi
+ done
+ if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
+ echo
+ if test prog = "$linkmode"; then
+ $ECHO "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+ fi
+ $ECHO "*** $linklib is not portable!"
+ fi
+ if test lib = "$linkmode" &&
+ test yes = "$hardcode_into_libs"; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) func_append compile_rpath " $absdir" ;;
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ ;;
+ esac
+ fi
+
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ shift
+ realname=$1
+ shift
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname=$dlname
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin* | mingw* | *cegcc* | *os2*)
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix=-$major
+ ;;
+ esac
+ eval soname=\"$soname_spec\"
+ else
+ soname=$realname
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot=$soname
+ func_basename "$soroot"
+ soname=$func_basename_result
+ func_stripname 'lib' '.dll' "$soname"
+ newlib=libimp-$func_stripname_result.a
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ func_verbose "extracting exported symbol list from '$soname'"
+ func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ func_verbose "generating import library for '$soname'"
+ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+ if test prog = "$linkmode" || test relink != "$opt_mode"; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test no = "$hardcode_direct"; then
+ add=$dir/$linklib
+ case $host in
+ *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
+ *-*-sysv4*uw2*) add_dir=-L$dir ;;
+ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+ *-*-unixware7*) add_dir=-L$dir ;;
+ *-*-darwin* )
+ # if the lib is a (non-dlopened) module then we cannot
+ # link against it, someone is ignoring the earlier warnings
+ if /usr/bin/file -L $add 2> /dev/null |
+ $GREP ": [^:]* bundle" >/dev/null; then
+ if test "X$dlopenmodule" != "X$lib"; then
+ $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+ if test -z "$old_library"; then
+ echo
+ echo "*** And there doesn't seem to be a static archive available"
+ echo "*** The link will probably fail, sorry"
+ else
+ add=$dir/$old_library
+ fi
+ elif test -n "$old_library"; then
+ add=$dir/$old_library
+ fi
+ fi
+ esac
+ elif test no = "$hardcode_minus_L"; then
+ case $host in
+ *-*-sunos*) add_shlibpath=$dir ;;
+ esac
+ add_dir=-L$dir
+ add=-l$name
+ elif test no = "$hardcode_shlibpath_var"; then
+ add_shlibpath=$dir
+ add=-l$name
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test yes = "$hardcode_direct" &&
+ test no = "$hardcode_direct_absolute"; then
+ add=$dir/$linklib
+ elif test yes = "$hardcode_minus_L"; then
+ add_dir=-L$absdir
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ func_append add_dir " -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add=-l$name
+ elif test yes = "$hardcode_shlibpath_var"; then
+ add_shlibpath=$dir
+ add=-l$name
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test yes != "$lib_linked"; then
+ func_fatal_configuration "unsupported hardcode properties"
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) func_append compile_shlibpath "$add_shlibpath:" ;;
+ esac
+ fi
+ if test prog = "$linkmode"; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test yes != "$hardcode_direct" &&
+ test yes != "$hardcode_minus_L" &&
+ test yes = "$hardcode_shlibpath_var"; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
+ esac
+ fi
+ fi
+ fi
+
+ if test prog = "$linkmode" || test relink = "$opt_mode"; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
+ if test yes = "$hardcode_direct" &&
+ test no = "$hardcode_direct_absolute"; then
+ add=$libdir/$linklib
+ elif test yes = "$hardcode_minus_L"; then
+ add_dir=-L$libdir
+ add=-l$name
+ elif test yes = "$hardcode_shlibpath_var"; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
+ esac
+ add=-l$name
+ elif test yes = "$hardcode_automatic"; then
+ if test -n "$inst_prefix_dir" &&
+ test -f "$inst_prefix_dir$libdir/$linklib"; then
+ add=$inst_prefix_dir$libdir/$linklib
+ else
+ add=$libdir/$linklib
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir=-L$libdir
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ func_append add_dir " -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add=-l$name
+ fi
+
+ if test prog = "$linkmode"; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
+ fi
+ elif test prog = "$linkmode"; then
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
+ # is not unsupported. This is valid on all known static and
+ # shared platforms.
+ if test unsupported != "$hardcode_direct"; then
+ test -n "$old_library" && linklib=$old_library
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
+ else
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+ fi
+ elif test yes = "$build_libtool_libs"; then
+ # Not a shared library
+ if test pass_all != "$deplibs_check_method"; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
+
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ echo
+ $ECHO "*** Warning: This system cannot link to static lib archive $lib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have."
+ if test yes = "$module"; then
+ echo "*** But as you try to build a module library, libtool will still create "
+ echo "*** a static module, that should work as long as the dlopening application"
+ echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ if test -z "$global_symbol_pipe"; then
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** 'nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test no = "$build_old_libs"; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
+
+ if test lib = "$linkmode"; then
+ if test -n "$dependency_libs" &&
+ { test yes != "$hardcode_into_libs" ||
+ test yes = "$build_old_libs" ||
+ test yes = "$link_static"; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) func_stripname '-R' '' "$libdir"
+ temp_xrpath=$func_stripname_result
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) func_append xrpath " $temp_xrpath";;
+ esac;;
+ *) func_append temp_deplibs " $libdir";;
+ esac
+ done
+ dependency_libs=$temp_deplibs
+ fi
+
+ func_append newlib_search_path " $absdir"
+ # Link against this library
+ test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result";;
+ *) func_resolve_sysroot "$deplib" ;;
+ esac
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $func_resolve_sysroot_result "*)
+ func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+ esac
+ fi
+ func_append tmp_libs " $func_resolve_sysroot_result"
+ done
+
+ if test no != "$link_all_deplibs"; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ path=
+ case $deplib in
+ -L*) path=$deplib ;;
+ *.la)
+ func_resolve_sysroot "$deplib"
+ deplib=$func_resolve_sysroot_result
+ func_dirname "$deplib" "" "."
+ dir=$func_dirname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ func_warning "cannot determine absolute directory name of '$dir'"
+ absdir=$dir
+ fi
+ ;;
+ esac
+ if $GREP "^installed=no" $deplib > /dev/null; then
+ case $host in
+ *-*-darwin*)
+ depdepl=
+ eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names"; then
+ for tmp in $deplibrary_names; do
+ depdepl=$tmp
+ done
+ if test -f "$absdir/$objdir/$depdepl"; then
+ depdepl=$absdir/$objdir/$depdepl
+ darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ if test -z "$darwin_install_name"; then
+ darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ fi
+ func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
+ func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
+ path=
+ fi
+ fi
+ ;;
+ *)
+ path=-L$absdir/$objdir
+ ;;
+ esac
+ else
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "'$deplib' is not a valid libtool archive"
+ test "$absdir" != "$libdir" && \
+ func_warning "'$deplib' seems to be moved"
+
+ path=-L$absdir
+ fi
+ ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$path $deplibs" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ if test link = "$pass"; then
+ if test prog = "$linkmode"; then
+ compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ fi
+ fi
+ dependency_libs=$newdependency_libs
+ if test dlpreopen = "$pass"; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
+ fi
+ if test dlopen != "$pass"; then
+ test conv = "$pass" || {
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) func_append lib_search_path " $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ }
+
+ if test prog,link = "$linkmode,$pass"; then
+ vars="compile_deplibs finalize_deplibs"
+ else
+ vars=deplibs
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) func_append tmp_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append tmp_libs " $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
+ fi
+
+ # Add Sun CC postdeps if required:
+ test CXX = "$tagname" && {
+ case $host_os in
+ linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C++ 5.9
+ func_suncc_cstd_abi
+
+ if test no != "$suncc_use_cstd_abi"; then
+ func_append postdeps ' -library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ func_cc_basename "$CC"
+ case $func_cc_basename_result in
+ CC* | sunCC*)
+ func_suncc_cstd_abi
+
+ if test no != "$suncc_use_cstd_abi"; then
+ func_append postdeps ' -library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ }
+
+ # Last step: remove runtime libs from dependency_libs
+ # (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=
+ ;;
+ esac
+ if test -n "$i"; then
+ func_append tmp_libs " $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+ done # for pass
+ if test prog = "$linkmode"; then
+ dlfiles=$newdlfiles
+ fi
+ if test prog = "$linkmode" || test lib = "$linkmode"; then
+ dlprefiles=$newdlprefiles
+ fi
+
+ case $linkmode in
+ oldlib)
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ func_warning "'-dlopen' is ignored for archives"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "'-l' and '-L' are ignored for archives" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "'-rpath' is ignored for archives"
+
+ test -n "$xrpath" && \
+ func_warning "'-R' is ignored for archives"
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info/-version-number' is ignored for archives"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for archives"
+
+ test -n "$export_symbols$export_symbols_regex" && \
+ func_warning "'-export-symbols' is ignored for archives"
+
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs=$output
+ func_append objs "$old_deplibs"
+ ;;
+
+ lib)
+ # Make sure we only generate libraries of the form 'libNAME.la'.
+ case $outputname in
+ lib*)
+ func_stripname 'lib' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ test no = "$module" \
+ && func_fatal_help "libtool library '$output' must begin with 'lib'"
+
+ if test no != "$need_lib_prefix"; then
+ # Add the "lib" prefix for modules if required
+ func_stripname '' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ else
+ func_stripname '' '.la' "$outputname"
+ libname=$func_stripname_result
+ fi
+ ;;
+ esac
+
+ if test -n "$objs"; then
+ if test pass_all != "$deplibs_check_method"; then
+ func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
+ else
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+ $ECHO "*** objects $objs is not portable!"
+ func_append libobjs " $objs"
+ fi
+ fi
+
+ test no = "$dlself" \
+ || func_warning "'-dlopen self' is ignored for libtool libraries"
+
+ set dummy $rpath
+ shift
+ test 1 -lt "$#" \
+ && func_warning "ignoring multiple '-rpath's for a libtool library"
+
+ install_libdir=$1
+
+ oldlibs=
+ if test -z "$rpath"; then
+ if test yes = "$build_libtool_libs"; then
+ # Building a libtool convenience library.
+ # Some compilers have problems with a '.al' extension so
+ # convenience libraries should have the same extension an
+ # archive normally would.
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ build_libtool_libs=convenience
+ build_old_libs=yes
+ fi
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info/-version-number' is ignored for convenience libraries"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for convenience libraries"
+ else
+
+ # Parse the version information argument.
+ save_ifs=$IFS; IFS=:
+ set dummy $vinfo 0 0 0
+ shift
+ IFS=$save_ifs
+
+ test -n "$7" && \
+ func_fatal_help "too many parameters to '-version-info'"
+
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major=$1
+ number_minor=$2
+ number_revision=$3
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # that has an extra 1 added just for fun
+ #
+ case $version_type in
+ # correct linux to gnu/linux during the next big refactor
+ darwin|freebsd-elf|linux|osf|windows|none)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age=$number_minor
+ revision=$number_revision
+ ;;
+ freebsd-aout|qnx|sunos)
+ current=$number_major
+ revision=$number_minor
+ age=0
+ ;;
+ irix|nonstopux)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age=$number_minor
+ revision=$number_minor
+ lt_irix_increment=no
+ ;;
+ *)
+ func_fatal_configuration "$modename: unknown library version type '$version_type'"
+ ;;
+ esac
+ ;;
+ no)
+ current=$1
+ revision=$2
+ age=$3
+ ;;
+ esac
+
+ # Check that each of the things are valid numbers.
+ case $current in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "CURRENT '$current' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $revision in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "REVISION '$revision' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $age in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "AGE '$age' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ if test "$age" -gt "$current"; then
+ func_error "AGE '$age' is greater than the current interface number '$current'"
+ func_fatal_error "'$vinfo' is not valid version information"
+ fi
+
+ # Calculate the version variables.
+ major=
+ versuffix=
+ verstring=
+ case $version_type in
+ none) ;;
+
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ # Darwin ld doesn't like 0 for these options...
+ func_arith $current + 1
+ minor_current=$func_arith_result
+ xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ # On Darwin other compilers
+ case $CC in
+ nagfor*)
+ verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ ;;
+ *)
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+ esac
+ ;;
+
+ freebsd-aout)
+ major=.$current
+ versuffix=.$current.$revision
+ ;;
+
+ freebsd-elf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ ;;
+
+ irix | nonstopux)
+ if test no = "$lt_irix_increment"; then
+ func_arith $current - $age
+ else
+ func_arith $current - $age + 1
+ fi
+ major=$func_arith_result
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring=$verstring_prefix$major.$revision
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$revision
+ while test 0 -ne "$loop"; do
+ func_arith $revision - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring=$verstring_prefix$major.$iface:$verstring
+ done
+
+ # Before this point, $major must not contain '.'.
+ major=.$major
+ versuffix=$major.$revision
+ ;;
+
+ linux) # correct to gnu/linux during the next big refactor
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ ;;
+
+ osf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=.$current.$age.$revision
+ verstring=$current.$age.$revision
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$age
+ while test 0 -ne "$loop"; do
+ func_arith $current - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring=$verstring:$iface.0
+ done
+
+ # Make executables depend on our current version.
+ func_append verstring ":$current.0"
+ ;;
+
+ qnx)
+ major=.$current
+ versuffix=.$current
+ ;;
+
+ sco)
+ major=.$current
+ versuffix=.$current
+ ;;
+
+ sunos)
+ major=.$current
+ versuffix=.$current.$revision
+ ;;
+
+ windows)
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 file systems.
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix=-$major
+ ;;
+
+ *)
+ func_fatal_configuration "unknown library version type '$version_type'"
+ ;;
+ esac
+
+ # Clear the version info if we defaulted, and they specified a release.
+ if test -z "$vinfo" && test -n "$release"; then
+ major=
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring=0.0
+ ;;
+ esac
+ if test no = "$need_version"; then
+ versuffix=
+ else
+ versuffix=.0.0
+ fi
+ fi
+
+ # Remove version info from name if versioning should be avoided
+ if test yes,no = "$avoid_version,$need_version"; then
+ major=
+ versuffix=
+ verstring=
+ fi
+
+ # Check to see if the archive will have undefined symbols.
+ if test yes = "$allow_undefined"; then
+ if test unsupported = "$allow_undefined_flag"; then
+ if test yes = "$build_old_libs"; then
+ func_warning "undefined symbols not allowed in $host shared libraries; building static only"
+ build_libtool_libs=no
+ else
+ func_fatal_error "can't build $host shared library unless -no-undefined is specified"
+ fi
+ fi
+ else
+ # Don't allow undefined symbols.
+ allow_undefined_flag=$no_undefined_flag
+ fi
+
+ fi
+
+ func_generate_dlsyms "$libname" "$libname" :
+ func_append libobjs " $symfileobj"
+ test " " = "$libobjs" && libobjs=
+
+ if test relink != "$opt_mode"; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$ECHO "$output_objdir/*"`
+ for p in $tempremovelist; do
+ case $p in
+ *.$objext | *.gcno)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
+ if test -n "$precious_files_regex"; then
+ if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+ then
+ continue
+ fi
+ fi
+ func_append removelist " $p"
+ ;;
+ *) ;;
+ esac
+ done
+ test -n "$removelist" && \
+ func_show_eval "${RM}r \$removelist"
+ fi
+
+ # Now set the variables for building old libraries.
+ if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
+ func_append oldlibs " $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
+ fi
+
+ # Eliminate all temporary directories.
+ #for path in $notinst_path; do
+ # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+ # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+ # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
+ #done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ func_replace_sysroot "$libdir"
+ func_append temp_xrpath " -R$func_replace_sysroot_result"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+ if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles=$dlfiles
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) func_append dlfiles " $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles=$dlprefiles
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) func_append dlprefiles " $lib" ;;
+ esac
+ done
+
+ if test yes = "$build_libtool_libs"; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ func_append deplibs " System.ltframework"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ # Do not include libc due to us having libc/libc_r.
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test yes = "$build_libtool_need_lc"; then
+ func_append deplibs " -lc"
+ fi
+ ;;
+ esac
+ fi
+
+ # Transform deplibs into only deplibs that can be linked in shared.
+ name_save=$name
+ libname_save=$libname
+ release_save=$release
+ versuffix_save=$versuffix
+ major_save=$major
+ # I'm not sure if I'm treating the release correctly. I think
+ # release should show up in the -l (ie -lgmp5) so we don't want to
+ # add it in twice. Is that correct?
+ release=
+ versuffix=
+ major=
+ newdeplibs=
+ droppeddeps=no
+ case $deplibs_check_method in
+ pass_all)
+ # Don't check for shared/static. Everything works.
+ # This might be a little naive. We might want to check
+ # whether the library exists or not. But this is on
+ # osf3 & osf4 and I'm not really sure... Just
+ # implementing what was already the behavior.
+ newdeplibs=$deplibs
+ ;;
+ test_compile)
+ # This code stresses the "libraries are programs" paradigm to its
+ # limits. Maybe even breaks it. We compile a program, linking it
+ # against the deplibs as a proxy for the library. Then we can check
+ # whether they linked in statically or dynamically with ldd.
+ $opt_dry_run || $RM conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ func_append newdeplibs " $i"
+ i=
+ ;;
+ esac
+ fi
+ if test -n "$i"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which I believe you do not have"
+ echo "*** because a test_compile did reveal that the linker did not use it for"
+ echo "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
+ fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+ else
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+ ldd_output=`ldd conftest`
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ func_append newdeplibs " $i"
+ i=
+ ;;
+ esac
+ fi
+ if test -n "$i"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because a test_compile did reveal that the linker did not use this one"
+ echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
+ fi
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
+ echo "*** make it link in! You will probably need to install it or some"
+ echo "*** library that it depends on before this library will be fully"
+ echo "*** functional. Installing it before continuing would be even better."
+ fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method; shift
+ file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ if test -n "$file_magic_glob"; then
+ libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+ else
+ libnameglob=$libname
+ fi
+ test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ if test yes = "$want_nocaseglob"; then
+ shopt -s nocaseglob
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+ $nocaseglob
+ else
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+ fi
+ for potent_lib in $potential_libs; do
+ # Follow soft links.
+ if ls -lLd "$potent_lib" 2>/dev/null |
+ $GREP " -> " >/dev/null; then
+ continue
+ fi
+ # The statement above tries to avoid entering an
+ # endless loop below, in case of cyclic links.
+ # We might still enter an endless loop, since a link
+ # loop can be closed while we follow links,
+ # but so what?
+ potlib=$potent_lib
+ while test -h "$potlib" 2>/dev/null; do
+ potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
+ case $potliblink in
+ [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
+ *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+ $SED -e 10q |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib"; then
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib"; then
+ $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a file magic. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib=$potent_lib # see symlink-check above in file_magic test
+ if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+ $EGREP "$match_pattern_regex" > /dev/null; then
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib"; then
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib"; then
+ $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a regex pattern. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ none | unknown | *)
+ newdeplibs=
+ tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ for i in $predeps $postdeps; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
+ done
+ fi
+ case $tmp_deplibs in
+ *[!\ \ ]*)
+ echo
+ if test none = "$deplibs_check_method"; then
+ echo "*** Warning: inter-library dependencies are not supported in this platform."
+ else
+ echo "*** Warning: inter-library dependencies are not known to be supported."
+ fi
+ echo "*** All declared inter-library dependencies are being dropped."
+ droppeddeps=yes
+ ;;
+ esac
+ ;;
+ esac
+ versuffix=$versuffix_save
+ major=$major_save
+ release=$release_save
+ libname=$libname_save
+ name=$name_save
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library with the System framework
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ if test yes = "$droppeddeps"; then
+ if test yes = "$module"; then
+ echo
+ echo "*** Warning: libtool could not satisfy all declared inter-library"
+ $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
+ echo "*** a static module, that should work as long as the dlopening"
+ echo "*** application is linked with the -dlopen flag."
+ if test -z "$global_symbol_pipe"; then
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** 'nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test no = "$build_old_libs"; then
+ oldlibs=$output_objdir/$libname.$libext
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ else
+ echo "*** The inter-library dependencies that have been dropped here will be"
+ echo "*** automatically added whenever a program is linked with this library"
+ echo "*** or is declared to -dlopen it."
+
+ if test no = "$allow_undefined"; then
+ echo
+ echo "*** Since this library must not contain undefined symbols,"
+ echo "*** because either the platform does not support them or"
+ echo "*** it was explicitly requested with -no-undefined,"
+ echo "*** libtool will only create a static version of it."
+ if test no = "$build_old_libs"; then
+ oldlibs=$output_objdir/$libname.$libext
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ fi
+ fi
+ # Done checking deplibs!
+ deplibs=$newdeplibs
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ case $host in
+ *-*-darwin*)
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $deplibs " in
+ *" -L$path/$objdir "*)
+ func_append new_libs " -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ done
+ deplibs=$new_libs
+
+ # All the library-specific variables (install_libdir is set above).
+ library_names=
+ old_library=
+ dlname=
+
+ # Test again, we may have decided not to build it any more
+ if test yes = "$build_libtool_libs"; then
+ # Remove $wl instances when linking with ld.
+ # FIXME: should test the right _cmds variable.
+ case $archive_cmds in
+ *\$LD\ *) wl= ;;
+ esac
+ if test yes = "$hardcode_into_libs"; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath=$finalize_rpath
+ test relink = "$opt_mode" || rpath=$compile_rpath$rpath
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ func_replace_sysroot "$libdir"
+ libdir=$func_replace_sysroot_result
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append dep_rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append perm_rpath " $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath=$finalize_shlibpath
+ test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
+ # Get the real and link names of the library.
+ eval shared_ext=\"$shrext_cmds\"
+ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ shift
+ realname=$1
+ shift
+
+ if test -n "$soname_spec"; then
+ eval soname=\"$soname_spec\"
+ else
+ soname=$realname
+ fi
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
+
+ lib=$output_objdir/$realname
+ linknames=
+ for link
+ do
+ func_append linknames " $link"
+ done
+
+ # Use standard objects if they are pic
+ test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ test "X$libobjs" = "X " && libobjs=
+
+ delfiles=
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+ export_symbols=$output_objdir/$libname.uexp
+ func_append delfiles " $export_symbols"
+ fi
+
+ orig_export_symbols=
+ case $host_os in
+ cygwin* | mingw* | cegcc*)
+ if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ # exporting using user supplied symfile
+ func_dll_def_p "$export_symbols" || {
+ # and it's NOT already a .def file. Must figure out
+ # which of the given symbols are data symbols and tag
+ # them as such. So, trigger use of export_symbols_cmds.
+ # export_symbols gets reassigned inside the "prepare
+ # the list of exported symbols" if statement, so the
+ # include_expsyms logic still works.
+ orig_export_symbols=$export_symbols
+ export_symbols=
+ always_export_symbols=yes
+ }
+ fi
+ ;;
+ esac
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
+ func_verbose "generating symbol list for '$libname.la'"
+ export_symbols=$output_objdir/$libname.exp
+ $opt_dry_run || $RM $export_symbols
+ cmds=$export_symbols_cmds
+ save_ifs=$IFS; IFS='~'
+ for cmd1 in $cmds; do
+ IFS=$save_ifs
+ # Take the normal branch if the nm_file_list_spec branch
+ # doesn't work or if tool conversion is not needed.
+ case $nm_file_list_spec~$to_tool_file_cmd in
+ *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+ try_normal_branch=yes
+ eval cmd=\"$cmd1\"
+ func_len " $cmd"
+ len=$func_len_result
+ ;;
+ *)
+ try_normal_branch=no
+ ;;
+ esac
+ if test yes = "$try_normal_branch" \
+ && { test "$len" -lt "$max_cmd_len" \
+ || test "$max_cmd_len" -le -1; }
+ then
+ func_show_eval "$cmd" 'exit $?'
+ skipped_export=false
+ elif test -n "$nm_file_list_spec"; then
+ func_basename "$output"
+ output_la=$func_basename_result
+ save_libobjs=$libobjs
+ save_output=$output
+ output=$output_objdir/$output_la.nm
+ func_to_tool_file "$output"
+ libobjs=$nm_file_list_spec$func_to_tool_file_result
+ func_append delfiles " $output"
+ func_verbose "creating $NM input file list: $output"
+ for obj in $save_libobjs; do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result"
+ done > "$output"
+ eval cmd=\"$cmd1\"
+ func_show_eval "$cmd" 'exit $?'
+ output=$save_output
+ libobjs=$save_libobjs
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ func_verbose "using reloadable object file for export list..."
+ skipped_export=:
+ # Break out early, otherwise skipped_export may be
+ # set to false by a later but shorter cmd.
+ break
+ fi
+ done
+ IFS=$save_ifs
+ if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols=$export_symbols
+ test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands, which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ func_append tmp_deplibs " $test_deplib"
+ ;;
+ esac
+ done
+ deplibs=$tmp_deplibs
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec" &&
+ test yes = "$compiler_needs_object" &&
+ test -z "$libobjs"; then
+ # extract the archives, so we have objects to list.
+ # TODO: could optimize this to just extract one archive.
+ whole_archive_flag_spec=
+ fi
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ else
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $convenience
+ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ fi
+
+ if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ func_append linker_flags " $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+ if test relink = "$opt_mode"; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+ fi
+
+ # Do each of the archive commands.
+ if test yes = "$module" && test -n "$module_cmds"; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval test_cmds=\"$module_expsym_cmds\"
+ cmds=$module_expsym_cmds
+ else
+ eval test_cmds=\"$module_cmds\"
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval test_cmds=\"$archive_expsym_cmds\"
+ cmds=$archive_expsym_cmds
+ else
+ eval test_cmds=\"$archive_cmds\"
+ cmds=$archive_cmds
+ fi
+ fi
+
+ if test : != "$skipped_export" &&
+ func_len " $test_cmds" &&
+ len=$func_len_result &&
+ test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise
+ # or, if using GNU ld and skipped_export is not :, use a linker
+ # script.
+
+ # Save the value of $output and $libobjs because we want to
+ # use them later. If we have whole_archive_flag_spec, we
+ # want to use save_libobjs as it was before
+ # whole_archive_flag_spec was expanded, because we can't
+ # assume the linker understands whole_archive_flag_spec.
+ # This may have to be revisited, in case too many
+ # convenience libraries get linked in and end up exceeding
+ # the spec.
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ fi
+ save_output=$output
+ func_basename "$output"
+ output_la=$func_basename_result
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ last_robj=
+ k=1
+
+ if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
+ output=$output_objdir/$output_la.lnkscript
+ func_verbose "creating GNU ld script: $output"
+ echo 'INPUT (' > $output
+ for obj in $save_libobjs
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ echo ')' >> $output
+ func_append delfiles " $output"
+ func_to_tool_file "$output"
+ output=$func_to_tool_file_result
+ elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
+ output=$output_objdir/$output_la.lnk
+ func_verbose "creating linker input file list: $output"
+ : > $output
+ set x $save_libobjs
+ shift
+ firstobj=
+ if test yes = "$compiler_needs_object"; then
+ firstobj="$1 "
+ shift
+ fi
+ for obj
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ func_append delfiles " $output"
+ func_to_tool_file "$output"
+ output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+ else
+ if test -n "$save_libobjs"; then
+ func_verbose "creating reloadable object files..."
+ output=$output_objdir/$output_la-$k.$objext
+ eval test_cmds=\"$reload_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ if test -z "$objlist" ||
+ test "$len" -lt "$max_cmd_len"; then
+ func_append objlist " $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test 1 -eq "$k"; then
+ # The first file doesn't have a previous command to add.
+ reload_objs=$objlist
+ eval concat_cmds=\"$reload_cmds\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+ fi
+ last_robj=$output_objdir/$output_la-$k.$objext
+ func_arith $k + 1
+ k=$func_arith_result
+ output=$output_objdir/$output_la-$k.$objext
+ objlist=" $obj"
+ func_len " $last_robj"
+ func_arith $len0 + $func_len_result
+ len=$func_arith_result
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\$concat_cmds$reload_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ func_append delfiles " $output"
+
+ else
+ output=
+ fi
+
+ ${skipped_export-false} && {
+ func_verbose "generating symbol list for '$libname.la'"
+ export_symbols=$output_objdir/$libname.exp
+ $opt_dry_run || $RM $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ }
+
+ test -n "$save_libobjs" &&
+ func_verbose "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs=$IFS; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS=$save_ifs
+ $opt_quiet || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS=$save_ifs
+
+ if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+
+ ${skipped_export-false} && {
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols=$export_symbols
+ test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands, which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+ }
+
+ libobjs=$output
+ # Restore the value of output.
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ # Expand the library linking commands again to reset the
+ # value of $libobjs for piecewise linking.
+
+ # Do each of the archive commands.
+ if test yes = "$module" && test -n "$module_cmds"; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ cmds=$module_expsym_cmds
+ else
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ cmds=$archive_expsym_cmds
+ else
+ cmds=$archive_cmds
+ fi
+ fi
+ fi
+
+ if test -n "$delfiles"; then
+ # Append the command to remove temporary files to $cmds.
+ eval cmds=\"\$cmds~\$RM $delfiles\"
+ fi
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+
+ save_ifs=$IFS; IFS='~'
+ for cmd in $cmds; do
+ IFS=$sp$nl
+ eval cmd=\"$cmd\"
+ IFS=$save_ifs
+ $opt_quiet || {
+ func_quote_for_expand "$cmd"
+ eval "func_echo $func_quote_for_expand_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS=$save_ifs
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+ if test -n "$convenience"; then
+ if test -z "$whole_archive_flag_spec"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ # Create links to the real library.
+ for linkname in $linknames; do
+ if test "$realname" != "$linkname"; then
+ func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+ fi
+ done
+
+ # If -module or -export-dynamic was specified, set the dlname.
+ if test yes = "$module" || test yes = "$export_dynamic"; then
+ # On all known operating systems, these are identical.
+ dlname=$soname
+ fi
+ fi
+ ;;
+
+ obj)
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ func_warning "'-dlopen' is ignored for objects"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "'-l' and '-L' are ignored for objects" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "'-rpath' is ignored for objects"
+
+ test -n "$xrpath" && \
+ func_warning "'-R' is ignored for objects"
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info' is ignored for objects"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for objects"
+
+ case $output in
+ *.lo)
+ test -n "$objs$old_deplibs" && \
+ func_fatal_error "cannot build library object '$output' from non-libtool objects"
+
+ libobj=$output
+ func_lo2o "$libobj"
+ obj=$func_lo2o_result
+ ;;
+ *)
+ libobj=
+ obj=$output
+ ;;
+ esac
+
+ # Delete the old objects.
+ $opt_dry_run || $RM $obj $libobj
+
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # if reload_cmds runs $LD directly, get rid of -Wl from
+ # whole_archive_flag_spec and hope we can get by with turning comma
+ # into space.
+ case $reload_cmds in
+ *\$LD[\ \$]*) wl= ;;
+ esac
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+ test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+ reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
+ else
+ gentop=$output_objdir/${obj}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $convenience
+ reload_conv_objs="$reload_objs $func_extract_archives_result"
+ fi
+ fi
+
+ # If we're not building shared, we need to use non_pic_objs
+ test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
+
+ # Create the old-style object.
+ reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
+
+ output=$obj
+ func_execute_cmds "$reload_cmds" 'exit $?'
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ test yes = "$build_libtool_libs" || {
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ # $show "echo timestamp > $libobj"
+ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+ exit $EXIT_SUCCESS
+ }
+
+ if test -n "$pic_flag" || test default != "$pic_mode"; then
+ # Only do commands if we really have different PIC objects.
+ reload_objs="$libobjs $reload_conv_objs"
+ output=$libobj
+ func_execute_cmds "$reload_cmds" 'exit $?'
+ fi
+
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ ;;
+
+ prog)
+ case $host in
+ *cygwin*) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result.exe;;
+ esac
+ test -n "$vinfo" && \
+ func_warning "'-version-info' is ignored for programs"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for programs"
+
+ $preload \
+ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
+ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ case $host in
+ *-*-darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ # But is supposedly fixed on 10.4 or later (yay!).
+ if test CXX = "$tagname"; then
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[0123])
+ func_append compile_command " $wl-bind_at_load"
+ func_append finalize_command " $wl-bind_at_load"
+ ;;
+ esac
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $compile_deplibs " in
+ *" -L$path/$objdir "*)
+ func_append new_libs " -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $compile_deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ done
+ compile_deplibs=$new_libs
+
+
+ func_append compile_command " $compile_deplibs"
+ func_append finalize_command " $finalize_deplibs"
+
+ if test -n "$rpath$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ for libdir in $rpath $xrpath; do
+ # This is the magic to use -rpath.
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+ fi
+
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append perm_rpath " $libdir" ;;
+ esac
+ fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ ::) dllsearchpath=$libdir;;
+ *) func_append dllsearchpath ":$libdir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) func_append dllsearchpath ":$testbindir";;
+ esac
+ ;;
+ esac
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath=$rpath
+
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_perm_rpath " $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ finalize_rpath=$rpath
+
+ if test -n "$libobjs" && test yes = "$build_old_libs"; then
+ # Transform all the library objects into standard objects.
+ compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ fi
+
+ func_generate_dlsyms "$outputname" "@PROGRAM@" false
+
+ # template prelinking step
+ if test -n "$prelink_cmds"; then
+ func_execute_cmds "$prelink_cmds" 'exit $?'
+ fi
+
+ wrappers_required=:
+ case $host in
+ *cegcc* | *mingw32ce*)
+ # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+ wrappers_required=false
+ ;;
+ *cygwin* | *mingw* )
+ test yes = "$build_libtool_libs" || wrappers_required=false
+ ;;
+ *)
+ if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
+ wrappers_required=false
+ fi
+ ;;
+ esac
+ $wrappers_required || {
+ # Replace the output file specification.
+ compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ link_command=$compile_command$compile_rpath
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ exit_status=0
+ func_show_eval "$link_command" 'exit_status=$?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ # Delete the generated files.
+ if test -f "$output_objdir/${outputname}S.$objext"; then
+ func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
+ fi
+
+ exit $exit_status
+ }
+
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+ fi
+ if test -n "$finalize_shlibpath"; then
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+ fi
+
+ compile_var=
+ finalize_var=
+ if test -n "$runpath_var"; then
+ if test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ if test -n "$finalize_perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ fi
+
+ if test yes = "$no_install"; then
+ # We don't need to create a wrapper script.
+ link_command=$compile_var$compile_command$compile_rpath
+ # Replace the output file specification.
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $opt_dry_run || $RM $output
+ # Link the executable and exit
+ func_show_eval "$link_command" 'exit $?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ case $hardcode_action,$fast_install in
+ relink,*)
+ # Fast installation is not supported
+ link_command=$compile_var$compile_command$compile_rpath
+ relink_command=$finalize_var$finalize_command$finalize_rpath
+
+ func_warning "this platform does not like uninstalled shared libraries"
+ func_warning "'$output' will be relinked during installation"
+ ;;
+ *,yes)
+ link_command=$finalize_var$compile_command$finalize_rpath
+ relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+ ;;
+ *,no)
+ link_command=$compile_var$compile_command$compile_rpath
+ relink_command=$finalize_var$finalize_command$finalize_rpath
+ ;;
+ *,needless)
+ link_command=$finalize_var$compile_command$finalize_rpath
+ relink_command=
+ ;;
+ esac
+
+ # Replace the output file specification.
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+ # Delete the old output files.
+ $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ func_show_eval "$link_command" 'exit $?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output_objdir/$outputname"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ # Now create the wrapper script.
+ func_verbose "creating $output"
+
+ # Quote the relink command for shipping.
+ if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
+ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+ fi
+
+ # Only actually do things if not in dry run mode.
+ $opt_dry_run || {
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ func_stripname '' '.exe' "$outputname"
+ outputname=$func_stripname_result ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ func_dirname_and_basename "$output" "" "."
+ output_name=$func_basename_result
+ output_path=$func_dirname_result
+ cwrappersource=$output_path/$objdir/lt-$output_name.c
+ cwrapper=$output_path/$output_name.exe
+ $RM $cwrappersource $cwrapper
+ trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_cwrapperexe_src > $cwrappersource
+
+ # The wrapper executable is built using the $host compiler,
+ # because it contains $host paths and files. If cross-
+ # compiling, it, like the target executable, must be
+ # executed on the $host or under an emulation environment.
+ $opt_dry_run || {
+ $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+ $STRIP $cwrapper
+ }
+
+ # Now, create the wrapper script for func_source use:
+ func_ltwrapper_scriptname $cwrapper
+ $RM $func_ltwrapper_scriptname_result
+ trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+ $opt_dry_run || {
+ # note: this script will not be executed, so do not chmod.
+ if test "x$build" = "x$host"; then
+ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+ else
+ func_emit_wrapper no > $func_ltwrapper_scriptname_result
+ fi
+ }
+ ;;
+ * )
+ $RM $output
+ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_wrapper no > $output
+ chmod +x $output
+ ;;
+ esac
+ }
+ exit $EXIT_SUCCESS
+ ;;
+ esac
+
+ # See if we need to build an old-fashioned archive.
+ for oldlib in $oldlibs; do
+
+ case $build_libtool_libs in
+ convenience)
+ oldobjs="$libobjs_save $symfileobj"
+ addlibs=$convenience
+ build_libtool_libs=no
+ ;;
+ module)
+ oldobjs=$libobjs_save
+ addlibs=$old_convenience
+ build_libtool_libs=no
+ ;;
+ *)
+ oldobjs="$old_deplibs $non_pic_objects"
+ $preload && test -f "$symfileobj" \
+ && func_append oldobjs " $symfileobj"
+ addlibs=$old_convenience
+ ;;
+ esac
+
+ if test -n "$addlibs"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $addlibs
+ func_append oldobjs " $func_extract_archives_result"
+ fi
+
+ # Do each command in the archive commands.
+ if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
+ cmds=$old_archive_from_new_cmds
+ else
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ func_append oldobjs " $func_extract_archives_result"
+ fi
+
+ # POSIX demands no paths to be encoded in archives. We have
+ # to avoid creating archives with duplicate basenames if we
+ # might have to extract them afterwards, e.g., when creating a
+ # static archive out of a convenience library, or when linking
+ # the entirety of a libtool archive into another (currently
+ # not supported by libtool).
+ if (for obj in $oldobjs
+ do
+ func_basename "$obj"
+ $ECHO "$func_basename_result"
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ echo "copying selected object files to avoid basename conflicts..."
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+ func_mkdir_p "$gentop"
+ save_oldobjs=$oldobjs
+ oldobjs=
+ counter=1
+ for obj in $save_oldobjs
+ do
+ func_basename "$obj"
+ objbase=$func_basename_result
+ case " $oldobjs " in
+ " ") oldobjs=$obj ;;
+ *[\ /]"$objbase "*)
+ while :; do
+ # Make sure we don't pick an alternate name that also
+ # overlaps.
+ newobj=lt$counter-$objbase
+ func_arith $counter + 1
+ counter=$func_arith_result
+ case " $oldobjs " in
+ *[\ /]"$newobj "*) ;;
+ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+ esac
+ done
+ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+ func_append oldobjs " $gentop/$newobj"
+ ;;
+ *) func_append oldobjs " $obj" ;;
+ esac
+ done
+ fi
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
+ eval cmds=\"$old_archive_cmds\"
+
+ func_len " $cmds"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ cmds=$old_archive_cmds
+ elif test -n "$archiver_list_spec"; then
+ func_verbose "using command file archive linking..."
+ for obj in $oldobjs
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result"
+ done > $output_objdir/$libname.libcmd
+ func_to_tool_file "$output_objdir/$libname.libcmd"
+ oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+ cmds=$old_archive_cmds
+ else
+ # the command line is too long to link in one step, link in parts
+ func_verbose "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+ oldobjs=
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ eval test_cmds=\"$old_archive_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+ for obj in $save_oldobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ func_append objlist " $obj"
+ if test "$len" -lt "$max_cmd_len"; then
+ :
+ else
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj"; then
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
+ objlist=
+ len=$len0
+ fi
+ done
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test -z "$oldobjs"; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+ fi
+ fi
+ fi
+ func_execute_cmds "$cmds" 'exit $?'
+ done
+
+ test -n "$generated" && \
+ func_show_eval "${RM}r$generated"
+
+ # Now create the libtool archive.
+ case $output in
+ *.la)
+ old_library=
+ test yes = "$build_old_libs" && old_library=$libname.$libext
+ func_verbose "creating $output"
+
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_for_eval "$var_value"
+ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+ if test yes = "$hardcode_automatic"; then
+ relink_command=
+ fi
+
+ # Only create the output if not a dry run.
+ $opt_dry_run || {
+ for installed in no yes; do
+ if test yes = "$installed"; then
+ if test -z "$install_libdir"; then
+ break
+ fi
+ output=$output_objdir/${outputname}i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ func_basename "$deplib"
+ name=$func_basename_result
+ func_resolve_sysroot "$deplib"
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+ test -z "$libdir" && \
+ func_fatal_error "'$deplib' is not a valid libtool archive"
+ func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ -L*)
+ func_stripname -L '' "$deplib"
+ func_replace_sysroot "$func_stripname_result"
+ func_append newdependency_libs " -L$func_replace_sysroot_result"
+ ;;
+ -R*)
+ func_stripname -R '' "$deplib"
+ func_replace_sysroot "$func_stripname_result"
+ func_append newdependency_libs " -R$func_replace_sysroot_result"
+ ;;
+ *) func_append newdependency_libs " $deplib" ;;
+ esac
+ done
+ dependency_libs=$newdependency_libs
+ newdlfiles=
+
+ for lib in $dlfiles; do
+ case $lib in
+ *.la)
+ func_basename "$lib"
+ name=$func_basename_result
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "'$lib' is not a valid libtool archive"
+ func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ *) func_append newdlfiles " $lib" ;;
+ esac
+ done
+ dlfiles=$newdlfiles
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ *.la)
+ # Only pass preopened files to the pseudo-archive (for
+ # eventual linking with the app. that links it) if we
+ # didn't already link the preopened objects directly into
+ # the library:
+ func_basename "$lib"
+ name=$func_basename_result
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "'$lib' is not a valid libtool archive"
+ func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ esac
+ done
+ dlprefiles=$newdlprefiles
+ else
+ newdlfiles=
+ for lib in $dlfiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ func_append newdlfiles " $abs"
+ done
+ dlfiles=$newdlfiles
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ func_append newdlprefiles " $abs"
+ done
+ dlprefiles=$newdlprefiles
+ fi
+ $RM $output
+ # place dlname in correct position for cygwin
+ # In fact, it would be nice if we could use this code for all target
+ # systems that can't hard-code library paths into their executables
+ # and that have no shared library path variable independent of PATH,
+ # but it turns out we can't easily determine that from inspecting
+ # libtool variables, so we have to hard-code the OSs to which it
+ # applies here; at the moment, that means platforms that use the PE
+ # object format with DLL files. See the long comment at the top of
+ # tests/bindir.at for full details.
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+ # If a -bindir argument was supplied, place the dll there.
+ if test -n "$bindir"; then
+ func_relative_path "$install_libdir" "$bindir"
+ tdlname=$func_relative_path_result/$dlname
+ else
+ # Otherwise fall back on heuristic.
+ tdlname=../bin/$dlname
+ fi
+ ;;
+ esac
+ $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that cannot go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+ if test no,yes = "$installed,$need_relink"; then
+ $ECHO >> $output "\
+relink_command=\"$relink_command\""
+ fi
+ done
+ }
+
+ # Do a symbolic link so that the libtool archive can be found in
+ # LD_LIBRARY_PATH before the program is installed.
+ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+ ;;
+ esac
+ exit $EXIT_SUCCESS
+}
+
+if test link = "$opt_mode" || test relink = "$opt_mode"; then
+ func_mode_link ${1+"$@"}
+fi
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+ $debug_cmd
+
+ RM=$nonopt
+ files=
+ rmforce=false
+ exit_status=0
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic=$magic
+
+ for arg
+ do
+ case $arg in
+ -f) func_append RM " $arg"; rmforce=: ;;
+ -*) func_append RM " $arg" ;;
+ *) func_append files " $arg" ;;
+ esac
+ done
+
+ test -z "$RM" && \
+ func_fatal_help "you must specify an RM program"
+
+ rmdirs=
+
+ for file in $files; do
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+ if test . = "$dir"; then
+ odir=$objdir
+ else
+ odir=$dir/$objdir
+ fi
+ func_basename "$file"
+ name=$func_basename_result
+ test uninstall = "$opt_mode" && odir=$dir
+
+ # Remember odir for removal later, being careful to avoid duplicates
+ if test clean = "$opt_mode"; then
+ case " $rmdirs " in
+ *" $odir "*) ;;
+ *) func_append rmdirs " $odir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if { test -L "$file"; } >/dev/null 2>&1 ||
+ { test -h "$file"; } >/dev/null 2>&1 ||
+ test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif $rmforce; then
+ continue
+ fi
+
+ rmfiles=$file
+
+ case $name in
+ *.la)
+ # Possibly a libtool archive, so verify it.
+ if func_lalib_p "$file"; then
+ func_source $dir/$name
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+ func_append rmfiles " $odir/$n"
+ done
+ test -n "$old_library" && func_append rmfiles " $odir/$old_library"
+
+ case $opt_mode in
+ clean)
+ case " $library_names " in
+ *" $dlname "*) ;;
+ *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+ esac
+ test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+ ;;
+ uninstall)
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
+ fi
+
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
+ fi
+ # FIXME: should reinstall the best remaining shared library.
+ ;;
+ esac
+ fi
+ ;;
+
+ *.lo)
+ # Possibly a libtool object, so verify it.
+ if func_lalib_p "$file"; then
+
+ # Read the .lo file
+ func_source $dir/$name
+
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" && test none != "$pic_object"; then
+ func_append rmfiles " $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" && test none != "$non_pic_object"; then
+ func_append rmfiles " $dir/$non_pic_object"
+ fi
+ fi
+ ;;
+
+ *)
+ if test clean = "$opt_mode"; then
+ noexename=$name
+ case $file in
+ *.exe)
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ func_stripname '' '.exe' "$name"
+ noexename=$func_stripname_result
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ func_append rmfiles " $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if func_ltwrapper_p "$file"; then
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ relink_command=
+ func_source $func_ltwrapper_scriptname_result
+ func_append rmfiles " $func_ltwrapper_scriptname_result"
+ else
+ relink_command=
+ func_source $dir/$noexename
+ fi
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ func_append rmfiles " $odir/$name $odir/${name}S.$objext"
+ if test yes = "$fast_install" && test -n "$relink_command"; then
+ func_append rmfiles " $odir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name"; then
+ func_append rmfiles " $odir/lt-$noexename.c"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ func_show_eval "$RM $rmfiles" 'exit_status=1'
+ done
+
+ # Try to remove the $objdir's in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ func_show_eval "rmdir $dir >/dev/null 2>&1"
+ fi
+ done
+
+ exit $exit_status
+}
+
+if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
+ func_mode_uninstall ${1+"$@"}
+fi
+
+test -z "$opt_mode" && {
+ help=$generic_help
+ func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+ func_fatal_help "invalid operation mode '$opt_mode'"
+
+if test -n "$exec_cmd"; then
+ eval exec "$exec_cmd"
+ exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# where we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
diff --git a/3rdparty/libbacktrace/macho.c b/3rdparty/libbacktrace/macho.c
new file mode 100644
index 000000000..01cdaf240
--- /dev/null
+++ b/3rdparty/libbacktrace/macho.c
@@ -0,0 +1,1432 @@
+/* macho.c -- Get debug data from an Mach-O file for backtraces.
+ Copyright (C) 2012-2016 Free Software Foundation, Inc.
+ Written by John Colanduoni.
+
+ Pending upstream pull request:
+ https://github.com/ianlancetaylor/libbacktrace/pull/2
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+/* We can't use autotools to detect the pointer width of our program because
+ we may be building a fat Mach-O file containing both 32-bit and 64-bit
+ variants. However Mach-O runs a limited set of platforms so detection
+ via preprocessor is not difficult. */
+
+#if defined(__MACH__)
+#if defined(__LP64__)
+#define BACKTRACE_BITS 64
+#else
+#define BACKTRACE_BITS 32
+#endif
+#else
+#error Attempting to build Mach-O support on incorrect platform
+#endif
+
+#if defined(__x86_64__)
+#define NATIVE_CPU_TYPE CPU_TYPE_X86_64
+#elif defined(__i386__)
+#define NATIVE_CPU_TYPE CPU_TYPE_X86
+#elif defined(__aarch64__)
+#define NATIVE_CPU_TYPE CPU_TYPE_ARM64
+#elif defined(__arm__)
+#define NATIVE_CPU_TYPE CPU_TYPE_ARM
+#else
+#error Could not detect native Mach-O cpu_type_t
+#endif
+
+#include <sys/types.h>
+#include <sys/syslimits.h>
+#include <string.h>
+#include <mach-o/loader.h>
+#include <mach-o/nlist.h>
+#include <mach-o/fat.h>
+#include <mach-o/dyld.h>
+#include <uuid/uuid.h>
+#include <dirent.h>
+#include <stdlib.h>
+
+#include "backtrace.h"
+#include "internal.h"
+
+// Pragma macro only enabled on gcc >= 8
+#if defined(__GNUC__) && (GCC_VERSION >= 8000)
+#define PRAGMA_GCC8(str) _Pragma(#str)
+#else // ! defined(__GNUC__) && (GCC_VERSION >= 8000)
+#define PRAGMA_GCC8(str)
+#endif // ! defined(__GNUC__) && (GCC_VERSION >= 8000)
+
+struct macho_commands_view
+{
+ struct backtrace_view view;
+ uint32_t commands_count;
+ uint32_t commands_total_size;
+ int bytes_swapped;
+ size_t base_offset;
+};
+
+enum debug_section
+{
+ DEBUG_INFO,
+ DEBUG_LINE,
+ DEBUG_ABBREV,
+ DEBUG_RANGES,
+ DEBUG_STR,
+ DEBUG_MAX
+};
+
+static const char *const debug_section_names[DEBUG_MAX] =
+ {
+ "__debug_info",
+ "__debug_line",
+ "__debug_abbrev",
+ "__debug_ranges",
+ "__debug_str"
+ };
+
+struct found_dwarf_section
+{
+ uint32_t file_offset;
+ uintptr_t file_size;
+ const unsigned char *data;
+};
+
+/* Mach-O symbols don't have a length. As a result we have to infer it
+ by sorting the symbol addresses for each image and recording the
+ memory range attributed to each image. */
+struct macho_symbol
+{
+ uintptr_t addr;
+ size_t size;
+ const char *name;
+};
+
+struct macho_syminfo_data
+{
+ struct macho_syminfo_data *next;
+ struct macho_symbol *symbols;
+ size_t symbol_count;
+ uintptr_t min_addr;
+ uintptr_t max_addr;
+};
+
+uint16_t
+macho_file_to_host_u16 (int file_bytes_swapped, uint16_t input)
+{
+ if (file_bytes_swapped)
+ return (input >> 8) | (input << 8);
+ else
+ return input;
+}
+
+uint32_t
+macho_file_to_host_u32 (int file_bytes_swapped, uint32_t input)
+{
+ if (file_bytes_swapped)
+ {
+ return ((input >> 24) & 0x000000FF)
+ | ((input >> 8) & 0x0000FF00)
+ | ((input << 8) & 0x00FF0000)
+ | ((input << 24) & 0xFF000000);
+ }
+ else
+ {
+ return input;
+ }
+}
+
+uint64_t
+macho_file_to_host_u64 (int file_bytes_swapped, uint64_t input)
+{
+ if (file_bytes_swapped)
+ {
+ return macho_file_to_host_u32 (file_bytes_swapped,
+ (uint32_t) (input >> 32))
+ | (((uint64_t) macho_file_to_host_u32 (file_bytes_swapped,
+ (uint32_t) input)) << 32);
+ }
+ else
+ {
+ return input;
+ }
+}
+
+#if BACKTRACE_BITS == 64
+#define macho_file_to_host_usize macho_file_to_host_u64
+typedef struct mach_header_64 mach_header_native_t;
+#define LC_SEGMENT_NATIVE LC_SEGMENT_64
+typedef struct segment_command_64 segment_command_native_t;
+typedef struct nlist_64 nlist_native_t;
+typedef struct section_64 section_native_t;
+#else /* BACKTRACE_BITS == 32 */
+#define macho_file_to_host_usize macho_file_to_host_u32
+typedef struct mach_header mach_header_native_t;
+#define LC_SEGMENT_NATIVE LC_SEGMENT
+typedef struct segment_command segment_command_native_t;
+typedef struct nlist nlist_native_t;
+typedef struct section section_native_t;
+#endif
+
+// Gets a view into a Mach-O image, taking any slice offset into account
+int
+macho_get_view (struct backtrace_state *state, int descriptor,
+ off_t offset, size_t size,
+ backtrace_error_callback error_callback,
+ void *data, struct macho_commands_view *commands_view,
+ struct backtrace_view *view)
+{
+ return backtrace_get_view (state, descriptor,
+ commands_view->base_offset + offset, size,
+ error_callback, data, view);
+}
+
+int
+macho_get_commands (struct backtrace_state *state, int descriptor,
+ backtrace_error_callback error_callback,
+ void *data, struct macho_commands_view *commands_view,
+ int *incompatible)
+{
+ int ret = 0;
+ int is_fat = 0;
+ struct backtrace_view file_header_view;
+ int file_header_view_valid = 0;
+ struct backtrace_view fat_archs_view;
+ int fat_archs_view_valid = 0;
+ const mach_header_native_t *file_header;
+ uint64_t commands_offset;
+
+ *incompatible = 0;
+
+ if (!backtrace_get_view (state, descriptor, 0, sizeof (mach_header_native_t),
+ error_callback, data, &file_header_view))
+ goto end;
+ file_header_view_valid = 1;
+
+ switch (*(const uint32_t *) file_header_view.data)
+ {
+ case MH_MAGIC:
+ if (BACKTRACE_BITS == 32)
+ commands_view->bytes_swapped = 0;
+ else
+ {
+ *incompatible = 1;
+ goto end;
+ }
+ break;
+ case MH_CIGAM:
+ if (BACKTRACE_BITS == 32)
+ commands_view->bytes_swapped = 1;
+ else
+ {
+ *incompatible = 1;
+ goto end;
+ }
+ break;
+ case MH_MAGIC_64:
+ if (BACKTRACE_BITS == 64)
+ commands_view->bytes_swapped = 0;
+ else
+ {
+ *incompatible = 1;
+ goto end;
+ }
+ break;
+ case MH_CIGAM_64:
+ if (BACKTRACE_BITS == 64)
+ commands_view->bytes_swapped = 1;
+ else
+ {
+ *incompatible = 1;
+ goto end;
+ }
+ break;
+ case FAT_MAGIC:
+ is_fat = 1;
+ commands_view->bytes_swapped = 0;
+ break;
+ case FAT_CIGAM:
+ is_fat = 1;
+ commands_view->bytes_swapped = 1;
+ break;
+ default:
+ goto end;
+ }
+
+ if (is_fat)
+ {
+ uint32_t native_slice_offset;
+ size_t archs_total_size;
+ uint32_t arch_count;
+ const struct fat_header *fat_header;
+ const struct fat_arch *archs;
+ uint32_t i;
+
+ fat_header = file_header_view.data;
+ arch_count =
+ macho_file_to_host_u32 (commands_view->bytes_swapped,
+ fat_header->nfat_arch);
+
+ archs_total_size = arch_count * sizeof (struct fat_arch);
+
+ if (!backtrace_get_view (state, descriptor, sizeof (struct fat_header),
+ archs_total_size, error_callback,
+ data, &fat_archs_view))
+ goto end;
+ fat_archs_view_valid = 1;
+
+ native_slice_offset = 0;
+ archs = fat_archs_view.data;
+ for (i = 0; i < arch_count; i++)
+ {
+ const struct fat_arch *raw_arch = archs + i;
+ int cpu_type =
+ (int) macho_file_to_host_u32 (commands_view->bytes_swapped,
+ (uint32_t) raw_arch->cputype);
+
+ if (cpu_type == NATIVE_CPU_TYPE)
+ {
+ native_slice_offset =
+ macho_file_to_host_u32 (commands_view->bytes_swapped,
+ raw_arch->offset);
+
+ break;
+ }
+ }
+
+ if (native_slice_offset == 0)
+ {
+ *incompatible = 1;
+ goto end;
+ }
+
+ backtrace_release_view (state, &file_header_view, error_callback, data);
+ file_header_view_valid = 0;
+ if (!backtrace_get_view (state, descriptor, native_slice_offset,
+ sizeof (mach_header_native_t), error_callback,
+ data, &file_header_view))
+ goto end;
+ file_header_view_valid = 1;
+
+ // The endianess of the slice may be different than the fat image
+ switch (*(const uint32_t *) file_header_view.data)
+ {
+ case MH_MAGIC:
+ if (BACKTRACE_BITS == 32)
+ commands_view->bytes_swapped = 0;
+ else
+ goto end;
+ break;
+ case MH_CIGAM:
+ if (BACKTRACE_BITS == 32)
+ commands_view->bytes_swapped = 1;
+ else
+ goto end;
+ break;
+ case MH_MAGIC_64:
+ if (BACKTRACE_BITS == 64)
+ commands_view->bytes_swapped = 0;
+ else
+ goto end;
+ break;
+ case MH_CIGAM_64:
+ if (BACKTRACE_BITS == 64)
+ commands_view->bytes_swapped = 1;
+ else
+ goto end;
+ break;
+ default:
+ goto end;
+ }
+
+ commands_view->base_offset = native_slice_offset;
+ }
+ else
+ commands_view->base_offset = 0;
+
+ file_header = file_header_view.data;
+ commands_view->commands_count =
+ macho_file_to_host_u32 (commands_view->bytes_swapped,
+ file_header->ncmds);
+ commands_view->commands_total_size =
+ macho_file_to_host_u32 (commands_view->bytes_swapped,
+ file_header->sizeofcmds);
+ commands_offset =
+ commands_view->base_offset + sizeof (mach_header_native_t);
+
+ if (!backtrace_get_view (state, descriptor, commands_offset,
+ commands_view->commands_total_size, error_callback,
+ data, &commands_view->view))
+ goto end;
+
+ ret = 1;
+
+end:
+ if (file_header_view_valid)
+ backtrace_release_view (state, &file_header_view, error_callback, data);
+ if (fat_archs_view_valid)
+ backtrace_release_view (state, &fat_archs_view, error_callback, data);
+ return ret;
+}
+
+int
+macho_get_uuid (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ int descriptor ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback,
+ void *data, struct macho_commands_view *commands_view,
+ uuid_t *uuid)
+{
+ size_t offset = 0;
+ uint32_t i = 0;
+
+ for (i = 0; i < commands_view->commands_count; i++)
+ {
+ const struct load_command *raw_command;
+ struct load_command command;
+
+ if (offset + sizeof (struct load_command)
+ > commands_view->commands_total_size)
+ {
+ error_callback (data,
+ "executable file contains out of range command offset",
+ 0);
+ return 0;
+ }
+
+ raw_command =
+ commands_view->view.data + offset;
+ command.cmd = macho_file_to_host_u32 (commands_view->bytes_swapped,
+ raw_command->cmd);
+ command.cmdsize = macho_file_to_host_u32 (commands_view->bytes_swapped,
+ raw_command->cmdsize);
+
+ if (command.cmd == LC_UUID)
+ {
+ const struct uuid_command *uuid_command;
+
+ if (offset + sizeof (struct uuid_command)
+ > commands_view->commands_total_size)
+ {
+ error_callback (data,
+ "executable file contains out of range command offset",
+ 0);
+ return 0;
+ }
+
+ uuid_command =
+ (const struct uuid_command *) raw_command;
+ memcpy (uuid, uuid_command->uuid, sizeof (uuid_t));
+ return 1;
+ }
+
+ offset += command.cmdsize;
+ }
+
+ error_callback (data, "executable file is missing an identifying UUID", 0);
+ return 0;
+}
+
+/* Returns the base address of a Mach-O image, as encoded in the file header.
+ * WARNING: This does not take ASLR into account, which is ubiquitous on recent
+ * Darwin platforms.
+ */
+int
+macho_get_addr_range (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ int descriptor ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback,
+ void *data, struct macho_commands_view *commands_view,
+ uintptr_t *base_address, uintptr_t *max_address)
+{
+ size_t offset = 0;
+ int found_text = 0;
+ uint32_t i = 0;
+
+ *max_address = 0;
+
+ for (i = 0; i < commands_view->commands_count; i++)
+ {
+ const struct load_command *raw_command;
+ struct load_command command;
+
+ if (offset + sizeof (struct load_command)
+ > commands_view->commands_total_size)
+ {
+ error_callback (data,
+ "executable file contains out of range command offset",
+ 0);
+ return 0;
+ }
+
+ raw_command = commands_view->view.data + offset;
+ command.cmd = macho_file_to_host_u32 (commands_view->bytes_swapped,
+ raw_command->cmd);
+ command.cmdsize = macho_file_to_host_u32 (commands_view->bytes_swapped,
+ raw_command->cmdsize);
+
+ if (command.cmd == LC_SEGMENT_NATIVE)
+ {
+ const segment_command_native_t *raw_segment;
+ uintptr_t segment_vmaddr;
+ uintptr_t segment_vmsize;
+ uintptr_t segment_maxaddr;
+ uintptr_t text_fileoff;
+
+ if (offset + sizeof (segment_command_native_t)
+ > commands_view->commands_total_size)
+ {
+ error_callback (data,
+ "executable file contains out of range command offset",
+ 0);
+ return 0;
+ }
+
+ raw_segment = (const segment_command_native_t *) raw_command;
+
+ segment_vmaddr = macho_file_to_host_usize (
+ commands_view->bytes_swapped, raw_segment->vmaddr);
+ segment_vmsize = macho_file_to_host_usize (
+ commands_view->bytes_swapped, raw_segment->vmsize);
+ segment_maxaddr = segment_vmaddr + segment_vmsize;
+
+ if (strncmp (raw_segment->segname, "__TEXT",
+ sizeof (raw_segment->segname)) == 0)
+ {
+ text_fileoff = macho_file_to_host_usize (
+ commands_view->bytes_swapped, raw_segment->fileoff);
+ *base_address = segment_vmaddr - text_fileoff;
+
+ found_text = 1;
+ }
+
+ if (segment_maxaddr > *max_address)
+ *max_address = segment_maxaddr;
+ }
+
+ offset += command.cmdsize;
+ }
+
+ if (found_text)
+ return 1;
+ else
+ {
+ error_callback (data, "executable is missing __TEXT segment", 0);
+ return 0;
+ }
+}
+
+static int
+macho_symbol_compare_addr (const void *left_raw, const void *right_raw)
+{
+ const struct macho_symbol *left = left_raw;
+ const struct macho_symbol *right = right_raw;
+
+ if (left->addr > right->addr)
+ return 1;
+ else if (left->addr < right->addr)
+ return -1;
+ else
+ return 0;
+}
+
+int
+macho_symbol_type_relevant (uint8_t type)
+{
+ uint8_t type_field = (uint8_t) (type & N_TYPE);
+
+ return !(type & N_EXT) &&
+ (type_field == N_ABS || type_field == N_SECT);
+}
+
+int
+macho_add_symtab (struct backtrace_state *state,
+ backtrace_error_callback error_callback,
+ void *data, int descriptor,
+ struct macho_commands_view *commands_view,
+ uintptr_t base_address, uintptr_t max_image_address,
+ intptr_t vmslide, int *found_sym)
+{
+ struct macho_syminfo_data *syminfo_data;
+
+ int ret = 0;
+ size_t offset = 0;
+ struct backtrace_view symtab_view;
+ int symtab_view_valid = 0;
+ struct backtrace_view strtab_view;
+ int strtab_view_valid = 0;
+ size_t syminfo_index = 0;
+ size_t function_count = 0;
+ uint32_t i = 0;
+ uint32_t j = 0;
+ uint32_t symtab_index = 0;
+
+ *found_sym = 0;
+
+ for (i = 0; i < commands_view->commands_count; i++)
+ {
+ const struct load_command *raw_command;
+ struct load_command command;
+
+ if (offset + sizeof (struct load_command)
+ > commands_view->commands_total_size)
+ {
+ error_callback (data,
+ "executable file contains out of range command offset",
+ 0);
+ return 0;
+ }
+
+ raw_command = commands_view->view.data + offset;
+ command.cmd = macho_file_to_host_u32 (commands_view->bytes_swapped,
+ raw_command->cmd);
+ command.cmdsize = macho_file_to_host_u32 (commands_view->bytes_swapped,
+ raw_command->cmdsize);
+
+ if (command.cmd == LC_SYMTAB)
+ {
+ const struct symtab_command *symtab_command;
+ uint32_t symbol_table_offset;
+ uint32_t symbol_count;
+ uint32_t string_table_offset;
+ uint32_t string_table_size;
+
+ if (offset + sizeof (struct symtab_command)
+ > commands_view->commands_total_size)
+ {
+ error_callback (data,
+ "executable file contains out of range command offset",
+ 0);
+ return 0;
+ }
+
+ symtab_command = (const struct symtab_command *) raw_command;
+
+ symbol_table_offset = macho_file_to_host_u32 (
+ commands_view->bytes_swapped, symtab_command->symoff);
+ symbol_count = macho_file_to_host_u32 (
+ commands_view->bytes_swapped, symtab_command->nsyms);
+ string_table_offset = macho_file_to_host_u32 (
+ commands_view->bytes_swapped, symtab_command->stroff);
+ string_table_size = macho_file_to_host_u32 (
+ commands_view->bytes_swapped, symtab_command->strsize);
+
+
+ if (!macho_get_view (state, descriptor, symbol_table_offset,
+ symbol_count * sizeof (nlist_native_t),
+ error_callback, data, commands_view,
+ &symtab_view))
+ goto end;
+ symtab_view_valid = 1;
+
+ if (!macho_get_view (state, descriptor, string_table_offset,
+ string_table_size, error_callback, data,
+ commands_view, &strtab_view))
+ goto end;
+ strtab_view_valid = 1;
+
+ // Count functions first
+ for (j = 0; j < symbol_count; j++)
+ {
+ const nlist_native_t *raw_sym =
+ ((const nlist_native_t *) symtab_view.data) + j;
+
+ if (macho_symbol_type_relevant (raw_sym->n_type))
+ {
+ function_count += 1;
+ }
+ }
+
+ // Allocate space for the:
+ // (a) macho_syminfo_data for this image
+ // (b) macho_symbol entries
+ syminfo_data =
+ backtrace_alloc (state,
+ sizeof (struct macho_syminfo_data),
+ error_callback, data);
+ if (syminfo_data == NULL)
+ goto end;
+
+ syminfo_data->symbols = backtrace_alloc (
+ state, function_count * sizeof (struct macho_symbol),
+ error_callback, data);
+ if (syminfo_data->symbols == NULL)
+ goto end;
+
+ syminfo_data->symbol_count = function_count;
+ syminfo_data->next = NULL;
+ syminfo_data->min_addr = base_address;
+ syminfo_data->max_addr = max_image_address;
+
+ for (symtab_index = 0;
+ symtab_index < symbol_count; symtab_index++)
+ {
+ const nlist_native_t *raw_sym =
+ ((const nlist_native_t *) symtab_view.data) +
+ symtab_index;
+
+ if (macho_symbol_type_relevant (raw_sym->n_type))
+ {
+ size_t strtab_index;
+ const char *name;
+ size_t max_len_plus_one;
+
+ syminfo_data->symbols[syminfo_index].addr =
+ macho_file_to_host_usize (commands_view->bytes_swapped,
+ raw_sym->n_value) + vmslide;
+
+ strtab_index = macho_file_to_host_u32 (
+ commands_view->bytes_swapped,
+ raw_sym->n_un.n_strx);
+
+ // Check the range of the supposed "string" we've been
+ // given
+ if (strtab_index >= string_table_size)
+ {
+ error_callback (
+ data,
+ "dSYM file contains out of range string table index",
+ 0);
+ goto end;
+ }
+
+ name = strtab_view.data + strtab_index;
+ max_len_plus_one = string_table_size - strtab_index;
+
+ if (strnlen (name, max_len_plus_one) >= max_len_plus_one)
+ {
+ error_callback (
+ data,
+ "dSYM file contains unterminated string",
+ 0);
+ goto end;
+ }
+
+ // Remove underscore prefixes
+ if (name[0] == '_')
+ {
+ name = name + 1;
+ }
+
+ syminfo_data->symbols[syminfo_index].name = name;
+
+ syminfo_index += 1;
+ }
+ }
+
+ backtrace_qsort (syminfo_data->symbols,
+ syminfo_data->symbol_count,
+ sizeof (struct macho_symbol),
+ macho_symbol_compare_addr);
+
+ // Calculate symbol sizes
+ for (syminfo_index = 0;
+ syminfo_index < syminfo_data->symbol_count; syminfo_index++)
+ {
+ if (syminfo_index + 1 < syminfo_data->symbol_count)
+ {
+ syminfo_data->symbols[syminfo_index].size =
+ syminfo_data->symbols[syminfo_index + 1].addr -
+ syminfo_data->symbols[syminfo_index].addr;
+ }
+ else
+ {
+ syminfo_data->symbols[syminfo_index].size =
+ max_image_address -
+ syminfo_data->symbols[syminfo_index].addr;
+ }
+ }
+
+ if (!state->threaded)
+ {
+ struct macho_syminfo_data **pp;
+
+ for (pp = (struct macho_syminfo_data **) (void *) &state->syminfo_data;
+ *pp != NULL;
+ pp = &(*pp)->next);
+ *pp = syminfo_data;
+ }
+ else
+ {
+ while (1)
+ {
+ struct macho_syminfo_data **pp;
+
+ pp = (struct macho_syminfo_data **) (void *) &state->syminfo_data;
+
+ while (1)
+ {
+ struct macho_syminfo_data *p;
+
+ p = backtrace_atomic_load_pointer (pp);
+
+ if (p == NULL)
+ break;
+
+ pp = &p->next;
+ }
+
+ if (__sync_bool_compare_and_swap (pp, NULL, syminfo_data))
+ break;
+ }
+ }
+
+ strtab_view_valid = 0; // We need to keep string table around
+ *found_sym = 1;
+ ret = 1;
+ goto end;
+ }
+
+ offset += command.cmdsize;
+ }
+
+ // No symbol table here
+ ret = 1;
+ goto end;
+
+end:
+ if (symtab_view_valid)
+ backtrace_release_view (state, &symtab_view, error_callback, data);
+ if (strtab_view_valid)
+ backtrace_release_view (state, &strtab_view, error_callback, data);
+ return ret;
+}
+
+int
+macho_try_dwarf (struct backtrace_state *state,
+ backtrace_error_callback error_callback,
+ void *data, fileline *fileline_fn, uuid_t *executable_uuid,
+ uintptr_t base_address, uintptr_t max_image_address,
+ intptr_t vmslide, char *dwarf_filename, int *matched,
+ int *found_sym, int *found_dwarf)
+{
+ uuid_t dwarf_uuid;
+
+ int ret = 0;
+ int dwarf_descriptor;
+ int dwarf_descriptor_valid = 0;
+ struct macho_commands_view commands_view;
+ int commands_view_valid = 0;
+ struct backtrace_view dwarf_view;
+ int dwarf_view_valid = 0;
+ size_t offset = 0;
+ struct found_dwarf_section dwarf_sections[DEBUG_MAX];
+ uintptr_t min_dwarf_offset = 0;
+ uintptr_t max_dwarf_offset = 0;
+ uint32_t i = 0;
+ uint32_t j = 0;
+ int k = 0;
+
+ *matched = 0;
+ *found_sym = 0;
+ *found_dwarf = 0;
+
+ if ((dwarf_descriptor = backtrace_open (dwarf_filename, error_callback,
+ data, NULL)) == 0)
+ goto end;
+ dwarf_descriptor_valid = 1;
+
+ int incompatible;
+ if (!macho_get_commands (state, dwarf_descriptor, error_callback, data,
+ &commands_view, &incompatible))
+ {
+ // Failing to read the header here is fine, because this dSYM may be
+ // for a different architecture
+ if (incompatible)
+ {
+ ret = 1;
+ }
+ goto end;
+ }
+ commands_view_valid = 1;
+
+ // Get dSYM UUID and compare
+ if (!macho_get_uuid (state, dwarf_descriptor, error_callback, data,
+ &commands_view, &dwarf_uuid))
+ {
+ error_callback (data, "dSYM file is missing an identifying uuid", 0);
+ goto end;
+ }
+ if (memcmp (executable_uuid, &dwarf_uuid, sizeof (uuid_t)) != 0)
+ {
+ // DWARF doesn't belong to desired executable
+ ret = 1;
+ goto end;
+ }
+
+ *matched = 1;
+
+ // Read symbol table
+ if (!macho_add_symtab (state, error_callback, data, dwarf_descriptor,
+ &commands_view, base_address, max_image_address,
+ vmslide, found_sym))
+ goto end;
+
+ // Get DWARF sections
+
+ memset (dwarf_sections, 0, sizeof (dwarf_sections));
+ offset = 0;
+ for (i = 0; i < commands_view.commands_count; i++)
+ {
+ const struct load_command *raw_command;
+ struct load_command command;
+
+ if (offset + sizeof (struct load_command)
+ > commands_view.commands_total_size)
+ {
+ error_callback (data,
+ "dSYM file contains out of range command offset", 0);
+ goto end;
+ }
+
+ raw_command = commands_view.view.data + offset;
+ command.cmd = macho_file_to_host_u32 (commands_view.bytes_swapped,
+ raw_command->cmd);
+ command.cmdsize = macho_file_to_host_u32 (commands_view.bytes_swapped,
+ raw_command->cmdsize);
+
+ if (command.cmd == LC_SEGMENT_NATIVE)
+ {
+ uint32_t section_count;
+ size_t section_offset;
+ const segment_command_native_t *raw_segment;
+
+ if (offset + sizeof (segment_command_native_t)
+ > commands_view.commands_total_size)
+ {
+ error_callback (data,
+ "dSYM file contains out of range command offset",
+ 0);
+ goto end;
+ }
+
+ raw_segment = (const segment_command_native_t *) raw_command;
+
+ if (strncmp (raw_segment->segname, "__DWARF",
+ sizeof (raw_segment->segname)) == 0)
+ {
+ section_count = macho_file_to_host_u32 (
+ commands_view.bytes_swapped,
+ raw_segment->nsects);
+
+ section_offset = offset + sizeof (segment_command_native_t);
+
+ // Search sections for relevant DWARF section names
+ for (j = 0; j < section_count; j++)
+ {
+ const section_native_t *raw_section;
+
+ if (section_offset + sizeof (section_native_t) >
+ commands_view.commands_total_size)
+ {
+ error_callback (data,
+ "dSYM file contains out of range command offset",
+ 0);
+ goto end;
+ }
+
+ raw_section = commands_view.view.data + section_offset;
+
+ for (k = 0; k < DEBUG_MAX; k++)
+ {
+ uintptr_t dwarf_section_end;
+
+ if (strncmp (raw_section->sectname,
+ debug_section_names[k],
+ sizeof (raw_section->sectname)) == 0)
+ {
+ *found_dwarf = 1;
+
+ dwarf_sections[k].file_offset =
+ macho_file_to_host_u32 (
+ commands_view.bytes_swapped,
+ raw_section->offset);
+ dwarf_sections[k].file_size =
+ macho_file_to_host_usize (
+ commands_view.bytes_swapped,
+ raw_section->size);
+
+ if (min_dwarf_offset == 0 ||
+ dwarf_sections[k].file_offset <
+ min_dwarf_offset)
+ min_dwarf_offset = dwarf_sections[k].file_offset;
+
+ dwarf_section_end =
+ dwarf_sections[k].file_offset +
+ dwarf_sections[k].file_size;
+ if (dwarf_section_end > max_dwarf_offset)
+ max_dwarf_offset = dwarf_section_end;
+
+ break;
+ }
+ }
+
+ section_offset += sizeof (section_native_t);
+ }
+
+ break;
+ }
+ }
+
+ offset += command.cmdsize;
+ }
+
+ if (!*found_dwarf)
+ {
+ // No DWARF in this file
+ ret = 1;
+ goto end;
+ }
+
+ if (!macho_get_view (state, dwarf_descriptor, (off_t) min_dwarf_offset,
+ max_dwarf_offset - min_dwarf_offset, error_callback,
+ data, &commands_view, &dwarf_view))
+ goto end;
+ dwarf_view_valid = 1;
+
+ for (i = 0; i < DEBUG_MAX; i++)
+ {
+ if (dwarf_sections[i].file_offset == 0)
+ dwarf_sections[i].data = NULL;
+ else
+ dwarf_sections[i].data =
+ dwarf_view.data + dwarf_sections[i].file_offset - min_dwarf_offset;
+ }
+
+ if (!backtrace_dwarf_add (state, vmslide,
+ dwarf_sections[DEBUG_INFO].data,
+ dwarf_sections[DEBUG_INFO].file_size,
+ dwarf_sections[DEBUG_LINE].data,
+ dwarf_sections[DEBUG_LINE].file_size,
+ dwarf_sections[DEBUG_ABBREV].data,
+ dwarf_sections[DEBUG_ABBREV].file_size,
+ dwarf_sections[DEBUG_RANGES].data,
+ dwarf_sections[DEBUG_RANGES].file_size,
+ dwarf_sections[DEBUG_STR].data,
+ dwarf_sections[DEBUG_STR].file_size,
+ ((__DARWIN_BYTE_ORDER == __DARWIN_BIG_ENDIAN)
+ ^ commands_view.bytes_swapped),
+ error_callback, data, fileline_fn))
+ goto end;
+
+ // Don't release the DWARF view because it is still in use
+ dwarf_descriptor_valid = 0;
+ dwarf_view_valid = 0;
+ ret = 1;
+
+end:
+ if (dwarf_descriptor_valid)
+ backtrace_close (dwarf_descriptor, error_callback, data);
+ if (commands_view_valid)
+ backtrace_release_view (state, &commands_view.view, error_callback, data);
+ if (dwarf_view_valid)
+ backtrace_release_view (state, &dwarf_view, error_callback, data);
+ return ret;
+}
+
+int
+macho_try_dsym (struct backtrace_state *state,
+ backtrace_error_callback error_callback,
+ void *data, fileline *fileline_fn, uuid_t *executable_uuid,
+ uintptr_t base_address, uintptr_t max_image_address,
+ intptr_t vmslide, char *dsym_filename, int *matched,
+ int *found_sym, int *found_dwarf)
+{
+ int ret = 0;
+ char dwarf_image_dir_path[PATH_MAX + 1] = "";
+ DIR *dwarf_image_dir;
+ int dwarf_image_dir_valid = 0;
+ struct dirent *directory_entry;
+ char dwarf_filename[PATH_MAX + 1] = "";
+ int dwarf_matched;
+ int dwarf_had_sym;
+ int dwarf_had_dwarf;
+
+ *matched = 0;
+ *found_sym = 0;
+ *found_dwarf = 0;
+
+ strncpy (dwarf_image_dir_path, dsym_filename, PATH_MAX);
+ strncat (dwarf_image_dir_path, "/Contents/Resources/DWARF", PATH_MAX);
+
+ if (!(dwarf_image_dir = opendir (dwarf_image_dir_path)))
+ {
+ error_callback (data, "could not open DWARF directory in dSYM",
+ 0);
+ goto end;
+ }
+ dwarf_image_dir_valid = 1;
+
+ while ((directory_entry = readdir (dwarf_image_dir)))
+ {
+ if (directory_entry->d_type != DT_REG)
+ continue;
+
+PRAGMA_GCC8(GCC diagnostic push)
+PRAGMA_GCC8(GCC diagnostic ignored "-Wstringop-truncation")
+ // Silence the warning since the string is initialized to zero and has an extra NUL byte at the end.
+ strncpy (dwarf_filename, dwarf_image_dir_path, PATH_MAX);
+PRAGMA_GCC8(GCC diagnostic pop)
+ strncat (dwarf_filename, "/", PATH_MAX);
+ strncat (dwarf_filename, directory_entry->d_name, PATH_MAX);
+
+ if (!macho_try_dwarf (state, error_callback, data, fileline_fn,
+ executable_uuid, base_address, max_image_address,
+ vmslide, dwarf_filename,
+ &dwarf_matched, &dwarf_had_sym, &dwarf_had_dwarf))
+ goto end;
+
+ if (dwarf_matched)
+ {
+ *matched = 1;
+ *found_sym = dwarf_had_sym;
+ *found_dwarf = dwarf_had_dwarf;
+ ret = 1;
+ goto end;
+ }
+ }
+
+ // No matching DWARF in this dSYM
+ ret = 1;
+ goto end;
+
+end:
+ if (dwarf_image_dir_valid)
+ closedir (dwarf_image_dir);
+ return ret;
+}
+
+int
+macho_add (struct backtrace_state *state,
+ backtrace_error_callback error_callback, void *data, int descriptor,
+ const char *filename, fileline *fileline_fn, intptr_t vmslide,
+ int *found_sym, int *found_dwarf)
+{
+ uuid_t image_uuid;
+ uintptr_t image_file_base_address;
+ uintptr_t image_file_max_address;
+ uintptr_t image_actual_base_address = 0;
+ uintptr_t image_actual_max_address = 0;
+
+ int ret = 0;
+ struct macho_commands_view commands_view;
+ int commands_view_valid = 0;
+ char executable_dirname[PATH_MAX + 1] = "";
+ size_t filename_len;
+ DIR *executable_dir = NULL;
+ int executable_dir_valid = 0;
+ struct dirent *directory_entry;
+ char dsym_full_path[PATH_MAX + 1] = "";
+ static const char *extension;
+ size_t extension_len;
+ ssize_t i;
+
+ *found_sym = 0;
+ *found_dwarf = 0;
+
+ // Find Mach-O commands list
+ int incompatible;
+ if (!macho_get_commands (state, descriptor, error_callback, data,
+ &commands_view, &incompatible))
+ goto end;
+ commands_view_valid = 1;
+
+ // First we need to get the uuid of our file so we can hunt down the correct
+ // dSYM
+ if (!macho_get_uuid (state, descriptor, error_callback, data, &commands_view,
+ &image_uuid))
+ goto end;
+
+ // Now we need to find the in memory base address. Step one is to find out
+ // what the executable thinks the base address is
+ if (!macho_get_addr_range (state, descriptor, error_callback, data,
+ &commands_view,
+ &image_file_base_address,
+ &image_file_max_address))
+ goto end;
+
+ image_actual_base_address =
+ image_file_base_address + vmslide;
+ image_actual_max_address =
+ image_file_max_address + vmslide;
+
+ if (image_actual_base_address == 0)
+ {
+ error_callback (data, "executable file is not loaded", 0);
+ goto end;
+ }
+
+ // Look for dSYM in our executable's directory
+ strncpy (executable_dirname, filename, PATH_MAX);
+ filename_len = strlen (executable_dirname);
+ for (i = filename_len - 1; i >= 0; i--)
+ {
+ if (executable_dirname[i] == '/')
+ {
+ executable_dirname[i] = '\0';
+ break;
+ }
+ else if (i == 0)
+ {
+ executable_dirname[0] = '.';
+ executable_dirname[1] = '\0';
+ break;
+ }
+ }
+
+ if (!(executable_dir = opendir (executable_dirname)))
+ {
+ error_callback (data, "could not open directory containing executable",
+ 0);
+ goto end;
+ }
+ executable_dir_valid = 1;
+
+ extension = ".dSYM";
+ extension_len = strlen (extension);
+ while ((directory_entry = readdir (executable_dir)))
+ {
+ if (directory_entry->d_namlen < extension_len)
+ continue;
+ if (strncasecmp (directory_entry->d_name + directory_entry->d_namlen
+ - extension_len, extension, extension_len) == 0)
+ {
+ int matched;
+ int dsym_had_sym;
+ int dsym_had_dwarf;
+
+ // Found a dSYM
+PRAGMA_GCC8(GCC diagnostic push)
+PRAGMA_GCC8(GCC diagnostic ignored "-Wstringop-truncation")
+ // Silence the warning since the string is initialized to zero and has an extra NUL byte at the end.
+ strncpy (dsym_full_path, executable_dirname, PATH_MAX);
+PRAGMA_GCC8(GCC diagnostic pop)
+ strncat (dsym_full_path, "/", PATH_MAX);
+ strncat (dsym_full_path, directory_entry->d_name, PATH_MAX);
+
+ if (!macho_try_dsym (state, error_callback, data,
+ fileline_fn, &image_uuid,
+ image_actual_base_address,
+ image_actual_max_address, vmslide,
+ dsym_full_path,
+ &matched, &dsym_had_sym, &dsym_had_dwarf))
+ goto end;
+
+ if (matched)
+ {
+ *found_sym = dsym_had_sym;
+ *found_dwarf = dsym_had_dwarf;
+ ret = 1;
+ goto end;
+ }
+ }
+ }
+
+ // No matching dSYM
+ ret = 1;
+ goto end;
+
+end:
+ if (commands_view_valid)
+ backtrace_release_view (state, &commands_view.view, error_callback,
+ data);
+ if (executable_dir_valid)
+ closedir (executable_dir);
+ return ret;
+}
+
+static int
+macho_symbol_search (const void *vkey, const void *ventry)
+{
+ const uintptr_t *key = (const uintptr_t *) vkey;
+ const struct macho_symbol *entry = (const struct macho_symbol *) ventry;
+ uintptr_t addr;
+
+ addr = *key;
+ if (addr < entry->addr)
+ return -1;
+ else if (addr >= entry->addr + entry->size)
+ return 1;
+ else
+ return 0;
+}
+
+static void
+macho_syminfo (struct backtrace_state *state,
+ uintptr_t addr,
+ backtrace_syminfo_callback callback,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data)
+{
+ struct macho_syminfo_data *edata;
+ struct macho_symbol *sym = NULL;
+
+ if (!state->threaded)
+ {
+ for (edata = (struct macho_syminfo_data *) state->syminfo_data;
+ edata != NULL;
+ edata = edata->next)
+ {
+ if (addr >= edata->min_addr && addr <= edata->max_addr)
+ {
+ sym = ((struct macho_symbol *)
+ bsearch (&addr, edata->symbols, edata->symbol_count,
+ sizeof (struct macho_symbol), macho_symbol_search));
+ if (sym != NULL)
+ break;
+ }
+ }
+ }
+ else
+ {
+ struct macho_syminfo_data **pp;
+
+ pp = (struct macho_syminfo_data **) (void *) &state->syminfo_data;
+ while (1)
+ {
+ edata = backtrace_atomic_load_pointer (pp);
+ if (edata == NULL)
+ break;
+
+ if (addr >= edata->min_addr && addr <= edata->max_addr)
+ {
+ sym = ((struct macho_symbol *)
+ bsearch (&addr, edata->symbols, edata->symbol_count,
+ sizeof (struct macho_symbol), macho_symbol_search));
+ if (sym != NULL)
+ break;
+ }
+
+ pp = &edata->next;
+ }
+ }
+
+ if (sym == NULL)
+ callback (data, addr, NULL, 0, 0);
+ else
+ callback (data, addr, sym->name, sym->addr, sym->size);
+}
+
+
+static int
+macho_nodebug (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ uintptr_t pc ATTRIBUTE_UNUSED,
+ backtrace_full_callback callback ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback, void *data)
+{
+ error_callback (data, "no debug info in Mach-O executable", -1);
+ return 0;
+}
+
+static void
+macho_nosyms (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ uintptr_t addr ATTRIBUTE_UNUSED,
+ backtrace_syminfo_callback callback ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback, void *data)
+{
+ error_callback (data, "no symbol table in Mach-O executable", -1);
+}
+
+int
+backtrace_initialize (struct backtrace_state *state,
+ const char *filename,
+ int descriptor,
+ backtrace_error_callback error_callback,
+ void *data, fileline *fileline_fn)
+{
+ fileline macho_fileline_fn = macho_nodebug;
+ int found_sym = 0;
+ int found_dwarf = 0;
+ uint32_t i = 0;
+ uint32_t loaded_image_count;
+
+ // Add all loaded images
+ loaded_image_count = _dyld_image_count ();
+ for (i = 0; i < loaded_image_count; i++)
+ {
+ int current_found_sym;
+ int current_found_dwarf;
+ int current_descriptor;
+ intptr_t current_vmslide;
+ const char *current_name;
+
+ current_vmslide = _dyld_get_image_vmaddr_slide (i);
+ current_name = _dyld_get_image_name (i);
+
+ if (current_name == NULL || (i != 0 && current_vmslide == 0))
+ continue;
+
+ if (!(current_descriptor =
+ backtrace_open (current_name, error_callback, data, NULL)))
+ {
+ continue;
+ }
+
+ if (macho_add (state, error_callback, data, current_descriptor,
+ current_name, &macho_fileline_fn, current_vmslide,
+ &current_found_sym, &current_found_dwarf))
+ {
+ found_sym = found_sym || current_found_sym;
+ found_dwarf = found_dwarf || current_found_dwarf;
+ }
+
+ backtrace_close (current_descriptor, error_callback, data);
+ }
+
+ if (!state->threaded)
+ {
+ if (found_sym)
+ state->syminfo_fn = macho_syminfo;
+ else if (state->syminfo_fn == NULL)
+ state->syminfo_fn = macho_nosyms;
+ }
+ else
+ {
+ if (found_sym)
+ backtrace_atomic_store_pointer (&state->syminfo_fn, macho_syminfo);
+ else
+ (void) __sync_bool_compare_and_swap (&state->syminfo_fn, NULL,
+ macho_nosyms);
+ }
+
+ if (!state->threaded)
+ {
+ if (state->fileline_fn == NULL || state->fileline_fn == macho_nodebug)
+ *fileline_fn = macho_fileline_fn;
+ }
+ else
+ {
+ fileline current_fn;
+
+ current_fn = backtrace_atomic_load_pointer (&state->fileline_fn);
+ if (current_fn == NULL || current_fn == macho_nodebug)
+ *fileline_fn = macho_fileline_fn;
+ }
+
+ return 1;
+}
+
diff --git a/3rdparty/libbacktrace/mmap.c b/3rdparty/libbacktrace/mmap.c
new file mode 100644
index 000000000..32fcba623
--- /dev/null
+++ b/3rdparty/libbacktrace/mmap.c
@@ -0,0 +1,325 @@
+/* mmap.c -- Memory allocation with mmap.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/mman.h>
+
+#include "backtrace.h"
+#include "internal.h"
+
+/* Memory allocation on systems that provide anonymous mmap. This
+ permits the backtrace functions to be invoked from a signal
+ handler, assuming that mmap is async-signal safe. */
+
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
+#ifndef MAP_FAILED
+#define MAP_FAILED ((void *)-1)
+#endif
+
+/* A list of free memory blocks. */
+
+struct backtrace_freelist_struct
+{
+ /* Next on list. */
+ struct backtrace_freelist_struct *next;
+ /* Size of this block, including this structure. */
+ size_t size;
+};
+
+/* Free memory allocated by backtrace_alloc. */
+
+static void
+backtrace_free_locked (struct backtrace_state *state, void *addr, size_t size)
+{
+ /* Just leak small blocks. We don't have to be perfect. Don't put
+ more than 16 entries on the free list, to avoid wasting time
+ searching when allocating a block. If we have more than 16
+ entries, leak the smallest entry. */
+
+ if (size >= sizeof (struct backtrace_freelist_struct))
+ {
+ size_t c;
+ struct backtrace_freelist_struct **ppsmall;
+ struct backtrace_freelist_struct **pp;
+ struct backtrace_freelist_struct *p;
+
+ c = 0;
+ ppsmall = NULL;
+ for (pp = &state->freelist; *pp != NULL; pp = &(*pp)->next)
+ {
+ if (ppsmall == NULL || (*pp)->size < (*ppsmall)->size)
+ ppsmall = pp;
+ ++c;
+ }
+ if (c >= 16)
+ {
+ if (size <= (*ppsmall)->size)
+ return;
+ *ppsmall = (*ppsmall)->next;
+ }
+
+ p = (struct backtrace_freelist_struct *) addr;
+ p->next = state->freelist;
+ p->size = size;
+ state->freelist = p;
+ }
+}
+
+/* Allocate memory like malloc. If ERROR_CALLBACK is NULL, don't
+ report an error. */
+
+void *
+backtrace_alloc (struct backtrace_state *state,
+ size_t size, backtrace_error_callback error_callback,
+ void *data)
+{
+ void *ret;
+ int locked;
+ struct backtrace_freelist_struct **pp;
+ size_t pagesize;
+ size_t asksize;
+ void *page;
+
+ ret = NULL;
+
+ /* If we can acquire the lock, then see if there is space on the
+ free list. If we can't acquire the lock, drop straight into
+ using mmap. __sync_lock_test_and_set returns the old state of
+ the lock, so we have acquired it if it returns 0. */
+
+ if (!state->threaded)
+ locked = 1;
+ else
+ locked = __sync_lock_test_and_set (&state->lock_alloc, 1) == 0;
+
+ if (locked)
+ {
+ for (pp = &state->freelist; *pp != NULL; pp = &(*pp)->next)
+ {
+ if ((*pp)->size >= size)
+ {
+ struct backtrace_freelist_struct *p;
+
+ p = *pp;
+ *pp = p->next;
+
+ /* Round for alignment; we assume that no type we care about
+ is more than 8 bytes. */
+ size = (size + 7) & ~ (size_t) 7;
+ if (size < p->size)
+ backtrace_free_locked (state, (char *) p + size,
+ p->size - size);
+
+ ret = (void *) p;
+
+ break;
+ }
+ }
+
+ if (state->threaded)
+ __sync_lock_release (&state->lock_alloc);
+ }
+
+ if (ret == NULL)
+ {
+ /* Allocate a new page. */
+
+ pagesize = getpagesize ();
+ asksize = (size + pagesize - 1) & ~ (pagesize - 1);
+ page = mmap (NULL, asksize, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ if (page == MAP_FAILED)
+ {
+ if (error_callback)
+ error_callback (data, "mmap", errno);
+ }
+ else
+ {
+ size = (size + 7) & ~ (size_t) 7;
+ if (size < asksize)
+ backtrace_free (state, (char *) page + size, asksize - size,
+ error_callback, data);
+
+ ret = page;
+ }
+ }
+
+ return ret;
+}
+
+/* Free memory allocated by backtrace_alloc. */
+
+void
+backtrace_free (struct backtrace_state *state, void *addr, size_t size,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data ATTRIBUTE_UNUSED)
+{
+ int locked;
+
+ /* If we are freeing a large aligned block, just release it back to
+ the system. This case arises when growing a vector for a large
+ binary with lots of debug info. Calling munmap here may cause us
+ to call mmap again if there is also a large shared library; we
+ just live with that. */
+ if (size >= 16 * 4096)
+ {
+ size_t pagesize;
+
+ pagesize = getpagesize ();
+ if (((uintptr_t) addr & (pagesize - 1)) == 0
+ && (size & (pagesize - 1)) == 0)
+ {
+ /* If munmap fails for some reason, just add the block to
+ the freelist. */
+ if (munmap (addr, size) == 0)
+ return;
+ }
+ }
+
+ /* If we can acquire the lock, add the new space to the free list.
+ If we can't acquire the lock, just leak the memory.
+ __sync_lock_test_and_set returns the old state of the lock, so we
+ have acquired it if it returns 0. */
+
+ if (!state->threaded)
+ locked = 1;
+ else
+ locked = __sync_lock_test_and_set (&state->lock_alloc, 1) == 0;
+
+ if (locked)
+ {
+ backtrace_free_locked (state, addr, size);
+
+ if (state->threaded)
+ __sync_lock_release (&state->lock_alloc);
+ }
+}
+
+/* Grow VEC by SIZE bytes. */
+
+void *
+backtrace_vector_grow (struct backtrace_state *state,size_t size,
+ backtrace_error_callback error_callback,
+ void *data, struct backtrace_vector *vec)
+{
+ void *ret;
+
+ if (size > vec->alc)
+ {
+ size_t pagesize;
+ size_t alc;
+ void *base;
+
+ pagesize = getpagesize ();
+ alc = vec->size + size;
+ if (vec->size == 0)
+ alc = 16 * size;
+ else if (alc < pagesize)
+ {
+ alc *= 2;
+ if (alc > pagesize)
+ alc = pagesize;
+ }
+ else
+ {
+ alc *= 2;
+ alc = (alc + pagesize - 1) & ~ (pagesize - 1);
+ }
+ base = backtrace_alloc (state, alc, error_callback, data);
+ if (base == NULL)
+ return NULL;
+ if (vec->base != NULL)
+ {
+ memcpy (base, vec->base, vec->size);
+ backtrace_free (state, vec->base, vec->size + vec->alc,
+ error_callback, data);
+ }
+ vec->base = base;
+ vec->alc = alc - vec->size;
+ }
+
+ ret = (char *) vec->base + vec->size;
+ vec->size += size;
+ vec->alc -= size;
+ return ret;
+}
+
+/* Finish the current allocation on VEC. */
+
+void *
+backtrace_vector_finish (
+ struct backtrace_state *state ATTRIBUTE_UNUSED,
+ struct backtrace_vector *vec,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data ATTRIBUTE_UNUSED)
+{
+ void *ret;
+
+ ret = vec->base;
+ vec->base = (char *) vec->base + vec->size;
+ vec->size = 0;
+ return ret;
+}
+
+/* Release any extra space allocated for VEC. */
+
+int
+backtrace_vector_release (struct backtrace_state *state,
+ struct backtrace_vector *vec,
+ backtrace_error_callback error_callback,
+ void *data)
+{
+ size_t size;
+ size_t alc;
+ size_t aligned;
+
+ /* Make sure that the block that we free is aligned on an 8-byte
+ boundary. */
+ size = vec->size;
+ alc = vec->alc;
+ aligned = (size + 7) & ~ (size_t) 7;
+ alc -= aligned - size;
+
+ backtrace_free (state, (char *) vec->base + aligned, alc,
+ error_callback, data);
+ vec->alc = 0;
+ return 1;
+}
diff --git a/3rdparty/libbacktrace/mmapio.c b/3rdparty/libbacktrace/mmapio.c
new file mode 100644
index 000000000..1cf4019f6
--- /dev/null
+++ b/3rdparty/libbacktrace/mmapio.c
@@ -0,0 +1,100 @@
+/* mmapio.c -- File views using mmap.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
+#include "backtrace.h"
+#include "internal.h"
+
+#ifndef MAP_FAILED
+#define MAP_FAILED ((void *)-1)
+#endif
+
+/* This file implements file views and memory allocation when mmap is
+ available. */
+
+/* Create a view of SIZE bytes from DESCRIPTOR at OFFSET. */
+
+int
+backtrace_get_view (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ int descriptor, off_t offset, size_t size,
+ backtrace_error_callback error_callback,
+ void *data, struct backtrace_view *view)
+{
+ size_t pagesize;
+ unsigned int inpage;
+ off_t pageoff;
+ void *map;
+
+ pagesize = getpagesize ();
+ inpage = offset % (unsigned int)pagesize;
+ pageoff = offset - inpage;
+
+ size += inpage;
+ size = (size + (pagesize - 1)) & ~ (pagesize - 1);
+
+ map = mmap (NULL, size, PROT_READ, MAP_PRIVATE, descriptor, pageoff);
+ if (map == MAP_FAILED)
+ {
+ error_callback (data, "mmap", errno);
+ return 0;
+ }
+
+ view->data = (char *) map + inpage;
+ view->base = map;
+ view->len = size;
+
+ return 1;
+}
+
+/* Release a view read by backtrace_get_view. */
+
+void
+backtrace_release_view (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ struct backtrace_view *view,
+ backtrace_error_callback error_callback,
+ void *data)
+{
+ union {
+ const void *cv;
+ void *v;
+ } const_cast;
+
+ const_cast.cv = view->base;
+ if (munmap (const_cast.v, view->len) < 0)
+ error_callback (data, "munmap", errno);
+}
diff --git a/3rdparty/libbacktrace/nounwind.c b/3rdparty/libbacktrace/nounwind.c
new file mode 100644
index 000000000..0a046cc29
--- /dev/null
+++ b/3rdparty/libbacktrace/nounwind.c
@@ -0,0 +1,66 @@
+/* backtrace.c -- Entry point for stack backtrace library.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <sys/types.h>
+
+#include "backtrace.h"
+
+#include "internal.h"
+
+/* This source file is compiled if the unwind library is not
+ available. */
+
+int
+backtrace_full (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ int skip ATTRIBUTE_UNUSED,
+ backtrace_full_callback callback ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback, void *data)
+{
+ error_callback (data,
+ "no stack trace because unwind library not available",
+ 0);
+ return 0;
+}
+
+int
+backtrace_simple (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ int skip ATTRIBUTE_UNUSED,
+ backtrace_simple_callback callback ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback, void *data)
+{
+ error_callback (data,
+ "no stack trace because unwind library not available",
+ 0);
+ return 0;
+}
diff --git a/3rdparty/libbacktrace/pecoff.c b/3rdparty/libbacktrace/pecoff.c
new file mode 100644
index 000000000..3fb1bf469
--- /dev/null
+++ b/3rdparty/libbacktrace/pecoff.c
@@ -0,0 +1,943 @@
+/* pecoff.c -- Get debug data from a PE/COFFF file for backtraces.
+ Copyright (C) 2015-2018 Free Software Foundation, Inc.
+ Adapted from elf.c by Tristan Gingold, AdaCore.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "backtrace.h"
+#include "internal.h"
+
+/* Coff file header. */
+
+typedef struct {
+ uint16_t machine;
+ uint16_t number_of_sections;
+ uint32_t time_date_stamp;
+ uint32_t pointer_to_symbol_table;
+ uint32_t number_of_symbols;
+ uint16_t size_of_optional_header;
+ uint16_t characteristics;
+} b_coff_file_header;
+
+/* Coff optional header. */
+
+typedef struct {
+ uint16_t magic;
+ uint8_t major_linker_version;
+ uint8_t minor_linker_version;
+ uint32_t size_of_code;
+ uint32_t size_of_initialized_data;
+ uint32_t size_of_uninitialized_data;
+ uint32_t address_of_entry_point;
+ uint32_t base_of_code;
+ union {
+ struct {
+ uint32_t base_of_data;
+ uint32_t image_base;
+ } pe;
+ struct {
+ uint64_t image_base;
+ } pep;
+ } u;
+} b_coff_optional_header;
+
+/* Values of magic in optional header. */
+
+#define PE_MAGIC 0x10b /* PE32 executable. */
+#define PEP_MAGIC 0x20b /* PE32+ executable (for 64bit targets). */
+
+/* Coff section header. */
+
+typedef struct {
+ char name[8];
+ uint32_t virtual_size;
+ uint32_t virtual_address;
+ uint32_t size_of_raw_data;
+ uint32_t pointer_to_raw_data;
+ uint32_t pointer_to_relocations;
+ uint32_t pointer_to_line_numbers;
+ uint16_t number_of_relocations;
+ uint16_t number_of_line_numbers;
+ uint32_t characteristics;
+} b_coff_section_header;
+
+/* Coff symbol name. */
+
+typedef union {
+ char short_name[8];
+ struct {
+ unsigned char zeroes[4];
+ unsigned char off[4];
+ } long_name;
+} b_coff_name;
+
+/* Coff symbol (external representation which is unaligned). */
+
+typedef struct {
+ b_coff_name name;
+ unsigned char value[4];
+ unsigned char section_number[2];
+ unsigned char type[2];
+ unsigned char storage_class;
+ unsigned char number_of_aux_symbols;
+} b_coff_external_symbol;
+
+/* Symbol types. */
+
+#define N_TBSHFT 4 /* Shift for the derived type. */
+#define IMAGE_SYM_DTYPE_FUNCTION 2 /* Function derived type. */
+
+/* Size of a coff symbol. */
+
+#define SYM_SZ 18
+
+/* Coff symbol, internal representation (aligned). */
+
+typedef struct {
+ const char *name;
+ uint32_t value;
+ int16_t sec;
+ uint16_t type;
+ uint16_t sc;
+} b_coff_internal_symbol;
+
+/* An index of sections we care about. */
+
+enum debug_section
+{
+ DEBUG_INFO,
+ DEBUG_LINE,
+ DEBUG_ABBREV,
+ DEBUG_RANGES,
+ DEBUG_STR,
+ DEBUG_MAX
+};
+
+/* Names of sections, indexed by enum debug_section. */
+
+static const char * const debug_section_names[DEBUG_MAX] =
+{
+ ".debug_info",
+ ".debug_line",
+ ".debug_abbrev",
+ ".debug_ranges",
+ ".debug_str"
+};
+
+/* Information we gather for the sections we care about. */
+
+struct debug_section_info
+{
+ /* Section file offset. */
+ off_t offset;
+ /* Section size. */
+ size_t size;
+ /* Section contents, after read from file. */
+ const unsigned char *data;
+};
+
+/* Information we keep for an coff symbol. */
+
+struct coff_symbol
+{
+ /* The name of the symbol. */
+ const char *name;
+ /* The address of the symbol. */
+ uintptr_t address;
+};
+
+/* Information to pass to coff_syminfo. */
+
+struct coff_syminfo_data
+{
+ /* Symbols for the next module. */
+ struct coff_syminfo_data *next;
+ /* The COFF symbols, sorted by address. */
+ struct coff_symbol *symbols;
+ /* The number of symbols. */
+ size_t count;
+};
+
+/* A dummy callback function used when we can't find any debug info. */
+
+static int
+coff_nodebug (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ uintptr_t pc ATTRIBUTE_UNUSED,
+ backtrace_full_callback callback ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback, void *data)
+{
+ error_callback (data, "no debug info in PE/COFF executable", -1);
+ return 0;
+}
+
+/* A dummy callback function used when we can't find a symbol
+ table. */
+
+static void
+coff_nosyms (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ uintptr_t addr ATTRIBUTE_UNUSED,
+ backtrace_syminfo_callback callback ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback, void *data)
+{
+ error_callback (data, "no symbol table in PE/COFF executable", -1);
+}
+
+/* Read a potentially unaligned 4 byte word at P, using native endianness. */
+
+static uint32_t
+coff_read4 (const unsigned char *p)
+{
+ uint32_t res;
+
+ memcpy (&res, p, 4);
+ return res;
+}
+
+/* Read a potentially unaligned 2 byte word at P, using native endianness.
+ All 2 byte word in symbols are always aligned, but for coherency all
+ fields are declared as char arrays. */
+
+static uint16_t
+coff_read2 (const unsigned char *p)
+{
+ uint16_t res;
+
+ memcpy (&res, p, sizeof (res));
+ return res;
+}
+
+/* Return the length (without the trailing 0) of a COFF short name. */
+
+static size_t
+coff_short_name_len (const char *name)
+{
+ int i;
+
+ for (i = 0; i < 8; i++)
+ if (name[i] == 0)
+ return i;
+ return 8;
+}
+
+/* Return true iff COFF short name CNAME is the same as NAME (a NUL-terminated
+ string). */
+
+static int
+coff_short_name_eq (const char *name, const char *cname)
+{
+ int i;
+
+ for (i = 0; i < 8; i++)
+ {
+ if (name[i] != cname[i])
+ return 0;
+ if (name[i] == 0)
+ return 1;
+ }
+ return name[8] == 0;
+}
+
+/* Return true iff NAME is the same as string at offset OFF. */
+
+static int
+coff_long_name_eq (const char *name, unsigned int off,
+ struct backtrace_view *str_view)
+{
+ if (off >= str_view->len)
+ return 0;
+ return strcmp (name, (const char *)str_view->data + off) == 0;
+}
+
+/* Compare struct coff_symbol for qsort. */
+
+static int
+coff_symbol_compare (const void *v1, const void *v2)
+{
+ const struct coff_symbol *e1 = (const struct coff_symbol *) v1;
+ const struct coff_symbol *e2 = (const struct coff_symbol *) v2;
+
+ if (e1->address < e2->address)
+ return -1;
+ else if (e1->address > e2->address)
+ return 1;
+ else
+ return 0;
+}
+
+/* Convert SYM to internal (and aligned) format ISYM, using string table
+ from STRTAB and STRTAB_SIZE, and number of sections SECTS_NUM.
+ Return -1 in case of error (invalid section number or string index). */
+
+static int
+coff_expand_symbol (b_coff_internal_symbol *isym,
+ const b_coff_external_symbol *sym,
+ uint16_t sects_num,
+ const unsigned char *strtab, size_t strtab_size)
+{
+ isym->type = coff_read2 (sym->type);
+ isym->sec = coff_read2 (sym->section_number);
+ isym->sc = sym->storage_class;
+
+ if (isym->sec > 0 && (uint16_t) isym->sec > sects_num)
+ return -1;
+ if (sym->name.short_name[0] != 0)
+ isym->name = sym->name.short_name;
+ else
+ {
+ uint32_t off = coff_read4 (sym->name.long_name.off);
+
+ if (off >= strtab_size)
+ return -1;
+ isym->name = (const char *) strtab + off;
+ }
+ return 0;
+}
+
+/* Return true iff SYM is a defined symbol for a function. Data symbols
+ aren't considered because they aren't easily identified (same type as
+ section names, presence of symbols defined by the linker script). */
+
+static int
+coff_is_function_symbol (const b_coff_internal_symbol *isym)
+{
+ return (isym->type >> N_TBSHFT) == IMAGE_SYM_DTYPE_FUNCTION
+ && isym->sec > 0;
+}
+
+/* Initialize the symbol table info for coff_syminfo. */
+
+static int
+coff_initialize_syminfo (struct backtrace_state *state,
+ uintptr_t base_address,
+ const b_coff_section_header *sects, size_t sects_num,
+ const b_coff_external_symbol *syms, size_t syms_size,
+ const unsigned char *strtab, size_t strtab_size,
+ backtrace_error_callback error_callback,
+ void *data, struct coff_syminfo_data *sdata)
+{
+ size_t syms_count;
+ char *coff_symstr;
+ size_t coff_symstr_len;
+ size_t coff_symbol_count;
+ size_t coff_symbol_size;
+ struct coff_symbol *coff_symbols;
+ struct coff_symbol *coff_sym;
+ char *coff_str;
+ size_t i;
+
+ syms_count = syms_size / SYM_SZ;
+
+ /* We only care about function symbols. Count them. Also count size of
+ strings for in-symbol names. */
+ coff_symbol_count = 0;
+ coff_symstr_len = 0;
+ for (i = 0; i < syms_count; ++i)
+ {
+ const b_coff_external_symbol *asym = &syms[i];
+ b_coff_internal_symbol isym;
+
+ if (coff_expand_symbol (&isym, asym, sects_num, strtab, strtab_size) < 0)
+ {
+ error_callback (data, "invalid section or offset in coff symbol", 0);
+ return 0;
+ }
+ if (coff_is_function_symbol (&isym))
+ {
+ ++coff_symbol_count;
+ if (asym->name.short_name[0] != 0)
+ coff_symstr_len += coff_short_name_len (asym->name.short_name) + 1;
+ }
+
+ i += asym->number_of_aux_symbols;
+ }
+
+ coff_symbol_size = (coff_symbol_count + 1) * sizeof (struct coff_symbol);
+ coff_symbols = ((struct coff_symbol *)
+ backtrace_alloc (state, coff_symbol_size, error_callback,
+ data));
+ if (coff_symbols == NULL)
+ return 0;
+
+ /* Allocate memory for symbols strings. */
+ if (coff_symstr_len > 0)
+ {
+ coff_symstr = ((char *)
+ backtrace_alloc (state, coff_symstr_len, error_callback,
+ data));
+ if (coff_symstr == NULL)
+ {
+ backtrace_free (state, coff_symbols, coff_symbol_size,
+ error_callback, data);
+ return 0;
+ }
+ }
+ else
+ coff_symstr = NULL;
+
+ /* Copy symbols. */
+ coff_sym = coff_symbols;
+ coff_str = coff_symstr;
+ for (i = 0; i < syms_count; ++i)
+ {
+ const b_coff_external_symbol *asym = &syms[i];
+ b_coff_internal_symbol isym;
+
+ if (coff_expand_symbol (&isym, asym, sects_num, strtab, strtab_size))
+ {
+ /* Should not fail, as it was already tested in the previous
+ loop. */
+ abort ();
+ }
+ if (coff_is_function_symbol (&isym))
+ {
+ const char *name;
+ int16_t secnum;
+
+ if (asym->name.short_name[0] != 0)
+ {
+ size_t len = coff_short_name_len (isym.name);
+ name = coff_str;
+ memcpy (coff_str, isym.name, len);
+ coff_str[len] = 0;
+ coff_str += len + 1;
+ }
+ else
+ name = isym.name;
+
+ /* Strip leading '_'. */
+ if (name[0] == '_')
+ name++;
+
+ /* Symbol value is section relative, so we need to read the address
+ of its section. */
+ secnum = coff_read2 (asym->section_number);
+
+ coff_sym->name = name;
+ coff_sym->address = (coff_read4 (asym->value)
+ + sects[secnum - 1].virtual_address
+ + base_address);
+ coff_sym++;
+ }
+
+ i += asym->number_of_aux_symbols;
+ }
+
+ /* End of symbols marker. */
+ coff_sym->name = NULL;
+ coff_sym->address = -1;
+
+ backtrace_qsort (coff_symbols, coff_symbol_count,
+ sizeof (struct coff_symbol), coff_symbol_compare);
+
+ sdata->next = NULL;
+ sdata->symbols = coff_symbols;
+ sdata->count = coff_symbol_count;
+
+ return 1;
+}
+
+/* Add EDATA to the list in STATE. */
+
+static void
+coff_add_syminfo_data (struct backtrace_state *state,
+ struct coff_syminfo_data *sdata)
+{
+ if (!state->threaded)
+ {
+ struct coff_syminfo_data **pp;
+
+ for (pp = (struct coff_syminfo_data **) (void *) &state->syminfo_data;
+ *pp != NULL;
+ pp = &(*pp)->next)
+ ;
+ *pp = sdata;
+ }
+ else
+ {
+ while (1)
+ {
+ struct coff_syminfo_data **pp;
+
+ pp = (struct coff_syminfo_data **) (void *) &state->syminfo_data;
+
+ while (1)
+ {
+ struct coff_syminfo_data *p;
+
+ p = backtrace_atomic_load_pointer (pp);
+
+ if (p == NULL)
+ break;
+
+ pp = &p->next;
+ }
+
+ if (__sync_bool_compare_and_swap (pp, NULL, sdata))
+ break;
+ }
+ }
+}
+
+/* Compare an ADDR against an elf_symbol for bsearch. We allocate one
+ extra entry in the array so that this can look safely at the next
+ entry. */
+
+static int
+coff_symbol_search (const void *vkey, const void *ventry)
+{
+ const uintptr_t *key = (const uintptr_t *) vkey;
+ const struct coff_symbol *entry = (const struct coff_symbol *) ventry;
+ uintptr_t addr;
+
+ addr = *key;
+ if (addr < entry->address)
+ return -1;
+ else if (addr >= entry[1].address)
+ return 1;
+ else
+ return 0;
+}
+
+/* Return the symbol name and value for an ADDR. */
+
+static void
+coff_syminfo (struct backtrace_state *state, uintptr_t addr,
+ backtrace_syminfo_callback callback,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data)
+{
+ struct coff_syminfo_data *sdata;
+ struct coff_symbol *sym = NULL;
+
+ if (!state->threaded)
+ {
+ for (sdata = (struct coff_syminfo_data *) state->syminfo_data;
+ sdata != NULL;
+ sdata = sdata->next)
+ {
+ sym = ((struct coff_symbol *)
+ bsearch (&addr, sdata->symbols, sdata->count,
+ sizeof (struct coff_symbol), coff_symbol_search));
+ if (sym != NULL)
+ break;
+ }
+ }
+ else
+ {
+ struct coff_syminfo_data **pp;
+
+ pp = (struct coff_syminfo_data **) (void *) &state->syminfo_data;
+ while (1)
+ {
+ sdata = backtrace_atomic_load_pointer (pp);
+ if (sdata == NULL)
+ break;
+
+ sym = ((struct coff_symbol *)
+ bsearch (&addr, sdata->symbols, sdata->count,
+ sizeof (struct coff_symbol), coff_symbol_search));
+ if (sym != NULL)
+ break;
+
+ pp = &sdata->next;
+ }
+ }
+
+ if (sym == NULL)
+ callback (data, addr, NULL, 0, 0);
+ else
+ callback (data, addr, sym->name, sym->address, 0);
+}
+
+/* Add the backtrace data for one PE/COFF file. Returns 1 on success,
+ 0 on failure (in both cases descriptor is closed). */
+
+static int
+coff_add (struct backtrace_state *state, int descriptor,
+ backtrace_error_callback error_callback, void *data,
+ fileline *fileline_fn, int *found_sym, int *found_dwarf)
+{
+ struct backtrace_view fhdr_view;
+ off_t fhdr_off;
+ int magic_ok;
+ b_coff_file_header fhdr;
+ off_t opt_sects_off;
+ size_t opt_sects_size;
+ unsigned int sects_num;
+ struct backtrace_view sects_view;
+ int sects_view_valid;
+ const b_coff_optional_header *opt_hdr;
+ const b_coff_section_header *sects;
+ struct backtrace_view str_view;
+ int str_view_valid;
+ uint32_t str_size;
+ off_t str_off;
+ // NOTE: upstream doesn't have `{0}`, this is a fix for Rust issue #39468.
+ // If syms_view is not initialized, then `free(syms_view.base)` may segfault later.
+ struct backtrace_view syms_view = {0};
+ off_t syms_off;
+ size_t syms_size;
+ int syms_view_valid;
+ unsigned int syms_num;
+ unsigned int i;
+ struct debug_section_info sections[DEBUG_MAX];
+ off_t min_offset;
+ off_t max_offset;
+ struct backtrace_view debug_view;
+ int debug_view_valid;
+ uintptr_t image_base;
+
+ *found_sym = 0;
+ *found_dwarf = 0;
+
+ sects_view_valid = 0;
+ syms_view_valid = 0;
+ str_view_valid = 0;
+ debug_view_valid = 0;
+
+ /* Map the MS-DOS stub (if any) and extract file header offset. */
+ if (!backtrace_get_view (state, descriptor, 0, 0x40, error_callback,
+ data, &fhdr_view))
+ goto fail;
+
+ {
+ const unsigned char *vptr = fhdr_view.data;
+
+ if (vptr[0] == 'M' && vptr[1] == 'Z')
+ fhdr_off = coff_read4 (vptr + 0x3c);
+ else
+ fhdr_off = 0;
+ }
+
+ backtrace_release_view (state, &fhdr_view, error_callback, data);
+
+ /* Map the coff file header. */
+ if (!backtrace_get_view (state, descriptor, fhdr_off,
+ sizeof (b_coff_file_header) + 4,
+ error_callback, data, &fhdr_view))
+ goto fail;
+
+ if (fhdr_off != 0)
+ {
+ const char *magic = (const char *) fhdr_view.data;
+ magic_ok = memcmp (magic, "PE\0", 4) == 0;
+ fhdr_off += 4;
+
+ memcpy (&fhdr, fhdr_view.data + 4, sizeof fhdr);
+ }
+ else
+ {
+ memcpy (&fhdr, fhdr_view.data, sizeof fhdr);
+ /* TODO: test fhdr.machine for coff but non-PE platforms. */
+ magic_ok = 0;
+ }
+ backtrace_release_view (state, &fhdr_view, error_callback, data);
+
+ if (!magic_ok)
+ {
+ error_callback (data, "executable file is not COFF", 0);
+ goto fail;
+ }
+
+ sects_num = fhdr.number_of_sections;
+ syms_num = fhdr.number_of_symbols;
+
+ opt_sects_off = fhdr_off + sizeof (fhdr);
+ opt_sects_size = (fhdr.size_of_optional_header
+ + sects_num * sizeof (b_coff_section_header));
+
+ /* To translate PC to file/line when using DWARF, we need to find
+ the .debug_info and .debug_line sections. */
+
+ /* Read the optional header and the section headers. */
+
+ if (!backtrace_get_view (state, descriptor, opt_sects_off, opt_sects_size,
+ error_callback, data, &sects_view))
+ goto fail;
+ sects_view_valid = 1;
+ opt_hdr = (const b_coff_optional_header *) sects_view.data;
+ sects = (const b_coff_section_header *)
+ (sects_view.data + fhdr.size_of_optional_header);
+
+ if (fhdr.size_of_optional_header > sizeof (*opt_hdr))
+ {
+ if (opt_hdr->magic == PE_MAGIC)
+ image_base = opt_hdr->u.pe.image_base;
+ else if (opt_hdr->magic == PEP_MAGIC)
+ image_base = opt_hdr->u.pep.image_base;
+ else
+ {
+ error_callback (data, "bad magic in PE optional header", 0);
+ goto fail;
+ }
+ }
+ else
+ image_base = 0;
+
+ /* Read the symbol table and the string table. */
+
+ if (fhdr.pointer_to_symbol_table == 0)
+ {
+ /* No symbol table, no string table. */
+ str_off = 0;
+ str_size = 0;
+ syms_num = 0;
+ syms_size = 0;
+ }
+ else
+ {
+ /* Symbol table is followed by the string table. The string table
+ starts with its length (on 4 bytes).
+ Map the symbol table and the length of the string table. */
+ syms_off = fhdr.pointer_to_symbol_table;
+ syms_size = syms_num * SYM_SZ;
+
+ if (!backtrace_get_view (state, descriptor, syms_off, syms_size + 4,
+ error_callback, data, &syms_view))
+ goto fail;
+ syms_view_valid = 1;
+
+ str_size = coff_read4 (syms_view.data + syms_size);
+
+ str_off = syms_off + syms_size;
+
+ if (str_size > 4)
+ {
+ /* Map string table (including the length word). */
+
+ if (!backtrace_get_view (state, descriptor, str_off, str_size,
+ error_callback, data, &str_view))
+ goto fail;
+ str_view_valid = 1;
+ }
+ }
+
+ memset (sections, 0, sizeof sections);
+
+ /* Look for the symbol table. */
+ for (i = 0; i < sects_num; ++i)
+ {
+ const b_coff_section_header *s = sects + i;
+ unsigned int str_off1;
+ int j;
+
+ if (s->name[0] == '/')
+ {
+ /* Extended section name. */
+ str_off1 = atoi (s->name + 1);
+ }
+ else
+ str_off1 = 0;
+
+ for (j = 0; j < (int) DEBUG_MAX; ++j)
+ {
+ const char *dbg_name = debug_section_names[j];
+ int match;
+
+ if (str_off1 != 0)
+ match = coff_long_name_eq (dbg_name, str_off1, &str_view);
+ else
+ match = coff_short_name_eq (dbg_name, s->name);
+ if (match)
+ {
+ sections[j].offset = s->pointer_to_raw_data;
+ sections[j].size = s->virtual_size <= s->size_of_raw_data ?
+ s->virtual_size : s->size_of_raw_data;
+ break;
+ }
+ }
+ }
+
+ if (syms_num != 0)
+ {
+ struct coff_syminfo_data *sdata;
+
+ sdata = ((struct coff_syminfo_data *)
+ backtrace_alloc (state, sizeof *sdata, error_callback, data));
+ if (sdata == NULL)
+ goto fail;
+
+ if (!coff_initialize_syminfo (state, image_base,
+ sects, sects_num,
+ syms_view.data, syms_size,
+ str_view.data, str_size,
+ error_callback, data, sdata))
+ {
+ backtrace_free (state, sdata, sizeof *sdata, error_callback, data);
+ goto fail;
+ }
+
+ *found_sym = 1;
+
+ coff_add_syminfo_data (state, sdata);
+ }
+
+ backtrace_release_view (state, &sects_view, error_callback, data);
+ sects_view_valid = 0;
+ if (syms_view_valid)
+ {
+ backtrace_release_view (state, &syms_view, error_callback, data);
+ syms_view_valid = 0;
+ }
+
+ /* Read all the debug sections in a single view, since they are
+ probably adjacent in the file. We never release this view. */
+
+ min_offset = 0;
+ max_offset = 0;
+ for (i = 0; i < (int) DEBUG_MAX; ++i)
+ {
+ off_t end;
+
+ if (sections[i].size == 0)
+ continue;
+ if (min_offset == 0 || sections[i].offset < min_offset)
+ min_offset = sections[i].offset;
+ end = sections[i].offset + sections[i].size;
+ if (end > max_offset)
+ max_offset = end;
+ }
+ if (min_offset == 0 || max_offset == 0)
+ {
+ if (!backtrace_close (descriptor, error_callback, data))
+ goto fail;
+ *fileline_fn = coff_nodebug;
+ return 1;
+ }
+
+ if (!backtrace_get_view (state, descriptor, min_offset,
+ max_offset - min_offset,
+ error_callback, data, &debug_view))
+ goto fail;
+ debug_view_valid = 1;
+
+ /* We've read all we need from the executable. */
+ if (!backtrace_close (descriptor, error_callback, data))
+ goto fail;
+ descriptor = -1;
+
+ for (i = 0; i < (int) DEBUG_MAX; ++i)
+ {
+ if (sections[i].size == 0)
+ sections[i].data = NULL;
+ else
+ sections[i].data = ((const unsigned char *) debug_view.data
+ + (sections[i].offset - min_offset));
+ }
+
+ if (!backtrace_dwarf_add (state, /* base_address */ 0,
+ sections[DEBUG_INFO].data,
+ sections[DEBUG_INFO].size,
+ sections[DEBUG_LINE].data,
+ sections[DEBUG_LINE].size,
+ sections[DEBUG_ABBREV].data,
+ sections[DEBUG_ABBREV].size,
+ sections[DEBUG_RANGES].data,
+ sections[DEBUG_RANGES].size,
+ sections[DEBUG_STR].data,
+ sections[DEBUG_STR].size,
+ 0, /* FIXME */
+ error_callback, data, fileline_fn))
+ goto fail;
+
+ *found_dwarf = 1;
+
+ return 1;
+
+ fail:
+ if (sects_view_valid)
+ backtrace_release_view (state, &sects_view, error_callback, data);
+ if (str_view_valid)
+ backtrace_release_view (state, &str_view, error_callback, data);
+ if (syms_view_valid)
+ backtrace_release_view (state, &syms_view, error_callback, data);
+ if (debug_view_valid)
+ backtrace_release_view (state, &debug_view, error_callback, data);
+ if (descriptor != -1)
+ backtrace_close (descriptor, error_callback, data);
+ return 0;
+}
+
+/* Initialize the backtrace data we need from an ELF executable. At
+ the ELF level, all we need to do is find the debug info
+ sections. */
+
+int
+backtrace_initialize (struct backtrace_state *state,
+ const char *filename ATTRIBUTE_UNUSED, int descriptor,
+ backtrace_error_callback error_callback,
+ void *data, fileline *fileline_fn)
+{
+ int ret;
+ int found_sym;
+ int found_dwarf;
+ fileline coff_fileline_fn;
+
+ ret = coff_add (state, descriptor, error_callback, data,
+ &coff_fileline_fn, &found_sym, &found_dwarf);
+ if (!ret)
+ return 0;
+
+ if (!state->threaded)
+ {
+ if (found_sym)
+ state->syminfo_fn = coff_syminfo;
+ else if (state->syminfo_fn == NULL)
+ state->syminfo_fn = coff_nosyms;
+ }
+ else
+ {
+ if (found_sym)
+ backtrace_atomic_store_pointer (&state->syminfo_fn, coff_syminfo);
+ else
+ __sync_bool_compare_and_swap (&state->syminfo_fn, NULL, coff_nosyms);
+ }
+
+ if (!state->threaded)
+ {
+ if (state->fileline_fn == NULL || state->fileline_fn == coff_nodebug)
+ *fileline_fn = coff_fileline_fn;
+ }
+ else
+ {
+ fileline current_fn;
+
+ current_fn = backtrace_atomic_load_pointer (&state->fileline_fn);
+ if (current_fn == NULL || current_fn == coff_nodebug)
+ *fileline_fn = coff_fileline_fn;
+ }
+
+ return 1;
+}
diff --git a/3rdparty/libbacktrace/posix.c b/3rdparty/libbacktrace/posix.c
new file mode 100644
index 000000000..ce441d98f
--- /dev/null
+++ b/3rdparty/libbacktrace/posix.c
@@ -0,0 +1,100 @@
+/* posix.c -- POSIX file I/O routines for the backtrace library.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "backtrace.h"
+#include "internal.h"
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+#ifndef O_CLOEXEC
+#define O_CLOEXEC 0
+#endif
+
+#ifndef FD_CLOEXEC
+#define FD_CLOEXEC 1
+#endif
+
+/* Open a file for reading. */
+
+int
+backtrace_open (const char *filename, backtrace_error_callback error_callback,
+ void *data, int *does_not_exist)
+{
+ int descriptor;
+
+ if (does_not_exist != NULL)
+ *does_not_exist = 0;
+
+ descriptor = open (filename, (int) (O_RDONLY | O_BINARY | O_CLOEXEC));
+ if (descriptor < 0)
+ {
+ if (does_not_exist != NULL && errno == ENOENT)
+ *does_not_exist = 1;
+ else
+ error_callback (data, filename, errno);
+ return -1;
+ }
+
+#ifdef HAVE_FCNTL
+ /* Set FD_CLOEXEC just in case the kernel does not support
+ O_CLOEXEC. It doesn't matter if this fails for some reason.
+ FIXME: At some point it should be safe to only do this if
+ O_CLOEXEC == 0. */
+ fcntl (descriptor, F_SETFD, FD_CLOEXEC);
+#endif
+
+ return descriptor;
+}
+
+/* Close DESCRIPTOR. */
+
+int
+backtrace_close (int descriptor, backtrace_error_callback error_callback,
+ void *data)
+{
+ if (close (descriptor) < 0)
+ {
+ error_callback (data, "close", errno);
+ return 0;
+ }
+ return 1;
+}
diff --git a/3rdparty/libbacktrace/print.c b/3rdparty/libbacktrace/print.c
new file mode 100644
index 000000000..3c6bad283
--- /dev/null
+++ b/3rdparty/libbacktrace/print.c
@@ -0,0 +1,92 @@
+/* print.c -- Print the current backtrace.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "backtrace.h"
+#include "internal.h"
+
+/* Passed to callbacks. */
+
+struct print_data
+{
+ struct backtrace_state *state;
+ FILE *f;
+};
+
+/* Print one level of a backtrace. */
+
+static int
+print_callback (void *data, uintptr_t pc, const char *filename, int lineno,
+ const char *function)
+{
+ struct print_data *pdata = (struct print_data *) data;
+
+ fprintf (pdata->f, "0x%lx %s\n\t%s:%d\n",
+ (unsigned long) pc,
+ function == NULL ? "???" : function,
+ filename == NULL ? "???" : filename,
+ lineno);
+ return 0;
+}
+
+/* Print errors to stderr. */
+
+static void
+error_callback (void *data, const char *msg, int errnum)
+{
+ struct print_data *pdata = (struct print_data *) data;
+
+ if (pdata->state->filename != NULL)
+ fprintf (stderr, "%s: ", pdata->state->filename);
+ fprintf (stderr, "libbacktrace: %s", msg);
+ if (errnum > 0)
+ fprintf (stderr, ": %s", strerror (errnum));
+ fputc ('\n', stderr);
+}
+
+/* Print a backtrace. */
+
+void
+backtrace_print (struct backtrace_state *state, int skip, FILE *f)
+{
+ struct print_data data;
+
+ data.state = state;
+ data.f = f;
+ backtrace_full (state, skip + 1, print_callback, error_callback,
+ (void *) &data);
+}
diff --git a/3rdparty/libbacktrace/read.c b/3rdparty/libbacktrace/read.c
new file mode 100644
index 000000000..211d6457c
--- /dev/null
+++ b/3rdparty/libbacktrace/read.c
@@ -0,0 +1,96 @@
+/* read.c -- File views without mmap.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <errno.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "backtrace.h"
+#include "internal.h"
+
+/* This file implements file views when mmap is not available. */
+
+/* Create a view of SIZE bytes from DESCRIPTOR at OFFSET. */
+
+int
+backtrace_get_view (struct backtrace_state *state, int descriptor,
+ off_t offset, size_t size,
+ backtrace_error_callback error_callback,
+ void *data, struct backtrace_view *view)
+{
+ ssize_t got;
+
+ if (lseek (descriptor, offset, SEEK_SET) < 0)
+ {
+ error_callback (data, "lseek", errno);
+ return 0;
+ }
+
+ view->base = backtrace_alloc (state, size, error_callback, data);
+ if (view->base == NULL)
+ return 0;
+ view->data = view->base;
+ view->len = size;
+
+ got = read (descriptor, view->base, size);
+ if (got < 0)
+ {
+ error_callback (data, "read", errno);
+ free (view->base);
+ return 0;
+ }
+
+ if ((size_t) got < size)
+ {
+ error_callback (data, "file too short", 0);
+ free (view->base);
+ return 0;
+ }
+
+ return 1;
+}
+
+/* Release a view read by backtrace_get_view. */
+
+void
+backtrace_release_view (struct backtrace_state *state,
+ struct backtrace_view *view,
+ backtrace_error_callback error_callback,
+ void *data)
+{
+ backtrace_free (state, view->base, view->len, error_callback, data);
+ view->data = NULL;
+ view->base = NULL;
+}
diff --git a/3rdparty/libbacktrace/simple.c b/3rdparty/libbacktrace/simple.c
new file mode 100644
index 000000000..510877c23
--- /dev/null
+++ b/3rdparty/libbacktrace/simple.c
@@ -0,0 +1,108 @@
+/* simple.c -- The backtrace_simple function.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include "unwind.h"
+#include "backtrace.h"
+
+/* The simple_backtrace routine. */
+
+/* Data passed through _Unwind_Backtrace. */
+
+struct backtrace_simple_data
+{
+ /* Number of frames to skip. */
+ int skip;
+ /* Library state. */
+ struct backtrace_state *state;
+ /* Callback routine. */
+ backtrace_simple_callback callback;
+ /* Error callback routine. */
+ backtrace_error_callback error_callback;
+ /* Data to pass to callback routine. */
+ void *data;
+ /* Value to return from backtrace. */
+ int ret;
+};
+
+/* Unwind library callback routine. This is passd to
+ _Unwind_Backtrace. */
+
+static _Unwind_Reason_Code
+simple_unwind (struct _Unwind_Context *context, void *vdata)
+{
+ struct backtrace_simple_data *bdata = (struct backtrace_simple_data *) vdata;
+ uintptr_t pc;
+ int ip_before_insn = 0;
+
+#ifdef HAVE_GETIPINFO
+ pc = _Unwind_GetIPInfo (context, &ip_before_insn);
+#else
+ pc = _Unwind_GetIP (context);
+#endif
+
+ if (bdata->skip > 0)
+ {
+ --bdata->skip;
+ return _URC_NO_REASON;
+ }
+
+ if (!ip_before_insn)
+ --pc;
+
+ bdata->ret = bdata->callback (bdata->data, pc);
+
+ if (bdata->ret != 0)
+ return _URC_END_OF_STACK;
+
+ return _URC_NO_REASON;
+}
+
+/* Get a simple stack backtrace. */
+
+int
+backtrace_simple (struct backtrace_state *state, int skip,
+ backtrace_simple_callback callback,
+ backtrace_error_callback error_callback, void *data)
+{
+ struct backtrace_simple_data bdata;
+
+ bdata.skip = skip + 1;
+ bdata.state = state;
+ bdata.callback = callback;
+ bdata.error_callback = error_callback;
+ bdata.data = data;
+ bdata.ret = 0;
+ _Unwind_Backtrace (simple_unwind, &bdata);
+ return bdata.ret;
+}
diff --git a/3rdparty/libbacktrace/sort.c b/3rdparty/libbacktrace/sort.c
new file mode 100644
index 000000000..9121bcb8d
--- /dev/null
+++ b/3rdparty/libbacktrace/sort.c
@@ -0,0 +1,108 @@
+/* sort.c -- Sort without allocating memory
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <stddef.h>
+#include <sys/types.h>
+
+#include "backtrace.h"
+#include "internal.h"
+
+/* The GNU glibc version of qsort allocates memory, which we must not
+ do if we are invoked by a signal handler. So provide our own
+ sort. */
+
+static void
+swap (char *a, char *b, size_t size)
+{
+ size_t i;
+
+ for (i = 0; i < size; i++, a++, b++)
+ {
+ char t;
+
+ t = *a;
+ *a = *b;
+ *b = t;
+ }
+}
+
+void
+backtrace_qsort (void *basearg, size_t count, size_t size,
+ int (*compar) (const void *, const void *))
+{
+ char *base = (char *) basearg;
+ size_t i;
+ size_t mid;
+
+ tail_recurse:
+ if (count < 2)
+ return;
+
+ /* The symbol table and DWARF tables, which is all we use this
+ routine for, tend to be roughly sorted. Pick the middle element
+ in the array as our pivot point, so that we are more likely to
+ cut the array in half for each recursion step. */
+ swap (base, base + (count / 2) * size, size);
+
+ mid = 0;
+ for (i = 1; i < count; i++)
+ {
+ if ((*compar) (base, base + i * size) > 0)
+ {
+ ++mid;
+ if (i != mid)
+ swap (base + mid * size, base + i * size, size);
+ }
+ }
+
+ if (mid > 0)
+ swap (base, base + mid * size, size);
+
+ /* Recurse with the smaller array, loop with the larger one. That
+ ensures that our maximum stack depth is log count. */
+ if (2 * mid < count)
+ {
+ backtrace_qsort (base, mid, size, compar);
+ base += (mid + 1) * size;
+ count -= mid + 1;
+ goto tail_recurse;
+ }
+ else
+ {
+ backtrace_qsort (base + (mid + 1) * size, count - (mid + 1),
+ size, compar);
+ count = mid;
+ goto tail_recurse;
+ }
+}
diff --git a/3rdparty/libbacktrace/state.c b/3rdparty/libbacktrace/state.c
new file mode 100644
index 000000000..ad360a6b1
--- /dev/null
+++ b/3rdparty/libbacktrace/state.c
@@ -0,0 +1,72 @@
+/* state.c -- Create the backtrace state.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <string.h>
+#include <sys/types.h>
+
+#include "backtrace.h"
+#include "backtrace-supported.h"
+#include "internal.h"
+
+/* Create the backtrace state. This will then be passed to all the
+ other routines. */
+
+struct backtrace_state *
+backtrace_create_state (const char *filename, int threaded,
+ backtrace_error_callback error_callback,
+ void *data)
+{
+ struct backtrace_state init_state;
+ struct backtrace_state *state;
+
+#ifndef HAVE_SYNC_FUNCTIONS
+ if (threaded)
+ {
+ error_callback (data, "backtrace library does not support threads", 0);
+ return NULL;
+ }
+#endif
+
+ memset (&init_state, 0, sizeof init_state);
+ init_state.filename = filename;
+ init_state.threaded = threaded;
+
+ state = ((struct backtrace_state *)
+ backtrace_alloc (&init_state, sizeof *state, error_callback, data));
+ if (state == NULL)
+ return NULL;
+ *state = init_state;
+
+ return state;
+}
diff --git a/3rdparty/libbacktrace/stest.c b/3rdparty/libbacktrace/stest.c
new file mode 100644
index 000000000..2eb98808d
--- /dev/null
+++ b/3rdparty/libbacktrace/stest.c
@@ -0,0 +1,137 @@
+/* stest.c -- Test for libbacktrace internal sort function
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "backtrace.h"
+#include "internal.h"
+
+/* Test the local qsort implementation. */
+
+#define MAX 10
+
+struct test
+{
+ size_t count;
+ int input[MAX];
+ int output[MAX];
+};
+
+static struct test tests[] =
+ {
+ {
+ 10,
+ { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
+ { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
+ },
+ {
+ 9,
+ { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
+ { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
+ },
+ {
+ 10,
+ { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 },
+ { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
+ },
+ {
+ 9,
+ { 9, 8, 7, 6, 5, 4, 3, 2, 1 },
+ { 1, 2, 3, 4, 5, 6, 7, 8, 9 },
+ },
+ {
+ 10,
+ { 2, 4, 6, 8, 10, 1, 3, 5, 7, 9 },
+ { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
+ },
+ {
+ 5,
+ { 4, 5, 3, 1, 2 },
+ { 1, 2, 3, 4, 5 },
+ },
+ {
+ 5,
+ { 1, 1, 1, 1, 1 },
+ { 1, 1, 1, 1, 1 },
+ },
+ {
+ 5,
+ { 1, 1, 2, 1, 1 },
+ { 1, 1, 1, 1, 2 },
+ },
+ {
+ 5,
+ { 2, 1, 1, 1, 1 },
+ { 1, 1, 1, 1, 2 },
+ },
+ };
+
+static int
+compare (const void *a, const void *b)
+{
+ const int *ai = (const int *) a;
+ const int *bi = (const int *) b;
+
+ return *ai - *bi;
+}
+
+int
+main (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
+{
+ int failures;
+ size_t i;
+ int a[MAX];
+
+ failures = 0;
+ for (i = 0; i < sizeof tests / sizeof tests[0]; i++)
+ {
+ memcpy (a, tests[i].input, tests[i].count * sizeof (int));
+ backtrace_qsort (a, tests[i].count, sizeof (int), compare);
+ if (memcmp (a, tests[i].output, tests[i].count * sizeof (int)) != 0)
+ {
+ size_t j;
+
+ fprintf (stderr, "test %d failed:", (int) i);
+ for (j = 0; j < tests[i].count; j++)
+ fprintf (stderr, " %d", a[j]);
+ fprintf (stderr, "\n");
+ ++failures;
+ }
+ }
+
+ exit (failures > 0 ? EXIT_FAILURE : EXIT_SUCCESS);
+}
diff --git a/3rdparty/libbacktrace/testlib.c b/3rdparty/libbacktrace/testlib.c
new file mode 100644
index 000000000..6dbef7c38
--- /dev/null
+++ b/3rdparty/libbacktrace/testlib.c
@@ -0,0 +1,234 @@
+/* testlib.c -- test functions for libbacktrace library
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "filenames.h"
+
+#include "backtrace.h"
+
+#include "testlib.h"
+
+/* The backtrace state. */
+
+void *state;
+
+/* The number of failures. */
+
+int failures;
+
+/* Return the base name in a path. */
+
+const char *
+base (const char *p)
+{
+ const char *last;
+ const char *s;
+
+ last = NULL;
+ for (s = p; *s != '\0'; ++s)
+ {
+ if (IS_DIR_SEPARATOR (*s))
+ last = s + 1;
+ }
+ return last != NULL ? last : p;
+}
+
+/* Check an entry in a struct info array. */
+
+void
+check (const char *name, int index, const struct info *all, int want_lineno,
+ const char *want_function, const char *want_file, int *failed)
+{
+ if (*failed)
+ return;
+ if (all[index].filename == NULL || all[index].function == NULL)
+ {
+ fprintf (stderr, "%s: [%d]: missing file name or function name\n",
+ name, index);
+ *failed = 1;
+ return;
+ }
+ if (strcmp (base (all[index].filename), want_file) != 0)
+ {
+ fprintf (stderr, "%s: [%d]: got %s expected %s\n", name, index,
+ all[index].filename, want_file);
+ *failed = 1;
+ }
+ if (all[index].lineno != want_lineno)
+ {
+ fprintf (stderr, "%s: [%d]: got %d expected %d\n", name, index,
+ all[index].lineno, want_lineno);
+ *failed = 1;
+ }
+ if (strcmp (all[index].function, want_function) != 0)
+ {
+ fprintf (stderr, "%s: [%d]: got %s expected %s\n", name, index,
+ all[index].function, want_function);
+ *failed = 1;
+ }
+}
+
+/* The backtrace callback function. */
+
+int
+callback_one (void *vdata, uintptr_t pc ATTRIBUTE_UNUSED,
+ const char *filename, int lineno, const char *function)
+{
+ struct bdata *data = (struct bdata *) vdata;
+ struct info *p;
+
+ if (data->index >= data->max)
+ {
+ fprintf (stderr, "callback_one: callback called too many times\n");
+ data->failed = 1;
+ return 1;
+ }
+
+ p = &data->all[data->index];
+ if (filename == NULL)
+ p->filename = NULL;
+ else
+ {
+ p->filename = strdup (filename);
+ assert (p->filename != NULL);
+ }
+ p->lineno = lineno;
+ if (function == NULL)
+ p->function = NULL;
+ else
+ {
+ p->function = strdup (function);
+ assert (p->function != NULL);
+ }
+ ++data->index;
+
+ return 0;
+}
+
+/* An error callback passed to backtrace. */
+
+void
+error_callback_one (void *vdata, const char *msg, int errnum)
+{
+ struct bdata *data = (struct bdata *) vdata;
+
+ fprintf (stderr, "%s", msg);
+ if (errnum > 0)
+ fprintf (stderr, ": %s", strerror (errnum));
+ fprintf (stderr, "\n");
+ data->failed = 1;
+}
+
+/* The backtrace_simple callback function. */
+
+int
+callback_two (void *vdata, uintptr_t pc)
+{
+ struct sdata *data = (struct sdata *) vdata;
+
+ if (data->index >= data->max)
+ {
+ fprintf (stderr, "callback_two: callback called too many times\n");
+ data->failed = 1;
+ return 1;
+ }
+
+ data->addrs[data->index] = pc;
+ ++data->index;
+
+ return 0;
+}
+
+/* An error callback passed to backtrace_simple. */
+
+void
+error_callback_two (void *vdata, const char *msg, int errnum)
+{
+ struct sdata *data = (struct sdata *) vdata;
+
+ fprintf (stderr, "%s", msg);
+ if (errnum > 0)
+ fprintf (stderr, ": %s", strerror (errnum));
+ fprintf (stderr, "\n");
+ data->failed = 1;
+}
+
+/* The backtrace_syminfo callback function. */
+
+void
+callback_three (void *vdata, uintptr_t pc ATTRIBUTE_UNUSED,
+ const char *symname, uintptr_t symval,
+ uintptr_t symsize)
+{
+ struct symdata *data = (struct symdata *) vdata;
+
+ if (symname == NULL)
+ data->name = NULL;
+ else
+ {
+ data->name = strdup (symname);
+ assert (data->name != NULL);
+ }
+ data->val = symval;
+ data->size = symsize;
+}
+
+/* The backtrace_syminfo error callback function. */
+
+void
+error_callback_three (void *vdata, const char *msg, int errnum)
+{
+ struct symdata *data = (struct symdata *) vdata;
+
+ fprintf (stderr, "%s", msg);
+ if (errnum > 0)
+ fprintf (stderr, ": %s", strerror (errnum));
+ fprintf (stderr, "\n");
+ data->failed = 1;
+}
+
+/* The backtrace_create_state error callback function. */
+
+void
+error_callback_create (void *data ATTRIBUTE_UNUSED, const char *msg,
+ int errnum)
+{
+ fprintf (stderr, "%s", msg);
+ if (errnum > 0)
+ fprintf (stderr, ": %s", strerror (errnum));
+ fprintf (stderr, "\n");
+ exit (EXIT_FAILURE);
+}
diff --git a/3rdparty/libbacktrace/testlib.h b/3rdparty/libbacktrace/testlib.h
new file mode 100644
index 000000000..5094656f1
--- /dev/null
+++ b/3rdparty/libbacktrace/testlib.h
@@ -0,0 +1,110 @@
+/* testlib.h -- Header for test functions for libbacktrace library
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#ifndef LIBBACKTRACE_TESTLIB_H
+#define LIBBACKTRACE_TESTLIB_H
+
+/* Portable attribute syntax. Actually some of these tests probably
+ won't work if the attributes are not recognized. */
+
+#ifndef GCC_VERSION
+# define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
+#endif
+
+#if (GCC_VERSION < 2007)
+# define __attribute__(x)
+#endif
+
+#ifndef ATTRIBUTE_UNUSED
+# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+#endif
+
+/* Used to collect backtrace info. */
+
+struct info
+{
+ char *filename;
+ int lineno;
+ char *function;
+};
+
+/* Passed to backtrace callback function. */
+
+struct bdata
+{
+ struct info *all;
+ size_t index;
+ size_t max;
+ int failed;
+};
+
+/* Passed to backtrace_simple callback function. */
+
+struct sdata
+{
+ uintptr_t *addrs;
+ size_t index;
+ size_t max;
+ int failed;
+};
+
+/* Passed to backtrace_syminfo callback function. */
+
+struct symdata
+{
+ const char *name;
+ uintptr_t val, size;
+ int failed;
+};
+
+/* The backtrace state. */
+
+extern void *state;
+
+/* The number of failures. */
+
+extern int failures;
+
+extern const char *base (const char *p);
+extern void check (const char *name, int index, const struct info *all,
+ int want_lineno, const char *want_function,
+ const char *want_file, int *failed);
+extern int callback_one (void *, uintptr_t, const char *, int, const char *);
+extern void error_callback_one (void *, const char *, int);
+extern int callback_two (void *, uintptr_t);
+extern void error_callback_two (void *, const char *, int);
+extern void callback_three (void *, uintptr_t, const char *, uintptr_t,
+ uintptr_t);
+extern void error_callback_three (void *, const char *, int);
+extern void error_callback_create (void *, const char *, int);
+
+#endif /* !defined(LIBBACKTRACE_TESTLIB_H) */
diff --git a/3rdparty/libbacktrace/ttest.c b/3rdparty/libbacktrace/ttest.c
new file mode 100644
index 000000000..ca55e9b37
--- /dev/null
+++ b/3rdparty/libbacktrace/ttest.c
@@ -0,0 +1,161 @@
+/* ttest.c -- Test for libbacktrace library
+ Copyright (C) 2017-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+/* Test using the libbacktrace library from multiple threads. */
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <pthread.h>
+
+#include "filenames.h"
+
+#include "backtrace.h"
+#include "backtrace-supported.h"
+
+#include "testlib.h"
+
+static int f2 (int) __attribute__ ((noinline));
+static int f3 (int, int) __attribute__ ((noinline));
+
+/* Test that a simple backtrace works. This is called via
+ pthread_create. It returns the number of failures, as void *. */
+
+static void *
+test1_thread (void *arg ATTRIBUTE_UNUSED)
+{
+ /* Returning a value here and elsewhere avoids a tailcall which
+ would mess up the backtrace. */
+ return (void *) (uintptr_t) (f2 (__LINE__) - 2);
+}
+
+static int
+f2 (int f1line)
+{
+ return f3 (f1line, __LINE__) + 2;
+}
+
+static int
+f3 (int f1line, int f2line)
+{
+ struct info all[20];
+ struct bdata data;
+ int f3line;
+ int i;
+
+ data.all = &all[0];
+ data.index = 0;
+ data.max = 20;
+ data.failed = 0;
+
+ f3line = __LINE__ + 1;
+ i = backtrace_full (state, 0, callback_one, error_callback_one, &data);
+
+ if (i != 0)
+ {
+ fprintf (stderr, "test1: unexpected return value %d\n", i);
+ data.failed = 1;
+ }
+
+ if (data.index < 3)
+ {
+ fprintf (stderr,
+ "test1: not enough frames; got %zu, expected at least 3\n",
+ data.index);
+ data.failed = 1;
+ }
+
+ check ("test1", 0, all, f3line, "f3", "ttest.c", &data.failed);
+ check ("test1", 1, all, f2line, "f2", "ttest.c", &data.failed);
+ check ("test1", 2, all, f1line, "test1_thread", "ttest.c", &data.failed);
+
+ return data.failed;
+}
+
+/* Run the test with 10 threads simultaneously. */
+
+#define THREAD_COUNT 10
+
+static void test1 (void) __attribute__ ((unused));
+
+static void
+test1 (void)
+{
+ pthread_t atid[THREAD_COUNT];
+ int i;
+ int errnum;
+ int this_fail;
+ void *ret;
+
+ for (i = 0; i < THREAD_COUNT; i++)
+ {
+ errnum = pthread_create (&atid[i], NULL, test1_thread, NULL);
+ if (errnum != 0)
+ {
+ fprintf (stderr, "pthread_create %d: %s\n", i, strerror (errnum));
+ exit (EXIT_FAILURE);
+ }
+ }
+
+ this_fail = 0;
+ for (i = 0; i < THREAD_COUNT; i++)
+ {
+ errnum = pthread_join (atid[i], &ret);
+ if (errnum != 0)
+ {
+ fprintf (stderr, "pthread_join %d: %s\n", i, strerror (errnum));
+ exit (EXIT_FAILURE);
+ }
+ this_fail += (int) (uintptr_t) ret;
+ }
+
+ printf ("%s: threaded backtrace_full noinline\n", this_fail > 0 ? "FAIL" : "PASS");
+
+ failures += this_fail;
+}
+
+int
+main (int argc ATTRIBUTE_UNUSED, char **argv)
+{
+ state = backtrace_create_state (argv[0], BACKTRACE_SUPPORTS_THREADS,
+ error_callback_create, NULL);
+
+#if BACKTRACE_SUPPORTED
+#if BACKTRACE_SUPPORTS_THREADS
+ test1 ();
+#endif
+#endif
+
+ exit (failures ? EXIT_FAILURE : EXIT_SUCCESS);
+}
diff --git a/3rdparty/libbacktrace/unknown.c b/3rdparty/libbacktrace/unknown.c
new file mode 100644
index 000000000..be521a85c
--- /dev/null
+++ b/3rdparty/libbacktrace/unknown.c
@@ -0,0 +1,65 @@
+/* unknown.c -- used when backtrace configury does not know file format.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <sys/types.h>
+
+#include "backtrace.h"
+#include "internal.h"
+
+/* A trivial routine that always fails to find fileline data. */
+
+static int
+unknown_fileline (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ uintptr_t pc, backtrace_full_callback callback,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data)
+
+{
+ return callback (data, pc, NULL, 0, NULL);
+}
+
+/* Initialize the backtrace data when we don't know how to read the
+ debug info. */
+
+int
+backtrace_initialize (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ const char *filename ATTRIBUTE_UNUSED,
+ int descriptor ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data ATTRIBUTE_UNUSED, fileline *fileline_fn)
+{
+ state->fileline_data = NULL;
+ *fileline_fn = unknown_fileline;
+ return 1;
+}
diff --git a/3rdparty/libbacktrace/xcoff.c b/3rdparty/libbacktrace/xcoff.c
new file mode 100644
index 000000000..1ae001dd1
--- /dev/null
+++ b/3rdparty/libbacktrace/xcoff.c
@@ -0,0 +1,1642 @@
+/* xcoff.c -- Get debug data from an XCOFF file for backtraces.
+ Copyright (C) 2012-2018 Free Software Foundation, Inc.
+ Adapted from elf.c.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#ifdef HAVE_LOADQUERY
+#include <sys/ldr.h>
+#endif
+
+#include "backtrace.h"
+#include "internal.h"
+
+/* The configure script must tell us whether we are 32-bit or 64-bit
+ XCOFF. We could make this code test and support either possibility,
+ but there is no point. This code only works for the currently
+ running executable, which means that we know the XCOFF mode at
+ configure time. */
+
+#if BACKTRACE_XCOFF_SIZE != 32 && BACKTRACE_XCOFF_SIZE != 64
+#error "Unknown BACKTRACE_XCOFF_SIZE"
+#endif
+
+/* XCOFF file header. */
+
+#if BACKTRACE_XCOFF_SIZE == 32
+
+typedef struct {
+ uint16_t f_magic;
+ uint16_t f_nscns;
+ uint32_t f_timdat;
+ uint32_t f_symptr;
+ uint32_t f_nsyms;
+ uint16_t f_opthdr;
+ uint16_t f_flags;
+} b_xcoff_filhdr;
+
+#define XCOFF_MAGIC 0737
+
+#else /* BACKTRACE_XCOFF_SIZE != 32 */
+
+typedef struct {
+ uint16_t f_magic;
+ uint16_t f_nscns;
+ uint32_t f_timdat;
+ uint64_t f_symptr;
+ uint16_t f_opthdr;
+ uint16_t f_flags;
+ uint32_t f_nsyms;
+} b_xcoff_filhdr;
+
+#define XCOFF_MAGIC 0767
+
+#endif /* BACKTRACE_XCOFF_SIZE != 32 */
+
+#define F_SHROBJ 0x2000 /* File is a shared object. */
+
+/* XCOFF section header. */
+
+#if BACKTRACE_XCOFF_SIZE == 32
+
+typedef struct {
+ char s_name[8];
+ uint32_t s_paddr;
+ uint32_t s_vaddr;
+ uint32_t s_size;
+ uint32_t s_scnptr;
+ uint32_t s_relptr;
+ uint32_t s_lnnoptr;
+ uint16_t s_nreloc;
+ uint16_t s_nlnno;
+ uint32_t s_flags;
+} b_xcoff_scnhdr;
+
+#define _OVERFLOW_MARKER 65535
+
+#else /* BACKTRACE_XCOFF_SIZE != 32 */
+
+typedef struct {
+ char name[8];
+ uint64_t s_paddr;
+ uint64_t s_vaddr;
+ uint64_t s_size;
+ uint64_t s_scnptr;
+ uint64_t s_relptr;
+ uint64_t s_lnnoptr;
+ uint32_t s_nreloc;
+ uint32_t s_nlnno;
+ uint32_t s_flags;
+} b_xcoff_scnhdr;
+
+#endif /* BACKTRACE_XCOFF_SIZE != 32 */
+
+#define STYP_DWARF 0x10 /* DWARF debugging section. */
+#define STYP_TEXT 0x20 /* Executable text (code) section. */
+#define STYP_OVRFLO 0x8000 /* Line-number field overflow section. */
+
+#define SSUBTYP_DWINFO 0x10000 /* DWARF info section. */
+#define SSUBTYP_DWLINE 0x20000 /* DWARF line-number section. */
+#define SSUBTYP_DWARNGE 0x50000 /* DWARF aranges section. */
+#define SSUBTYP_DWABREV 0x60000 /* DWARF abbreviation section. */
+#define SSUBTYP_DWSTR 0x70000 /* DWARF strings section. */
+
+/* XCOFF symbol. */
+
+#define SYMNMLEN 8
+
+#if BACKTRACE_XCOFF_SIZE == 32
+
+typedef struct {
+ union {
+ char _name[SYMNMLEN];
+ struct {
+ uint32_t _zeroes;
+ uint32_t _offset;
+ } _s;
+ } _u;
+#define n_name _u._name
+#define n_zeroes _u._s._zeroes
+#define n_offset_ _u._s._offset
+
+ uint32_t n_value;
+ int16_t n_scnum;
+ uint16_t n_type;
+ uint8_t n_sclass;
+ uint8_t n_numaux;
+} __attribute__ ((packed)) b_xcoff_syment;
+
+#else /* BACKTRACE_XCOFF_SIZE != 32 */
+
+typedef struct {
+ uint64_t n_value;
+ uint32_t n_offset_;
+ int16_t n_scnum;
+ uint16_t n_type;
+ uint8_t n_sclass;
+ uint8_t n_numaux;
+} __attribute__ ((packed)) b_xcoff_syment;
+
+#endif /* BACKTRACE_XCOFF_SIZE != 32 */
+
+#define SYMESZ 18
+
+#define C_EXT 2 /* External symbol. */
+#define C_FCN 101 /* Beginning or end of function. */
+#define C_FILE 103 /* Source file name. */
+#define C_HIDEXT 107 /* Unnamed external symbol. */
+#define C_BINCL 108 /* Beginning of include file. */
+#define C_EINCL 109 /* End of include file. */
+#define C_WEAKEXT 111 /* Weak external symbol. */
+
+#define ISFCN(x) ((x) & 0x0020)
+
+/* XCOFF AUX entry. */
+
+#define AUXESZ 18
+#define FILNMLEN 14
+
+typedef union {
+#if BACKTRACE_XCOFF_SIZE == 32
+ struct {
+ uint16_t pad;
+ uint16_t x_lnnohi;
+ uint16_t x_lnno;
+ } x_block;
+#else
+ struct {
+ uint32_t x_lnno;
+ } x_block;
+#endif
+ union {
+ char x_fname[FILNMLEN];
+ struct {
+ uint32_t x_zeroes;
+ uint32_t x_offset;
+ char pad[FILNMLEN-8];
+ uint8_t x_ftype;
+ } _x;
+ } x_file;
+#if BACKTRACE_XCOFF_SIZE == 32
+ struct {
+ uint32_t x_exptr;
+ uint32_t x_fsize;
+ uint32_t x_lnnoptr;
+ uint32_t x_endndx;
+ } x_fcn;
+#else
+ struct {
+ uint64_t x_lnnoptr;
+ uint32_t x_fsize;
+ uint32_t x_endndx;
+ } x_fcn;
+#endif
+ struct {
+ uint8_t pad[AUXESZ-1];
+ uint8_t x_auxtype;
+ } x_auxtype;
+} __attribute__ ((packed)) b_xcoff_auxent;
+
+/* XCOFF line number entry. */
+
+#if BACKTRACE_XCOFF_SIZE == 32
+
+typedef struct {
+ union {
+ uint32_t l_symndx;
+ uint32_t l_paddr;
+ } l_addr;
+ uint16_t l_lnno;
+} b_xcoff_lineno;
+
+#define LINESZ 6
+
+#else /* BACKTRACE_XCOFF_SIZE != 32 */
+
+typedef struct {
+ union {
+ uint32_t l_symndx;
+ uint64_t l_paddr;
+ } l_addr;
+ uint32_t l_lnno;
+} b_xcoff_lineno;
+
+#define LINESZ 12
+
+#endif /* BACKTRACE_XCOFF_SIZE != 32 */
+
+#if BACKTRACE_XCOFF_SIZE == 32
+#define XCOFF_AIX_TEXTBASE 0x10000000u
+#else
+#define XCOFF_AIX_TEXTBASE 0x100000000ul
+#endif
+
+/* AIX big archive fixed-length header. */
+
+#define AIAMAGBIG "<bigaf>\n"
+
+typedef struct {
+ char fl_magic[8]; /* Archive magic string. */
+ char fl_memoff[20]; /* Offset to member table. */
+ char fl_gstoff[20]; /* Offset to global symbol table. */
+ char fl_gst64off[20]; /* Offset to global symbol table for 64-bit objects. */
+ char fl_fstmoff[20]; /* Offset to first archive member. */
+ char fl_freeoff[20]; /* Offset to first member on free list. */
+} b_ar_fl_hdr;
+
+/* AIX big archive file member header. */
+
+typedef struct {
+ char ar_size[20]; /* File member size - decimal. */
+ char ar_nxtmem[20]; /* Next member offset - decimal. */
+ char ar_prvmem[20]; /* Previous member offset - decimal. */
+ char ar_date[12]; /* File member date - decimal. */
+ char ar_uid[12]; /* File member userid - decimal. */
+ char ar_gid[12]; /* File member group id - decimal. */
+ char ar_mode[12]; /* File member mode - octal. */
+ char ar_namlen[4]; /* File member name length - decimal. */
+ char ar_name[2]; /* Start of member name. */
+} b_ar_hdr;
+
+
+/* Information we keep for an XCOFF symbol. */
+
+struct xcoff_symbol
+{
+ /* The name of the symbol. */
+ const char *name;
+ /* The address of the symbol. */
+ uintptr_t address;
+ /* The size of the symbol. */
+ size_t size;
+};
+
+/* Information to pass to xcoff_syminfo. */
+
+struct xcoff_syminfo_data
+{
+ /* Symbols for the next module. */
+ struct xcoff_syminfo_data *next;
+ /* The XCOFF symbols, sorted by address. */
+ struct xcoff_symbol *symbols;
+ /* The number of symbols. */
+ size_t count;
+};
+
+/* Information about an include file. */
+
+struct xcoff_incl
+{
+ /* File name. */
+ const char *filename;
+ /* Offset to first line number from the include file. */
+ uintptr_t begin;
+ /* Offset to last line number from the include file. */
+ uintptr_t end;
+};
+
+/* A growable vector of include files information. */
+
+struct xcoff_incl_vector
+{
+ /* Memory. This is an array of struct xcoff_incl. */
+ struct backtrace_vector vec;
+ /* Number of include files. */
+ size_t count;
+};
+
+/* Map a single PC value to a file/function/line. */
+
+struct xcoff_line
+{
+ /* PC. */
+ uintptr_t pc;
+ /* File name. Many entries in the array are expected to point to
+ the same file name. */
+ const char *filename;
+ /* Function name. */
+ const char *function;
+ /* Line number. */
+ int lineno;
+};
+
+/* A growable vector of line number information. This is used while
+ reading the line numbers. */
+
+struct xcoff_line_vector
+{
+ /* Memory. This is an array of struct xcoff_line. */
+ struct backtrace_vector vec;
+ /* Number of valid mappings. */
+ size_t count;
+};
+
+/* The information we need to map a PC to a file and line. */
+
+struct xcoff_fileline_data
+{
+ /* The data for the next file we know about. */
+ struct xcoff_fileline_data *next;
+ /* Line number information. */
+ struct xcoff_line_vector vec;
+};
+
+/* An index of DWARF sections we care about. */
+
+enum dwarf_section
+{
+ DWSECT_INFO,
+ DWSECT_LINE,
+ DWSECT_ABBREV,
+ DWSECT_RANGES,
+ DWSECT_STR,
+ DWSECT_MAX
+};
+
+/* Information we gather for the DWARF sections we care about. */
+
+struct dwsect_info
+{
+ /* Section file offset. */
+ off_t offset;
+ /* Section size. */
+ size_t size;
+ /* Section contents, after read from file. */
+ const unsigned char *data;
+};
+
+/* A dummy callback function used when we can't find any debug info. */
+
+static int
+xcoff_nodebug (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ uintptr_t pc ATTRIBUTE_UNUSED,
+ backtrace_full_callback callback ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback, void *data)
+{
+ error_callback (data, "no debug info in XCOFF executable", -1);
+ return 0;
+}
+
+/* A dummy callback function used when we can't find a symbol
+ table. */
+
+static void
+xcoff_nosyms (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ uintptr_t addr ATTRIBUTE_UNUSED,
+ backtrace_syminfo_callback callback ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback, void *data)
+{
+ error_callback (data, "no symbol table in XCOFF executable", -1);
+}
+
+/* Compare struct xcoff_symbol for qsort. */
+
+static int
+xcoff_symbol_compare (const void *v1, const void *v2)
+{
+ const struct xcoff_symbol *e1 = (const struct xcoff_symbol *) v1;
+ const struct xcoff_symbol *e2 = (const struct xcoff_symbol *) v2;
+
+ if (e1->address < e2->address)
+ return -1;
+ else if (e1->address > e2->address)
+ return 1;
+ else
+ return 0;
+}
+
+/* Compare an ADDR against an xcoff_symbol for bsearch. */
+
+static int
+xcoff_symbol_search (const void *vkey, const void *ventry)
+{
+ const uintptr_t *key = (const uintptr_t *) vkey;
+ const struct xcoff_symbol *entry = (const struct xcoff_symbol *) ventry;
+ uintptr_t addr;
+
+ addr = *key;
+ if (addr < entry->address)
+ return -1;
+ else if ((entry->size == 0 && addr > entry->address)
+ || (entry->size > 0 && addr >= entry->address + entry->size))
+ return 1;
+ else
+ return 0;
+}
+
+/* Add XDATA to the list in STATE. */
+
+static void
+xcoff_add_syminfo_data (struct backtrace_state *state,
+ struct xcoff_syminfo_data *xdata)
+{
+ if (!state->threaded)
+ {
+ struct xcoff_syminfo_data **pp;
+
+ for (pp = (struct xcoff_syminfo_data **) (void *) &state->syminfo_data;
+ *pp != NULL;
+ pp = &(*pp)->next)
+ ;
+ *pp = xdata;
+ }
+ else
+ {
+ while (1)
+ {
+ struct xcoff_syminfo_data **pp;
+
+ pp = (struct xcoff_syminfo_data **) (void *) &state->syminfo_data;
+
+ while (1)
+ {
+ struct xcoff_syminfo_data *p;
+
+ p = backtrace_atomic_load_pointer (pp);
+
+ if (p == NULL)
+ break;
+
+ pp = &p->next;
+ }
+
+ if (__sync_bool_compare_and_swap (pp, NULL, xdata))
+ break;
+ }
+ }
+}
+
+/* Return the symbol name and value for an ADDR. */
+
+static void
+xcoff_syminfo (struct backtrace_state *state ATTRIBUTE_UNUSED, uintptr_t addr,
+ backtrace_syminfo_callback callback,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data)
+{
+ struct xcoff_syminfo_data *edata;
+ struct xcoff_symbol *sym = NULL;
+
+ if (!state->threaded)
+ {
+ for (edata = (struct xcoff_syminfo_data *) state->syminfo_data;
+ edata != NULL;
+ edata = edata->next)
+ {
+ sym = ((struct xcoff_symbol *)
+ bsearch (&addr, edata->symbols, edata->count,
+ sizeof (struct xcoff_symbol), xcoff_symbol_search));
+ if (sym != NULL)
+ break;
+ }
+ }
+ else
+ {
+ struct xcoff_syminfo_data **pp;
+
+ pp = (struct xcoff_syminfo_data **) (void *) &state->syminfo_data;
+ while (1)
+ {
+ edata = backtrace_atomic_load_pointer (pp);
+ if (edata == NULL)
+ break;
+
+ sym = ((struct xcoff_symbol *)
+ bsearch (&addr, edata->symbols, edata->count,
+ sizeof (struct xcoff_symbol), xcoff_symbol_search));
+ if (sym != NULL)
+ break;
+
+ pp = &edata->next;
+ }
+ }
+
+ if (sym == NULL)
+ callback (data, addr, NULL, 0, 0);
+ else
+ callback (data, addr, sym->name, sym->address, sym->size);
+}
+
+/* Return the name of an XCOFF symbol. */
+
+static const char *
+xcoff_symname (const b_xcoff_syment *asym,
+ const unsigned char *strtab, size_t strtab_size)
+{
+#if BACKTRACE_XCOFF_SIZE == 32
+ if (asym->n_zeroes != 0)
+ {
+ /* Make a copy as we will release the symtab view. */
+ char name[SYMNMLEN+1];
+ strncpy (name, asym->n_name, SYMNMLEN);
+ name[SYMNMLEN] = '\0';
+ return strdup (name);
+ }
+#endif
+ if (asym->n_sclass & 0x80)
+ return NULL; /* .debug */
+ if (asym->n_offset_ >= strtab_size)
+ return NULL;
+ return (const char *) strtab + asym->n_offset_;
+}
+
+/* Initialize the symbol table info for xcoff_syminfo. */
+
+static int
+xcoff_initialize_syminfo (struct backtrace_state *state,
+ uintptr_t base_address,
+ const b_xcoff_scnhdr *sects,
+ const b_xcoff_syment *syms, size_t nsyms,
+ const unsigned char *strtab, size_t strtab_size,
+ backtrace_error_callback error_callback, void *data,
+ struct xcoff_syminfo_data *sdata)
+{
+ size_t xcoff_symbol_count;
+ size_t xcoff_symbol_size;
+ struct xcoff_symbol *xcoff_symbols;
+ size_t i;
+ unsigned int j;
+
+ /* We only care about function symbols. Count them. */
+ xcoff_symbol_count = 0;
+ for (i = 0; i < nsyms; ++i)
+ {
+ const b_xcoff_syment *asym = &syms[i];
+ if ((asym->n_sclass == C_EXT || asym->n_sclass == C_HIDEXT
+ || asym->n_sclass == C_WEAKEXT)
+ && ISFCN (asym->n_type) && asym->n_numaux > 0 && asym->n_scnum > 0)
+ ++xcoff_symbol_count;
+
+ i += asym->n_numaux;
+ }
+
+ xcoff_symbol_size = xcoff_symbol_count * sizeof (struct xcoff_symbol);
+ xcoff_symbols = ((struct xcoff_symbol *)
+ backtrace_alloc (state, xcoff_symbol_size, error_callback,
+ data));
+ if (xcoff_symbols == NULL)
+ return 0;
+
+ j = 0;
+ for (i = 0; i < nsyms; ++i)
+ {
+ const b_xcoff_syment *asym = &syms[i];
+ if ((asym->n_sclass == C_EXT || asym->n_sclass == C_HIDEXT
+ || asym->n_sclass == C_WEAKEXT)
+ && ISFCN (asym->n_type) && asym->n_numaux > 0 && asym->n_scnum > 0)
+ {
+ const b_xcoff_auxent *aux = (const b_xcoff_auxent *) (asym + 1);
+ xcoff_symbols[j].name = xcoff_symname (asym, strtab, strtab_size);
+ xcoff_symbols[j].address = base_address + asym->n_value
+ - sects[asym->n_scnum - 1].s_paddr;
+ /* x_fsize will be 0 if there is no debug information. */
+ xcoff_symbols[j].size = aux->x_fcn.x_fsize;
+ ++j;
+ }
+
+ i += asym->n_numaux;
+ }
+
+ backtrace_qsort (xcoff_symbols, xcoff_symbol_count,
+ sizeof (struct xcoff_symbol), xcoff_symbol_compare);
+
+ sdata->next = NULL;
+ sdata->symbols = xcoff_symbols;
+ sdata->count = xcoff_symbol_count;
+
+ return 1;
+}
+
+/* Compare struct xcoff_line for qsort. */
+
+static int
+xcoff_line_compare (const void *v1, const void *v2)
+{
+ const struct xcoff_line *ln1 = (const struct xcoff_line *) v1;
+ const struct xcoff_line *ln2 = (const struct xcoff_line *) v2;
+
+ if (ln1->pc < ln2->pc)
+ return -1;
+ else if (ln1->pc > ln2->pc)
+ return 1;
+ else
+ return 0;
+}
+
+/* Find a PC in a line vector. We always allocate an extra entry at
+ the end of the lines vector, so that this routine can safely look
+ at the next entry. */
+
+static int
+xcoff_line_search (const void *vkey, const void *ventry)
+{
+ const uintptr_t *key = (const uintptr_t *) vkey;
+ const struct xcoff_line *entry = (const struct xcoff_line *) ventry;
+ uintptr_t pc;
+
+ pc = *key;
+ if (pc < entry->pc)
+ return -1;
+ else if ((entry + 1)->pc == (uintptr_t) -1 || pc >= (entry + 1)->pc)
+ return 1;
+ else
+ return 0;
+}
+
+/* Look for a PC in the line vector for one module. On success,
+ call CALLBACK and return whatever it returns. On error, call
+ ERROR_CALLBACK and return 0. Sets *FOUND to 1 if the PC is found,
+ 0 if not. */
+
+static int
+xcoff_lookup_pc (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ struct xcoff_fileline_data *fdata, uintptr_t pc,
+ backtrace_full_callback callback,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data, int *found)
+{
+ const struct xcoff_line *ln;
+ const char *function;
+
+ *found = 1;
+
+ ln = (struct xcoff_line *) bsearch (&pc, fdata->vec.vec.base,
+ fdata->vec.count,
+ sizeof (struct xcoff_line),
+ xcoff_line_search);
+ if (ln == NULL)
+ {
+ *found = 0;
+ return 0;
+ }
+
+ function = ln->function;
+ /* AIX prepends a '.' to function entry points, remove it. */
+ if (*function == '.')
+ ++function;
+ return callback (data, pc, ln->filename, ln->lineno, function);
+}
+
+/* Return the file/line information for a PC using the XCOFF lineno
+ mapping we built earlier. */
+
+static int
+xcoff_fileline (struct backtrace_state *state, uintptr_t pc,
+ backtrace_full_callback callback,
+ backtrace_error_callback error_callback, void *data)
+
+{
+ struct xcoff_fileline_data *fdata;
+ int found;
+ int ret;
+
+ if (!state->threaded)
+ {
+ for (fdata = (struct xcoff_fileline_data *) state->fileline_data;
+ fdata != NULL;
+ fdata = fdata->next)
+ {
+ ret = xcoff_lookup_pc (state, fdata, pc, callback, error_callback,
+ data, &found);
+ if (ret != 0 || found)
+ return ret;
+ }
+ }
+ else
+ {
+ struct xcoff_fileline_data **pp;
+
+ pp = (struct xcoff_fileline_data **) (void *) &state->fileline_data;
+ while (1)
+ {
+ fdata = backtrace_atomic_load_pointer (pp);
+ if (fdata == NULL)
+ break;
+
+ ret = xcoff_lookup_pc (state, fdata, pc, callback, error_callback,
+ data, &found);
+ if (ret != 0 || found)
+ return ret;
+
+ pp = &fdata->next;
+ }
+ }
+
+ /* FIXME: See if any libraries have been dlopen'ed. */
+
+ return callback (data, pc, NULL, 0, NULL);
+}
+
+/* Compare struct xcoff_incl for qsort. */
+
+static int
+xcoff_incl_compare (const void *v1, const void *v2)
+{
+ const struct xcoff_incl *in1 = (const struct xcoff_incl *) v1;
+ const struct xcoff_incl *in2 = (const struct xcoff_incl *) v2;
+
+ if (in1->begin < in2->begin)
+ return -1;
+ else if (in1->begin > in2->begin)
+ return 1;
+ else
+ return 0;
+}
+
+/* Find a lnnoptr in an include file. */
+
+static int
+xcoff_incl_search (const void *vkey, const void *ventry)
+{
+ const uintptr_t *key = (const uintptr_t *) vkey;
+ const struct xcoff_incl *entry = (const struct xcoff_incl *) ventry;
+ uintptr_t lnno;
+
+ lnno = *key;
+ if (lnno < entry->begin)
+ return -1;
+ else if (lnno > entry->end)
+ return 1;
+ else
+ return 0;
+}
+
+/* Add a new mapping to the vector of line mappings that we are
+ building. Returns 1 on success, 0 on failure. */
+
+static int
+xcoff_add_line (struct backtrace_state *state, uintptr_t pc,
+ const char *filename, const char *function, uint32_t lnno,
+ backtrace_error_callback error_callback, void *data,
+ struct xcoff_line_vector *vec)
+{
+ struct xcoff_line *ln;
+
+ ln = ((struct xcoff_line *)
+ backtrace_vector_grow (state, sizeof (struct xcoff_line),
+ error_callback, data, &vec->vec));
+ if (ln == NULL)
+ return 0;
+
+ ln->pc = pc;
+ ln->filename = filename;
+ ln->function = function;
+ ln->lineno = lnno;
+
+ ++vec->count;
+
+ return 1;
+}
+
+/* Add the line number entries for a function to the line vector. */
+
+static int
+xcoff_process_linenos (struct backtrace_state *state, uintptr_t base_address,
+ const b_xcoff_syment *fsym, const char *filename,
+ const b_xcoff_scnhdr *sects,
+ const unsigned char *strtab, size_t strtab_size,
+ uint32_t fcn_lnno, struct xcoff_incl_vector *vec,
+ struct xcoff_line_vector *lvec,
+ const unsigned char *linenos, size_t linenos_size,
+ uintptr_t lnnoptr0,
+ backtrace_error_callback error_callback, void *data)
+{
+ const b_xcoff_auxent *aux;
+ const b_xcoff_lineno *lineno;
+ const unsigned char *lineptr;
+ const char *function;
+ struct xcoff_incl *incl = NULL;
+ uintptr_t lnnoptr;
+ uintptr_t pc;
+ uint32_t lnno;
+ int begincl;
+
+ aux = (const b_xcoff_auxent *) (fsym + 1);
+ lnnoptr = aux->x_fcn.x_lnnoptr;
+
+ if (lnnoptr < lnnoptr0 || lnnoptr + LINESZ > lnnoptr0 + linenos_size)
+ return 0;
+
+ function = xcoff_symname (fsym, strtab, strtab_size);
+ if (function == NULL)
+ return 0;
+
+ /* Skip first entry that points to symtab. */
+
+ lnnoptr += LINESZ;
+
+ lineptr = linenos + (lnnoptr - lnnoptr0);
+
+ begincl = -1;
+ while (lineptr + LINESZ <= linenos + linenos_size)
+ {
+ lineno = (const b_xcoff_lineno *) lineptr;
+
+ lnno = lineno->l_lnno;
+ if (lnno == 0)
+ break;
+
+ /* If part of a function other than the beginning comes from an
+ include file, the line numbers are absolute, rather than
+ relative to the beginning of the function. */
+ incl = (struct xcoff_incl *) bsearch (&lnnoptr, vec->vec.base,
+ vec->count,
+ sizeof (struct xcoff_incl),
+ xcoff_incl_search);
+ if (begincl == -1)
+ begincl = incl != NULL;
+ if (incl != NULL)
+ {
+ filename = incl->filename;
+ if (begincl == 1)
+ lnno += fcn_lnno - 1;
+ }
+ else
+ lnno += fcn_lnno - 1;
+
+ pc = base_address + lineno->l_addr.l_paddr
+ - sects[fsym->n_scnum - 1].s_paddr;
+ xcoff_add_line (state, pc, filename, function, lnno, error_callback,
+ data, lvec);
+
+ lnnoptr += LINESZ;
+ lineptr += LINESZ;
+ }
+
+ return 1;
+}
+
+/* Initialize the line vector info for xcoff_fileline. */
+
+static int
+xcoff_initialize_fileline (struct backtrace_state *state,
+ uintptr_t base_address,
+ const b_xcoff_scnhdr *sects,
+ const b_xcoff_syment *syms, size_t nsyms,
+ const unsigned char *strtab, size_t strtab_size,
+ const unsigned char *linenos, size_t linenos_size,
+ uint64_t lnnoptr0,
+ backtrace_error_callback error_callback, void *data)
+{
+ struct xcoff_fileline_data *fdata;
+ struct xcoff_incl_vector vec;
+ struct xcoff_line *ln;
+ const b_xcoff_syment *fsym;
+ const b_xcoff_auxent *aux;
+ const char *filename;
+ const char *name;
+ struct xcoff_incl *incl;
+ uintptr_t begin, end;
+ uintptr_t lnno;
+ size_t i;
+
+ fdata = ((struct xcoff_fileline_data *)
+ backtrace_alloc (state, sizeof (struct xcoff_fileline_data),
+ error_callback, data));
+ if (fdata == NULL)
+ return 0;
+
+ memset (fdata, 0, sizeof *fdata);
+ memset (&vec, 0, sizeof vec);
+
+ /* Process include files first. */
+
+ begin = 0;
+ for (i = 0; i < nsyms; ++i)
+ {
+ const b_xcoff_syment *asym = &syms[i];
+
+ switch (asym->n_sclass)
+ {
+ case C_BINCL:
+ begin = asym->n_value;
+ break;
+
+ case C_EINCL:
+ if (begin == 0)
+ break;
+ end = asym->n_value;
+ incl = ((struct xcoff_incl *)
+ backtrace_vector_grow (state, sizeof (struct xcoff_incl),
+ error_callback, data, &vec.vec));
+ if (incl != NULL)
+ {
+ incl->filename = xcoff_symname (asym, strtab, strtab_size);
+ incl->begin = begin;
+ incl->end = end;
+ ++vec.count;
+ }
+ begin = 0;
+ break;
+ }
+
+ i += asym->n_numaux;
+ }
+
+ backtrace_qsort (vec.vec.base, vec.count,
+ sizeof (struct xcoff_incl), xcoff_incl_compare);
+
+ filename = NULL;
+ fsym = NULL;
+ for (i = 0; i < nsyms; ++i)
+ {
+ const b_xcoff_syment *asym = &syms[i];
+
+ switch (asym->n_sclass)
+ {
+ case C_FILE:
+ filename = xcoff_symname (asym, strtab, strtab_size);
+ if (filename == NULL)
+ break;
+
+ /* If the file auxiliary entry is not used, the symbol name is
+ the name of the source file. If the file auxiliary entry is
+ used, then the symbol name should be .file, and the first
+ file auxiliary entry (by convention) contains the source
+ file name. */
+
+ if (asym->n_numaux > 0 && !strcmp (filename, ".file"))
+ {
+ aux = (const b_xcoff_auxent *) (asym + 1);
+ if (aux->x_file._x.x_zeroes != 0)
+ {
+ /* Make a copy as we will release the symtab view. */
+ char name[FILNMLEN+1];
+ strncpy (name, aux->x_file.x_fname, FILNMLEN);
+ name[FILNMLEN] = '\0';
+ filename = strdup (name);
+ }
+ else if (aux->x_file._x.x_offset < strtab_size)
+ filename = (const char *) strtab + aux->x_file._x.x_offset;
+ else
+ filename = NULL;
+ }
+ break;
+
+ case C_EXT:
+ case C_HIDEXT:
+ case C_WEAKEXT:
+ fsym = NULL;
+ if (!ISFCN (asym->n_type) || asym->n_numaux == 0)
+ break;
+ if (filename == NULL)
+ break;
+ fsym = asym;
+ break;
+
+ case C_FCN:
+ if (asym->n_numaux == 0)
+ break;
+ if (fsym == NULL)
+ break;
+ name = xcoff_symname (asym, strtab, strtab_size);
+ if (name == NULL)
+ break;
+ aux = (const b_xcoff_auxent *) (asym + 1);
+#if BACKTRACE_XCOFF_SIZE == 32
+ lnno = (uint32_t) aux->x_block.x_lnnohi << 16
+ | aux->x_block.x_lnno;
+#else
+ lnno = aux->x_block.x_lnno;
+#endif
+ if (!strcmp (name, ".bf"))
+ {
+ xcoff_process_linenos (state, base_address, fsym, filename,
+ sects, strtab, strtab_size, lnno, &vec,
+ &fdata->vec, linenos, linenos_size,
+ lnnoptr0, error_callback, data);
+ }
+ else if (!strcmp (name, ".ef"))
+ {
+ fsym = NULL;
+ }
+ break;
+ }
+
+ i += asym->n_numaux;
+ }
+
+ /* Allocate one extra entry at the end. */
+ ln = ((struct xcoff_line *)
+ backtrace_vector_grow (state, sizeof (struct xcoff_line),
+ error_callback, data, &fdata->vec.vec));
+ if (ln == NULL)
+ goto fail;
+ ln->pc = (uintptr_t) -1;
+ ln->filename = NULL;
+ ln->function = NULL;
+ ln->lineno = 0;
+
+ if (!backtrace_vector_release (state, &fdata->vec.vec, error_callback, data))
+ goto fail;
+
+ backtrace_qsort (fdata->vec.vec.base, fdata->vec.count,
+ sizeof (struct xcoff_line), xcoff_line_compare);
+
+ if (!state->threaded)
+ {
+ struct xcoff_fileline_data **pp;
+
+ for (pp = (struct xcoff_fileline_data **) (void *) &state->fileline_data;
+ *pp != NULL;
+ pp = &(*pp)->next)
+ ;
+ *pp = fdata;
+ }
+ else
+ {
+ while (1)
+ {
+ struct xcoff_fileline_data **pp;
+
+ pp = (struct xcoff_fileline_data **) (void *) &state->fileline_data;
+
+ while (1)
+ {
+ struct xcoff_fileline_data *p;
+
+ p = backtrace_atomic_load_pointer (pp);
+
+ if (p == NULL)
+ break;
+
+ pp = &p->next;
+ }
+
+ if (__sync_bool_compare_and_swap (pp, NULL, fdata))
+ break;
+ }
+ }
+
+ return 1;
+
+fail:
+ return 0;
+}
+
+/* Add the backtrace data for one XCOFF file. Returns 1 on success,
+ 0 on failure (in both cases descriptor is closed). */
+
+static int
+xcoff_add (struct backtrace_state *state, int descriptor, off_t offset,
+ uintptr_t base_address, backtrace_error_callback error_callback,
+ void *data, fileline *fileline_fn, int *found_sym, int exe)
+{
+ struct backtrace_view fhdr_view;
+ struct backtrace_view sects_view;
+ struct backtrace_view linenos_view;
+ struct backtrace_view syms_view;
+ struct backtrace_view str_view;
+ struct backtrace_view dwarf_view;
+ b_xcoff_filhdr fhdr;
+ const b_xcoff_scnhdr *sects;
+ const b_xcoff_scnhdr *stext;
+ uint64_t lnnoptr;
+ uint32_t nlnno;
+ off_t str_off;
+ off_t min_offset;
+ off_t max_offset;
+ struct dwsect_info dwsect[DWSECT_MAX];
+ size_t sects_size;
+ size_t syms_size;
+ int32_t str_size;
+ int sects_view_valid;
+ int linenos_view_valid;
+ int syms_view_valid;
+ int str_view_valid;
+ int dwarf_view_valid;
+ int magic_ok;
+ int i;
+
+ *found_sym = 0;
+
+ sects_view_valid = 0;
+ linenos_view_valid = 0;
+ syms_view_valid = 0;
+ str_view_valid = 0;
+ dwarf_view_valid = 0;
+
+ str_size = 0;
+
+ /* Map the XCOFF file header. */
+ if (!backtrace_get_view (state, descriptor, offset, sizeof (b_xcoff_filhdr),
+ error_callback, data, &fhdr_view))
+ goto fail;
+
+ memcpy (&fhdr, fhdr_view.data, sizeof fhdr);
+ magic_ok = (fhdr.f_magic == XCOFF_MAGIC);
+
+ backtrace_release_view (state, &fhdr_view, error_callback, data);
+
+ if (!magic_ok)
+ {
+ if (exe)
+ error_callback (data, "executable file is not XCOFF", 0);
+ goto fail;
+ }
+
+ /* Verify object is of expected type. */
+ if ((exe && (fhdr.f_flags & F_SHROBJ))
+ || (!exe && !(fhdr.f_flags & F_SHROBJ)))
+ goto fail;
+
+ /* Read the section headers. */
+
+ sects_size = fhdr.f_nscns * sizeof (b_xcoff_scnhdr);
+
+ if (!backtrace_get_view (state, descriptor,
+ offset + sizeof (fhdr) + fhdr.f_opthdr,
+ sects_size, error_callback, data, &sects_view))
+ goto fail;
+ sects_view_valid = 1;
+ sects = (const b_xcoff_scnhdr *) sects_view.data;
+
+ /* FIXME: assumes only one .text section. */
+ for (i = 0; i < fhdr.f_nscns; ++i)
+ if ((sects[i].s_flags & 0xffff) == STYP_TEXT)
+ break;
+ if (i == fhdr.f_nscns)
+ goto fail;
+
+ stext = &sects[i];
+
+ /* AIX ldinfo_textorg includes the XCOFF headers. */
+ base_address = (exe ? XCOFF_AIX_TEXTBASE : base_address) + stext->s_scnptr;
+
+ lnnoptr = stext->s_lnnoptr;
+ nlnno = stext->s_nlnno;
+
+#if BACKTRACE_XCOFF_SIZE == 32
+ if (nlnno == _OVERFLOW_MARKER)
+ {
+ int sntext = i + 1;
+ /* Find the matching .ovrflo section. */
+ for (i = 0; i < fhdr.f_nscns; ++i)
+ {
+ if (((sects[i].s_flags & 0xffff) == STYP_OVRFLO)
+ && sects[i].s_nlnno == sntext)
+ {
+ nlnno = sects[i].s_vaddr;
+ break;
+ }
+ }
+ }
+#endif
+
+ /* Read the symbol table and the string table. */
+
+ if (fhdr.f_symptr != 0)
+ {
+ struct xcoff_syminfo_data *sdata;
+
+ /* Symbol table is followed by the string table. The string table
+ starts with its length (on 4 bytes).
+ Map the symbol table and the length of the string table. */
+ syms_size = fhdr.f_nsyms * sizeof (b_xcoff_syment);
+
+ if (!backtrace_get_view (state, descriptor, offset + fhdr.f_symptr,
+ syms_size + 4, error_callback, data,
+ &syms_view))
+ goto fail;
+ syms_view_valid = 1;
+
+ memcpy (&str_size, syms_view.data + syms_size, 4);
+
+ str_off = fhdr.f_symptr + syms_size;
+
+ if (str_size > 4)
+ {
+ /* Map string table (including the length word). */
+
+ if (!backtrace_get_view (state, descriptor, offset + str_off,
+ str_size, error_callback, data, &str_view))
+ goto fail;
+ str_view_valid = 1;
+ }
+
+ sdata = ((struct xcoff_syminfo_data *)
+ backtrace_alloc (state, sizeof *sdata, error_callback, data));
+ if (sdata == NULL)
+ goto fail;
+
+ if (!xcoff_initialize_syminfo (state, base_address, sects,
+ syms_view.data, fhdr.f_nsyms,
+ str_view.data, str_size,
+ error_callback, data, sdata))
+ {
+ backtrace_free (state, sdata, sizeof *sdata, error_callback, data);
+ goto fail;
+ }
+
+ *found_sym = 1;
+
+ xcoff_add_syminfo_data (state, sdata);
+ }
+
+ /* Read all the DWARF sections in a single view, since they are
+ probably adjacent in the file. We never release this view. */
+
+ min_offset = 0;
+ max_offset = 0;
+ memset (dwsect, 0, sizeof dwsect);
+ for (i = 0; i < fhdr.f_nscns; ++i)
+ {
+ off_t end;
+ int idx;
+
+ if ((sects[i].s_flags & 0xffff) != STYP_DWARF
+ || sects[i].s_size == 0)
+ continue;
+ /* Map DWARF section to array index. */
+ switch (sects[i].s_flags & 0xffff0000)
+ {
+ case SSUBTYP_DWINFO:
+ idx = DWSECT_INFO;
+ break;
+ case SSUBTYP_DWLINE:
+ idx = DWSECT_LINE;
+ break;
+ case SSUBTYP_DWABREV:
+ idx = DWSECT_ABBREV;
+ break;
+ case SSUBTYP_DWARNGE:
+ idx = DWSECT_RANGES;
+ break;
+ case SSUBTYP_DWSTR:
+ idx = DWSECT_STR;
+ break;
+ default:
+ continue;
+ }
+ if (min_offset == 0 || (off_t) sects[i].s_scnptr < min_offset)
+ min_offset = sects[i].s_scnptr;
+ end = sects[i].s_scnptr + sects[i].s_size;
+ if (end > max_offset)
+ max_offset = end;
+ dwsect[idx].offset = sects[i].s_scnptr;
+ dwsect[idx].size = sects[i].s_size;
+ }
+ if (min_offset != 0 && max_offset != 0)
+ {
+ if (!backtrace_get_view (state, descriptor, offset + min_offset,
+ max_offset - min_offset,
+ error_callback, data, &dwarf_view))
+ goto fail;
+ dwarf_view_valid = 1;
+
+ for (i = 0; i < (int) DWSECT_MAX; ++i)
+ {
+ if (dwsect[i].offset == 0)
+ dwsect[i].data = NULL;
+ else
+ dwsect[i].data = ((const unsigned char *) dwarf_view.data
+ + (dwsect[i].offset - min_offset));
+ }
+
+ if (!backtrace_dwarf_add (state, 0,
+ dwsect[DWSECT_INFO].data,
+ dwsect[DWSECT_INFO].size,
+#if BACKTRACE_XCOFF_SIZE == 32
+ /* XXX workaround for broken lineoff */
+ dwsect[DWSECT_LINE].data - 4,
+#else
+ /* XXX workaround for broken lineoff */
+ dwsect[DWSECT_LINE].data - 12,
+#endif
+ dwsect[DWSECT_LINE].size,
+ dwsect[DWSECT_ABBREV].data,
+ dwsect[DWSECT_ABBREV].size,
+ dwsect[DWSECT_RANGES].data,
+ dwsect[DWSECT_RANGES].size,
+ dwsect[DWSECT_STR].data,
+ dwsect[DWSECT_STR].size,
+ 1, /* big endian */
+ error_callback, data, fileline_fn))
+ goto fail;
+ }
+
+ /* Read the XCOFF line number entries if DWARF sections not found. */
+
+ if (!dwarf_view_valid && fhdr.f_symptr != 0 && lnnoptr != 0)
+ {
+ size_t linenos_size = (size_t) nlnno * LINESZ;
+
+ if (!backtrace_get_view (state, descriptor, offset + lnnoptr,
+ linenos_size,
+ error_callback, data, &linenos_view))
+ goto fail;
+ linenos_view_valid = 1;
+
+ if (xcoff_initialize_fileline (state, base_address, sects,
+ syms_view.data, fhdr.f_nsyms,
+ str_view.data, str_size,
+ linenos_view.data, linenos_size,
+ lnnoptr, error_callback, data))
+ *fileline_fn = xcoff_fileline;
+
+ backtrace_release_view (state, &linenos_view, error_callback, data);
+ linenos_view_valid = 0;
+ }
+
+ backtrace_release_view (state, &sects_view, error_callback, data);
+ sects_view_valid = 0;
+ if (syms_view_valid)
+ backtrace_release_view (state, &syms_view, error_callback, data);
+ syms_view_valid = 0;
+
+ /* We've read all we need from the executable. */
+ if (!backtrace_close (descriptor, error_callback, data))
+ goto fail;
+ descriptor = -1;
+
+ return 1;
+
+ fail:
+ if (sects_view_valid)
+ backtrace_release_view (state, &sects_view, error_callback, data);
+ if (str_view_valid)
+ backtrace_release_view (state, &str_view, error_callback, data);
+ if (syms_view_valid)
+ backtrace_release_view (state, &syms_view, error_callback, data);
+ if (linenos_view_valid)
+ backtrace_release_view (state, &linenos_view, error_callback, data);
+ if (dwarf_view_valid)
+ backtrace_release_view (state, &dwarf_view, error_callback, data);
+ if (descriptor != -1 && offset == 0)
+ backtrace_close (descriptor, error_callback, data);
+ return 0;
+}
+
+#ifdef HAVE_LOADQUERY
+
+/* Read an integer value in human-readable format from an AIX
+ big archive fixed-length or member header. */
+
+static int
+xcoff_parse_decimal (const char *buf, size_t size, off_t *off)
+{
+ char str[32];
+ char *end;
+
+ if (size >= sizeof str)
+ return 0;
+ memcpy (str, buf, size);
+ str[size] = '\0';
+ *off = strtol (str, &end, 10);
+ if (*end != '\0' && *end != ' ')
+ return 0;
+
+ return 1;
+}
+
+/* Add the backtrace data for a member of an AIX big archive.
+ Returns 1 on success, 0 on failure. */
+
+static int
+xcoff_armem_add (struct backtrace_state *state, int descriptor,
+ uintptr_t base_address, const char *member,
+ backtrace_error_callback error_callback, void *data,
+ fileline *fileline_fn, int *found_sym)
+{
+ struct backtrace_view view;
+ b_ar_fl_hdr fl_hdr;
+ const b_ar_hdr *ar_hdr;
+ off_t off;
+ off_t len;
+ int memlen;
+
+ *found_sym = 0;
+
+ /* Map archive fixed-length header. */
+
+ if (!backtrace_get_view (state, descriptor, 0, sizeof (b_ar_fl_hdr),
+ error_callback, data, &view))
+ goto fail;
+
+ memcpy (&fl_hdr, view.data, sizeof (b_ar_fl_hdr));
+
+ backtrace_release_view (state, &view, error_callback, data);
+
+ if (memcmp (fl_hdr.fl_magic, AIAMAGBIG, 8) != 0)
+ goto fail;
+
+ memlen = strlen (member);
+
+ /* Read offset of first archive member. */
+ if (!xcoff_parse_decimal (fl_hdr.fl_fstmoff, sizeof fl_hdr.fl_fstmoff, &off))
+ goto fail;
+ while (off != 0)
+ {
+ /* Map archive member header and member name. */
+
+ if (!backtrace_get_view (state, descriptor, off,
+ sizeof (b_ar_hdr) + memlen,
+ error_callback, data, &view))
+ break;
+
+ ar_hdr = (const b_ar_hdr *) view.data;
+
+ /* Read archive member name length. */
+ if (!xcoff_parse_decimal (ar_hdr->ar_namlen, sizeof ar_hdr->ar_namlen,
+ &len))
+ {
+ backtrace_release_view (state, &view, error_callback, data);
+ break;
+ }
+ if (len == memlen && !memcmp (ar_hdr->ar_name, member, memlen))
+ {
+ off = (off + sizeof (b_ar_hdr) + memlen + 1) & ~1;
+
+ /* The archive can contain several members with the same name
+ (e.g. 32-bit and 64-bit), so continue if not ok. */
+
+ if (xcoff_add (state, descriptor, off, base_address, error_callback,
+ data, fileline_fn, found_sym, 0))
+ {
+ backtrace_release_view (state, &view, error_callback, data);
+ return 1;
+ }
+ }
+
+ /* Read offset of next archive member. */
+ if (!xcoff_parse_decimal (ar_hdr->ar_nxtmem, sizeof ar_hdr->ar_nxtmem,
+ &off))
+ {
+ backtrace_release_view (state, &view, error_callback, data);
+ break;
+ }
+ backtrace_release_view (state, &view, error_callback, data);
+ }
+
+ fail:
+ /* No matching member found. */
+ backtrace_close (descriptor, error_callback, data);
+ return 0;
+}
+
+/* Add the backtrace data for dynamically loaded libraries. */
+
+static void
+xcoff_add_shared_libs (struct backtrace_state *state,
+ backtrace_error_callback error_callback,
+ void *data, fileline *fileline_fn, int *found_sym)
+{
+ const struct ld_info *ldinfo;
+ void *buf;
+ unsigned int buflen;
+ const char *member;
+ int descriptor;
+ int does_not_exist;
+ int lib_found_sym;
+ int ret;
+
+ /* Retrieve the list of loaded libraries. */
+
+ buf = NULL;
+ buflen = 512;
+ do
+ {
+ buf = realloc (buf, buflen);
+ if (buf == NULL)
+ {
+ ret = -1;
+ break;
+ }
+ ret = loadquery (L_GETINFO, buf, buflen);
+ if (ret == 0)
+ break;
+ buflen *= 2;
+ }
+ while (ret == -1 && errno == ENOMEM);
+ if (ret != 0)
+ {
+ free (buf);
+ return;
+ }
+
+ ldinfo = (const struct ld_info *) buf;
+ while ((const char *) ldinfo < (const char *) buf + buflen)
+ {
+ if (*ldinfo->ldinfo_filename != '/')
+ goto next;
+
+ descriptor = backtrace_open (ldinfo->ldinfo_filename, error_callback,
+ data, &does_not_exist);
+ if (descriptor < 0)
+ goto next;
+
+ /* Check if it is an archive (member name not empty). */
+
+ member = ldinfo->ldinfo_filename + strlen (ldinfo->ldinfo_filename) + 1;
+ if (*member)
+ {
+ xcoff_armem_add (state, descriptor,
+ (uintptr_t) ldinfo->ldinfo_textorg, member,
+ error_callback, data, fileline_fn, &lib_found_sym);
+ }
+ else
+ {
+ xcoff_add (state, descriptor, 0, (uintptr_t) ldinfo->ldinfo_textorg,
+ error_callback, data, fileline_fn, &lib_found_sym, 0);
+ }
+ if (lib_found_sym)
+ *found_sym = 1;
+
+ next:
+ if (ldinfo->ldinfo_next == 0)
+ break;
+ ldinfo = (const struct ld_info *) ((const char *) ldinfo
+ + ldinfo->ldinfo_next);
+ }
+
+ free (buf);
+}
+#endif /* HAVE_LOADQUERY */
+
+/* Initialize the backtrace data we need from an XCOFF executable.
+ Returns 1 on success, 0 on failure. */
+
+int
+backtrace_initialize (struct backtrace_state *state,
+ const char *filename ATTRIBUTE_UNUSED, int descriptor,
+ backtrace_error_callback error_callback,
+ void *data, fileline *fileline_fn)
+{
+ int ret;
+ int found_sym;
+ fileline xcoff_fileline_fn = xcoff_nodebug;
+
+ ret = xcoff_add (state, descriptor, 0, 0, error_callback, data,
+ &xcoff_fileline_fn, &found_sym, 1);
+ if (!ret)
+ return 0;
+
+#ifdef HAVE_LOADQUERY
+ xcoff_add_shared_libs (state, error_callback, data, &xcoff_fileline_fn,
+ &found_sym);
+#endif
+
+ if (!state->threaded)
+ {
+ if (found_sym)
+ state->syminfo_fn = xcoff_syminfo;
+ else if (state->syminfo_fn == NULL)
+ state->syminfo_fn = xcoff_nosyms;
+ }
+ else
+ {
+ if (found_sym)
+ backtrace_atomic_store_pointer (&state->syminfo_fn, xcoff_syminfo);
+ else
+ __sync_bool_compare_and_swap (&state->syminfo_fn, NULL, xcoff_nosyms);
+ }
+
+ if (!state->threaded)
+ {
+ if (state->fileline_fn == NULL || state->fileline_fn == xcoff_nodebug)
+ *fileline_fn = xcoff_fileline_fn;
+ }
+ else
+ {
+ fileline current_fn;
+
+ current_fn = backtrace_atomic_load_pointer (&state->fileline_fn);
+ if (current_fn == NULL || current_fn == xcoff_nodebug)
+ *fileline_fn = xcoff_fileline_fn;
+ }
+
+ return 1;
+}
diff --git a/3rdparty/libbacktrace/ztest.c b/3rdparty/libbacktrace/ztest.c
new file mode 100644
index 000000000..9cd712a1e
--- /dev/null
+++ b/3rdparty/libbacktrace/ztest.c
@@ -0,0 +1,537 @@
+/* ztest.c -- Test for libbacktrace inflate code.
+ Copyright (C) 2017-2018 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef HAVE_ZLIB
+#include <zlib.h>
+#endif
+
+#include "backtrace.h"
+#include "backtrace-supported.h"
+
+#include "internal.h"
+#include "testlib.h"
+
+#ifndef HAVE_CLOCK_GETTIME
+
+typedef int xclockid_t;
+
+static int
+xclock_gettime (xclockid_t id ATTRIBUTE_UNUSED,
+ struct timespec *ts ATTRIBUTE_UNUSED)
+{
+ errno = EINVAL;
+ return -1;
+}
+
+#define clockid_t xclockid_t
+#define clock_gettime xclock_gettime
+#undef CLOCK_REALTIME
+#define CLOCK_REALTIME 0
+
+#endif /* !defined(HAVE_CLOCK_GETTIME) */
+
+#ifdef CLOCK_PROCESS_CPUTIME_ID
+#define ZLIB_CLOCK_GETTIME_ARG CLOCK_PROCESS_CPUTIME_ID
+#else
+#define ZLIB_CLOCK_GETTIME_ARG CLOCK_REALTIME
+#endif
+
+/* Some tests for the local zlib inflation code. */
+
+struct zlib_test
+{
+ const char *name;
+ const char *uncompressed;
+ size_t uncompressed_len;
+ const char *compressed;
+ size_t compressed_len;
+};
+
+/* Error callback. */
+
+static void
+error_callback_compress (void *vdata, const char *msg, int errnum)
+{
+ fprintf (stderr, "%s", msg);
+ if (errnum > 0)
+ fprintf (stderr, ": %s", strerror (errnum));
+ fprintf (stderr, "\n");
+ exit (EXIT_FAILURE);
+}
+
+static const struct zlib_test tests[] =
+{
+ {
+ "empty",
+ "",
+ 0,
+ "\x78\x9c\x03\x00\x00\x00\x00\x01",
+ 8,
+ },
+ {
+ "hello",
+ "hello, world\n",
+ 0,
+ ("\x78\x9c\xca\x48\xcd\xc9\xc9\xd7\x51\x28\xcf"
+ "\x2f\xca\x49\xe1\x02\x04\x00\x00\xff\xff\x21\xe7\x04\x93"),
+ 25,
+ },
+ {
+ "goodbye",
+ "goodbye, world",
+ 0,
+ ("\x78\x9c\x4b\xcf\xcf\x4f\x49\xaa"
+ "\x4c\xd5\x51\x28\xcf\x2f\xca\x49"
+ "\x01\x00\x28\xa5\x05\x5e"),
+ 22,
+ },
+ {
+ "ranges",
+ ("\xcc\x11\x00\x00\x00\x00\x00\x00\xd5\x13\x00\x00\x00\x00\x00\x00"
+ "\x1c\x14\x00\x00\x00\x00\x00\x00\x72\x14\x00\x00\x00\x00\x00\x00"
+ "\x9d\x14\x00\x00\x00\x00\x00\x00\xd5\x14\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xfb\x12\x00\x00\x00\x00\x00\x00\x09\x13\x00\x00\x00\x00\x00\x00"
+ "\x0c\x13\x00\x00\x00\x00\x00\x00\xcb\x13\x00\x00\x00\x00\x00\x00"
+ "\x29\x14\x00\x00\x00\x00\x00\x00\x4e\x14\x00\x00\x00\x00\x00\x00"
+ "\x9d\x14\x00\x00\x00\x00\x00\x00\xd5\x14\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xfb\x12\x00\x00\x00\x00\x00\x00\x09\x13\x00\x00\x00\x00\x00\x00"
+ "\x67\x13\x00\x00\x00\x00\x00\x00\xcb\x13\x00\x00\x00\x00\x00\x00"
+ "\x9d\x14\x00\x00\x00\x00\x00\x00\xd5\x14\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x5f\x0b\x00\x00\x00\x00\x00\x00\x6c\x0b\x00\x00\x00\x00\x00\x00"
+ "\x7d\x0b\x00\x00\x00\x00\x00\x00\x7e\x0c\x00\x00\x00\x00\x00\x00"
+ "\x38\x0f\x00\x00\x00\x00\x00\x00\x5c\x0f\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x83\x0c\x00\x00\x00\x00\x00\x00\xfa\x0c\x00\x00\x00\x00\x00\x00"
+ "\xfd\x0d\x00\x00\x00\x00\x00\x00\xef\x0e\x00\x00\x00\x00\x00\x00"
+ "\x14\x0f\x00\x00\x00\x00\x00\x00\x38\x0f\x00\x00\x00\x00\x00\x00"
+ "\x9f\x0f\x00\x00\x00\x00\x00\x00\xac\x0f\x00\x00\x00\x00\x00\x00"
+ "\xdb\x0f\x00\x00\x00\x00\x00\x00\xff\x0f\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xfd\x0d\x00\x00\x00\x00\x00\x00\xd8\x0e\x00\x00\x00\x00\x00\x00"
+ "\x9f\x0f\x00\x00\x00\x00\x00\x00\xac\x0f\x00\x00\x00\x00\x00\x00"
+ "\xdb\x0f\x00\x00\x00\x00\x00\x00\xff\x0f\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\xfa\x0c\x00\x00\x00\x00\x00\x00\xea\x0d\x00\x00\x00\x00\x00\x00"
+ "\xef\x0e\x00\x00\x00\x00\x00\x00\x14\x0f\x00\x00\x00\x00\x00\x00"
+ "\x5c\x0f\x00\x00\x00\x00\x00\x00\x9f\x0f\x00\x00\x00\x00\x00\x00"
+ "\xac\x0f\x00\x00\x00\x00\x00\x00\xdb\x0f\x00\x00\x00\x00\x00\x00"
+ "\xff\x0f\x00\x00\x00\x00\x00\x00\x2c\x10\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x60\x11\x00\x00\x00\x00\x00\x00\xd1\x16\x00\x00\x00\x00\x00\x00"
+ "\x40\x0b\x00\x00\x00\x00\x00\x00\x2c\x10\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x7a\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00"
+ "\x9f\x01\x00\x00\x00\x00\x00\x00\xa7\x01\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+ "\x7a\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00"
+ "\x9f\x01\x00\x00\x00\x00\x00\x00\xa7\x01\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"),
+ 672,
+ ("\x78\x9c\x3b\x23\xc8\x00\x06\x57\x85\x21\xb4\x8c\x08\x84\x2e\x82"
+ "\xd2\x73\xa1\xf4\x55\x28\x8d\x0e\x7e\x0b\x41\x68\x4e\xa8\x7e\x1e"
+ "\x28\x7d\x1a\x4a\x6b\x42\xf5\xf9\x91\x69\x5e\x3a\x9a\x79\x84\xf4"
+ "\xc7\x73\x43\xe8\x1c\x28\x5d\x0b\xa5\xeb\x78\x20\xb4\x05\x3f\x84"
+ "\x8e\xe1\xc7\xae\xbf\x19\xaa\xee\x17\x94\xfe\xcb\x0b\xa1\xdf\xf3"
+ "\x41\x68\x11\x7e\x54\x73\xe6\x43\xe9\x35\x50\xfa\x36\x94\xfe\x8f"
+ "\xc3\x7c\x98\x79\x37\xf8\xc8\xd3\x0f\x73\xd7\x2b\x1c\xee\x8a\x21"
+ "\xd2\x5d\x3a\x02\xd8\xcd\x4f\x80\xa6\x87\x8b\x62\x10\xda\x81\x1b"
+ "\xbf\xfa\x2a\x28\xbd\x0d\x4a\xcf\x67\x84\xd0\xcb\x19\xf1\xab\x5f"
+ "\x49\xa4\x7a\x00\x48\x97\x29\xd4"),
+ 152,
+ }
+};
+
+/* Test the hand coded samples. */
+
+static void
+test_samples (struct backtrace_state *state)
+{
+ size_t i;
+
+ for (i = 0; i < sizeof tests / sizeof tests[0]; ++i)
+ {
+ char *p;
+ size_t v;
+ size_t j;
+ unsigned char *uncompressed;
+ size_t uncompressed_len;
+
+ p = malloc (12 + tests[i].compressed_len);
+ memcpy (p, "ZLIB", 4);
+ v = tests[i].uncompressed_len;
+ if (v == 0)
+ v = strlen (tests[i].uncompressed);
+ for (j = 0; j < 8; ++j)
+ p[j + 4] = (v >> ((7 - j) * 8)) & 0xff;
+ memcpy (p + 12, tests[i].compressed, tests[i].compressed_len);
+ uncompressed = NULL;
+ uncompressed_len = 0;
+ if (!backtrace_uncompress_zdebug (state, (unsigned char *) p,
+ tests[i].compressed_len + 12,
+ error_callback_compress, NULL,
+ &uncompressed, &uncompressed_len))
+ {
+ fprintf (stderr, "test %s: uncompress failed\n", tests[i].name);
+ ++failures;
+ }
+ else
+ {
+ if (uncompressed_len != v)
+ {
+ fprintf (stderr,
+ "test %s: got uncompressed length %zu, want %zu\n",
+ tests[i].name, uncompressed_len, v);
+ ++failures;
+ }
+ else if (memcmp (tests[i].uncompressed, uncompressed, v) != 0)
+ {
+ size_t j;
+
+ fprintf (stderr, "test %s: uncompressed data mismatch\n",
+ tests[i].name);
+ for (j = 0; j < v; ++j)
+ if (tests[i].uncompressed[j] != uncompressed[j])
+ fprintf (stderr, " %zu: got %#x want %#x\n", j,
+ uncompressed[j], tests[i].uncompressed[j]);
+ ++failures;
+ }
+ else
+ printf ("PASS: inflate %s\n", tests[i].name);
+
+ backtrace_free (state, uncompressed, uncompressed_len,
+ error_callback_compress, NULL);
+ }
+ }
+}
+
+#ifdef HAVE_ZLIB
+
+/* Given a set of TRIALS timings, discard the lowest and highest
+ values and return the mean average of the rest. */
+
+static size_t
+average_time (const size_t *times, size_t trials)
+{
+ size_t imax;
+ size_t max;
+ size_t imin;
+ size_t min;
+ size_t i;
+ size_t sum;
+
+ imin = 0;
+ imax = 0;
+ min = times[0];
+ max = times[0];
+ for (i = 1; i < trials; ++i)
+ {
+ if (times[i] < min)
+ {
+ imin = i;
+ min = times[i];
+ }
+ if (times[i] > max)
+ {
+ imax = i;
+ max = times[i];
+ }
+ }
+
+ sum = 0;
+ for (i = 0; i < trials; ++i)
+ {
+ if (i != imax && i != imin)
+ sum += times[i];
+ }
+ return sum / (trials - 2);
+}
+
+#endif
+
+/* Test a larger text, if available. */
+
+static void
+test_large (struct backtrace_state *state)
+{
+#ifdef HAVE_ZLIB
+ unsigned char *orig_buf;
+ size_t orig_bufsize;
+ size_t i;
+ char *compressed_buf;
+ size_t compressed_bufsize;
+ unsigned long compress_sizearg;
+ unsigned char *uncompressed_buf;
+ size_t uncompressed_bufsize;
+ int r;
+ clockid_t cid;
+ struct timespec ts1;
+ struct timespec ts2;
+ size_t ctime;
+ size_t ztime;
+ const size_t trials = 16;
+ size_t ctimes[16];
+ size_t ztimes[16];
+ static const char * const names[] = {
+ "Mark.Twain-Tom.Sawyer.txt",
+ "../libgo/go/compress/testdata/Mark.Twain-Tom.Sawyer.txt"
+ };
+
+ orig_buf = NULL;
+ orig_bufsize = 0;
+ uncompressed_buf = NULL;
+ compressed_buf = NULL;
+
+ for (i = 0; i < sizeof names / sizeof names[0]; ++i)
+ {
+ size_t len;
+ char *namebuf;
+ FILE *e;
+ struct stat st;
+ char *rbuf;
+ size_t got;
+
+ len = strlen (SRCDIR) + strlen (names[i]) + 2;
+ namebuf = malloc (len);
+ if (namebuf == NULL)
+ {
+ perror ("malloc");
+ goto fail;
+ }
+ snprintf (namebuf, len, "%s/%s", SRCDIR, names[i]);
+ e = fopen (namebuf, "r");
+ free (namebuf);
+ if (e == NULL)
+ continue;
+ if (fstat (fileno (e), &st) < 0)
+ {
+ perror ("fstat");
+ fclose (e);
+ continue;
+ }
+ rbuf = malloc (st.st_size);
+ if (rbuf == NULL)
+ {
+ perror ("malloc");
+ goto fail;
+ }
+ got = fread (rbuf, 1, st.st_size, e);
+ fclose (e);
+ if (got > 0)
+ {
+ orig_buf = rbuf;
+ orig_bufsize = got;
+ break;
+ }
+ free (rbuf);
+ }
+
+ if (orig_buf == NULL)
+ {
+ /* We couldn't find an input file. */
+ printf ("UNSUPPORTED: inflate large\n");
+ return;
+ }
+
+ compressed_bufsize = compressBound (orig_bufsize) + 12;
+ compressed_buf = malloc (compressed_bufsize);
+ if (compressed_buf == NULL)
+ {
+ perror ("malloc");
+ goto fail;
+ }
+
+ compress_sizearg = compressed_bufsize - 12;
+ r = compress (compressed_buf + 12, &compress_sizearg,
+ orig_buf, orig_bufsize);
+ if (r != Z_OK)
+ {
+ fprintf (stderr, "zlib compress failed: %d\n", r);
+ goto fail;
+ }
+
+ compressed_bufsize = compress_sizearg + 12;
+
+ /* Prepare the header that our library expects. */
+ memcpy (compressed_buf, "ZLIB", 4);
+ for (i = 0; i < 8; ++i)
+ compressed_buf[i + 4] = (orig_bufsize >> ((7 - i) * 8)) & 0xff;
+
+ uncompressed_buf = malloc (orig_bufsize);
+ if (uncompressed_buf == NULL)
+ {
+ perror ("malloc");
+ goto fail;
+ }
+ uncompressed_bufsize = orig_bufsize;
+
+ if (!backtrace_uncompress_zdebug (state, compressed_buf, compressed_bufsize,
+ error_callback_compress, NULL,
+ &uncompressed_buf, &uncompressed_bufsize))
+ {
+ fprintf (stderr, "inflate large: backtrace_uncompress_zdebug failed\n");
+ goto fail;
+ }
+
+ if (uncompressed_bufsize != orig_bufsize)
+ {
+ fprintf (stderr,
+ "inflate large: got uncompressed length %zu, want %zu\n",
+ uncompressed_bufsize, orig_bufsize);
+ goto fail;
+ }
+
+ if (memcmp (uncompressed_buf, orig_buf, uncompressed_bufsize) != 0)
+ {
+ fprintf (stderr, "inflate large: uncompressed data mismatch\n");
+ goto fail;
+ }
+
+ printf ("PASS: inflate large\n");
+
+ for (i = 0; i < trials; ++i)
+ {
+ unsigned long uncompress_sizearg;
+
+ cid = ZLIB_CLOCK_GETTIME_ARG;
+ if (clock_gettime (cid, &ts1) < 0)
+ {
+ if (errno == EINVAL)
+ return;
+ perror ("clock_gettime");
+ return;
+ }
+
+ if (!backtrace_uncompress_zdebug (state, compressed_buf,
+ compressed_bufsize,
+ error_callback_compress, NULL,
+ &uncompressed_buf,
+ &uncompressed_bufsize))
+ {
+ fprintf (stderr,
+ ("inflate large: "
+ "benchmark backtrace_uncompress_zdebug failed\n"));
+ return;
+ }
+
+ if (clock_gettime (cid, &ts2) < 0)
+ {
+ perror ("clock_gettime");
+ return;
+ }
+
+ ctime = (ts2.tv_sec - ts1.tv_sec) * 1000000000;
+ ctime += ts2.tv_nsec - ts1.tv_nsec;
+ ctimes[i] = ctime;
+
+ if (clock_gettime (cid, &ts1) < 0)
+ {
+ perror("clock_gettime");
+ return;
+ }
+
+ uncompress_sizearg = uncompressed_bufsize;
+ r = uncompress (uncompressed_buf, &uncompress_sizearg,
+ compressed_buf + 12, compressed_bufsize - 12);
+
+ if (clock_gettime (cid, &ts2) < 0)
+ {
+ perror ("clock_gettime");
+ return;
+ }
+
+ if (r != Z_OK)
+ {
+ fprintf (stderr,
+ "inflate large: benchmark zlib uncompress failed: %d\n",
+ r);
+ return;
+ }
+
+ ztime = (ts2.tv_sec - ts1.tv_sec) * 1000000000;
+ ztime += ts2.tv_nsec - ts1.tv_nsec;
+ ztimes[i] = ztime;
+ }
+
+ /* Toss the highest and lowest times and average the rest. */
+ ctime = average_time (ctimes, trials);
+ ztime = average_time (ztimes, trials);
+
+ printf ("backtrace: %zu ns\n", ctime);
+ printf ("zlib : %zu ns\n", ztime);
+ printf ("ratio : %g\n", (double) ztime / (double) ctime);
+
+ return;
+
+ fail:
+ printf ("FAIL: inflate large\n");
+ ++failures;
+
+ if (orig_buf != NULL)
+ free (orig_buf);
+ if (compressed_buf != NULL)
+ free (compressed_buf);
+ if (uncompressed_buf != NULL)
+ free (uncompressed_buf);
+
+#else /* !HAVE_ZLIB */
+
+ printf ("UNSUPPORTED: inflate large\n");
+
+#endif /* !HAVE_ZLIB */
+}
+
+int
+main (int argc ATTRIBUTE_UNUSED, char **argv)
+{
+ struct backtrace_state *state;
+
+ state = backtrace_create_state (argv[0], BACKTRACE_SUPPORTS_THREADS,
+ error_callback_create, NULL);
+
+ test_samples (state);
+ test_large (state);
+
+ exit (failures != 0 ? EXIT_FAILURE : EXIT_SUCCESS);
+}
diff --git a/3rdparty/libconfig/extra/.gitignore b/3rdparty/libconfig/extra/.gitignore
index 03f1609a0..abc0e5b2d 100644
--- a/3rdparty/libconfig/extra/.gitignore
+++ b/3rdparty/libconfig/extra/.gitignore
@@ -2,4 +2,6 @@
/config.status
/gen/*.c
/gen/*.h
+/gen/*.orig
+/gen/*.rej
/autom4te.cache
diff --git a/3rdparty/libconfig/extra/gen/Makefile b/3rdparty/libconfig/extra/gen/Makefile
index 0b2e0655e..2e952e221 100644
--- a/3rdparty/libconfig/extra/gen/Makefile
+++ b/3rdparty/libconfig/extra/gen/Makefile
@@ -19,9 +19,9 @@ LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
YLWRAP = ../aux-build/ylwrap
YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
LEX = flex
-LEXLIB = -ll
+LEXLIB = -lfl
LEX_OUTPUT_ROOT = lex.yy
-SHELL = /bin/sh
+SHELL = /bin/bash
YACC = bison -y
YFLAGS =
diff --git a/3rdparty/libconfig/extra/gen/clangwarnings.patch b/3rdparty/libconfig/extra/gen/clangwarnings.patch
index 0270dfc44..ecae69c0e 100644
--- a/3rdparty/libconfig/extra/gen/clangwarnings.patch
+++ b/3rdparty/libconfig/extra/gen/clangwarnings.patch
@@ -10,7 +10,7 @@ index 3595578..26444f8 100644
- yymsg = "Deleting";
- YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+ YY_SYMBOL_PRINT (yymsg != NULL ? yymsg : "Deleting", yytype, yyvaluep, yylocationp);
-
+
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
YYUSE (yytype);
diff --git a/scanner.c b/scanner.c
@@ -22,15 +22,15 @@ index 60882db..8b8af33 100644
#include <errno.h>
#include <stdlib.h>
+#include <assert.h>
-
+
/* end standard C headers. */
-
+
@@ -1702,6 +1703,8 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
- libconfig_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+ yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner);
}
-
+
+ assert(YY_CURRENT_BUFFER != NULL); // Fixes compiler warning -Wnull-dereference on gcc-6 and -O3
+
- libconfig_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
- libconfig_yy_load_buffer_state(yyscanner );
+ yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner);
+ yy_load_buffer_state( yyscanner );
}
diff --git a/3rdparty/libconfig/extra/gen/grammar.y b/3rdparty/libconfig/extra/gen/grammar.y
index 5d9f02c2d..b02612435 100644
--- a/3rdparty/libconfig/extra/gen/grammar.y
+++ b/3rdparty/libconfig/extra/gen/grammar.y
@@ -90,8 +90,8 @@ void libconfig_yyerror(void *scanner, struct parse_context *ctx,
char *sval;
}
-%token <ival> TOK_BOOLEAN TOK_INTEGER TOK_HEX
-%token <llval> TOK_INTEGER64 TOK_HEX64
+%token <ival> TOK_BOOLEAN TOK_INTEGER TOK_HEX TOK_BIN TOK_OCT
+%token <llval> TOK_INTEGER64 TOK_HEX64 TOK_BIN64 TOK_OCT64
%token <fval> TOK_FLOAT
%token <sval> TOK_STRING TOK_NAME
%token TOK_EQUALS TOK_NEWLINE TOK_ARRAY_START TOK_ARRAY_END TOK_LIST_START TOK_LIST_END TOK_COMMA TOK_GROUP_START TOK_GROUP_END TOK_SEMICOLON TOK_GARBAGE TOK_ERROR
@@ -310,6 +310,74 @@ simple_value:
config_setting_set_format(ctx->setting, CONFIG_FORMAT_HEX);
}
}
+ | TOK_BIN
+ {
+ if (IN_ARRAY() || IN_LIST()) {
+ struct config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, $1);
+
+ if (e == NULL) {
+ libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
+ YYABORT;
+ } else {
+ config_setting_set_format(e, CONFIG_FORMAT_BIN);
+ CAPTURE_PARSE_POS(e);
+ }
+ } else {
+ config_setting_set_int(ctx->setting, $1);
+ config_setting_set_format(ctx->setting, CONFIG_FORMAT_BIN);
+ }
+ }
+ | TOK_BIN64
+ {
+ if (IN_ARRAY() || IN_LIST()) {
+ struct config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, $1);
+
+ if (e == NULL) {
+ libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
+ YYABORT;
+ } else {
+ config_setting_set_format(e, CONFIG_FORMAT_BIN);
+ CAPTURE_PARSE_POS(e);
+ }
+ } else {
+ config_setting_set_int64(ctx->setting, $1);
+ config_setting_set_format(ctx->setting, CONFIG_FORMAT_BIN);
+ }
+ }
+ | TOK_OCT
+ {
+ if (IN_ARRAY() || IN_LIST()) {
+ struct config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, $1);
+
+ if (e == NULL) {
+ libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
+ YYABORT;
+ } else {
+ config_setting_set_format(e, CONFIG_FORMAT_OCT);
+ CAPTURE_PARSE_POS(e);
+ }
+ } else {
+ config_setting_set_int(ctx->setting, $1);
+ config_setting_set_format(ctx->setting, CONFIG_FORMAT_OCT);
+ }
+ }
+ | TOK_OCT64
+ {
+ if (IN_ARRAY() || IN_LIST()) {
+ struct config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, $1);
+
+ if (e == NULL) {
+ libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
+ YYABORT;
+ } else {
+ config_setting_set_format(e, CONFIG_FORMAT_OCT);
+ CAPTURE_PARSE_POS(e);
+ }
+ } else {
+ config_setting_set_int64(ctx->setting, $1);
+ config_setting_set_format(ctx->setting, CONFIG_FORMAT_OCT);
+ }
+ }
| TOK_FLOAT
{
if(IN_ARRAY() || IN_LIST())
diff --git a/3rdparty/libconfig/extra/gen/scanner.l b/3rdparty/libconfig/extra/gen/scanner.l
index f57e1c275..4a7e5a06d 100644
--- a/3rdparty/libconfig/extra/gen/scanner.l
+++ b/3rdparty/libconfig/extra/gen/scanner.l
@@ -50,38 +50,103 @@
#define YY_NO_INPUT // Suppress generation of useless input() function
-static unsigned long long fromhex(const char *s)
+/**
+ * converts a hexadecimal number literal to an ull integer
+ *
+ * @param p - a pointer to the hexacimal expression to parse
+ * @returns the resulting unsigned long long integer
+ */
+static unsigned long long fromhex(const char *p)
{
-#ifdef __MINGW32__
+ unsigned long long val = 0;
+
+ if (*p != '0' || (p[1] != 'x' && p[1] != 'X')) {
+ return 0;
+ }
- /* MinGW's strtoull() seems to be broken; it only returns the lower
- * 32 bits...
- */
+ for (p += 2; isxdigit(*p) || *p == '_'; ++p) {
+ if (*p != '_') {
+ val <<= 4;
+ val |= ((*p < 'A') ? (*p & 0xF) : (9 + (*p & 0x7)));
+ }
+ }
- const char *p = s;
+ return val;
+}
+
+/**
+ * converts a binary number literal to an ull integer
+ *
+ * @param p - a pointer to the hexacimal expression to parse
+ * @returns the resulting unsigned long long integer
+ */
+static unsigned long long frombin (const char *p)
+{
unsigned long long val = 0;
- if(*p != '0')
- return(0);
+ if (*p != '0' || (p[1] != 'b' && p[1] != 'B')) {
+ return 0;
+ }
+
+ for (p += 2; *p == '0' || *p == '1' || *p == '_'; ++p) {
+ if (*p != '_') {
+ val <<= 1;
+ val |= (*p == '0') ? 0 : 1;
+ }
+ }
- ++p;
+ return val;
+}
+
+/**
+ * converts an octal number literal to an ull integer
+ *
+ * @param p - a pointer to the hexacimal expression to parse
+ * @returns the resulting unsigned long long integer
+ */
+static unsigned long long fromoct (const char *p)
+{
+ unsigned long long val = 0;
- if(*p != 'x' && *p != 'X')
- return(0);
+ if (*p != '0' || (p[1] != 'o' && p[1] != 'O')) {
+ return 0;
+ }
- for(++p; isxdigit(*p); ++p)
- {
- val <<= 4;
- val |= ((*p < 'A') ? (*p & 0xF) : (9 + (*p & 0x7)));
+ for (p += 2; (*p >= '0' && *p <= '7') || *p == '_'; ++p) {
+ if (*p != '_') {
+ val <<= 3;
+ val |= (*p & 0xF);
+ }
}
- return(val);
+ return val;
+}
-#else /* ! __MINGW32__ */
+/**
+ * converts a decimal number literal to a ll integer
+ *
+ * @param p - a pointer to the hexacimal expression to parse
+ * @returns the resulting signed long long integer
+ */
+static long long fromdec (const char *p)
+{
+ unsigned char is_neg = 0;
- return(strtoull(s, NULL, 16));
+ if (*p == '-') {
+ is_neg = 1;
+ p++;
+ }
+
+ long long val = 0;
+
+ for (; isdigit(*p) || *p == '_'; ++p) {
+ if (*p != '_') {
+ val *= 10;
+ val += (*p & 0xF);
+ }
+ }
-#endif /* __MINGW32__ */
+ return (is_neg == 1) ? -val : val;
}
%}
@@ -89,10 +154,14 @@ static unsigned long long fromhex(const char *s)
true [Tt][Rr][Uu][Ee]
false [Ff][Aa][Ll][Ss][Ee]
name [A-Za-z0-9\*][-A-Za-z0-9_\*.]*
-integer [-+]?[0-9]+
-integer64 [-+]?[0-9]+L(L)?
-hex 0[Xx][0-9A-Fa-f]+
-hex64 0[Xx][0-9A-Fa-f]+L(L)?
+integer [-+]?[0-9_]+
+integer64 [-+]?[0-9_]+L(L)?
+hex 0[Xx][0-9A-Fa-f_]+
+hex64 0[Xx][0-9A-Fa-f_]+L(L)?
+bin 0[Bb][01_]+
+bin64 0[Bb][01_]+L(L)?
+oct 0[Oo][0-7_]+
+oct64 0[Oo][0-7_]+L(L)?
hexchar \\[Xx][0-9A-Fa-f]{2}
float ([-+]?([0-9]*)?\.[0-9]*([eE][-+]?[0-9]+)?)|([-+]?([0-9]+)(\.[0-9]*)?[eE][-+]?[0-9]+)
comment (#|\/\/).*$
@@ -173,29 +242,14 @@ include_open ^[ \t]*@include[ \t]+\"
{true} { yylval->ival = 1; return(TOK_BOOLEAN); }
{false} { yylval->ival = 0; return(TOK_BOOLEAN); }
{float} { yylval->fval = atof(yytext); return(TOK_FLOAT); }
-{integer} {
- long long llval;
- llval = atoll(yytext);
- if((llval < INT_MIN) || (llval > INT_MAX))
- {
- yylval->llval = llval;
- return(TOK_INTEGER64);
- }
- else
- {
- yylval->ival = (int)llval;
- return(TOK_INTEGER);
- }
- }
-{integer64} { yylval->llval = atoll(yytext); return(TOK_INTEGER64); }
-{hex} {
- unsigned long ulval = strtoul(yytext, NULL, 16);
- if (ulval > INT32_MAX)
- ulval &= INT32_MAX;
- yylval->ival = (int)ulval;
- return(TOK_HEX);
- }
-{hex64} { yylval->llval = fromhex(yytext); return(TOK_HEX64); }
+{integer} { yylval->ival = (int)fromdec(yytext); return TOK_INTEGER; }
+{integer64} { yylval->llval = fromdec(yytext); return TOK_INTEGER64; }
+{hex} { yylval->ival = (int)fromhex(yytext); return TOK_HEX; }
+{hex64} { yylval->llval = fromhex(yytext); return TOK_HEX64; }
+{bin} { yylval->ival = (int)frombin(yytext); return TOK_BIN; }
+{bin64} { yylval->llval = frombin(yytext); return TOK_BIN64; }
+{oct} { yylval->ival = (int)fromoct(yytext); return TOK_OCT; }
+{oct64} { yylval->llval = fromoct(yytext); return TOK_OCT64; }
{name} { yylval->sval = yytext; return(TOK_NAME); }
\[ { return(TOK_ARRAY_START); }
\] { return(TOK_ARRAY_END); }
diff --git a/3rdparty/libconfig/grammar.c b/3rdparty/libconfig/grammar.c
index a1b099678..0c3206d23 100644
--- a/3rdparty/libconfig/grammar.c
+++ b/3rdparty/libconfig/grammar.c
@@ -158,46 +158,54 @@ extern int libconfig_yydebug;
TOK_BOOLEAN = 258,
TOK_INTEGER = 259,
TOK_HEX = 260,
- TOK_INTEGER64 = 261,
- TOK_HEX64 = 262,
- TOK_FLOAT = 263,
- TOK_STRING = 264,
- TOK_NAME = 265,
- TOK_EQUALS = 266,
- TOK_NEWLINE = 267,
- TOK_ARRAY_START = 268,
- TOK_ARRAY_END = 269,
- TOK_LIST_START = 270,
- TOK_LIST_END = 271,
- TOK_COMMA = 272,
- TOK_GROUP_START = 273,
- TOK_GROUP_END = 274,
- TOK_SEMICOLON = 275,
- TOK_GARBAGE = 276,
- TOK_ERROR = 277
+ TOK_BIN = 261,
+ TOK_OCT = 262,
+ TOK_INTEGER64 = 263,
+ TOK_HEX64 = 264,
+ TOK_BIN64 = 265,
+ TOK_OCT64 = 266,
+ TOK_FLOAT = 267,
+ TOK_STRING = 268,
+ TOK_NAME = 269,
+ TOK_EQUALS = 270,
+ TOK_NEWLINE = 271,
+ TOK_ARRAY_START = 272,
+ TOK_ARRAY_END = 273,
+ TOK_LIST_START = 274,
+ TOK_LIST_END = 275,
+ TOK_COMMA = 276,
+ TOK_GROUP_START = 277,
+ TOK_GROUP_END = 278,
+ TOK_SEMICOLON = 279,
+ TOK_GARBAGE = 280,
+ TOK_ERROR = 281
};
#endif
/* Tokens. */
#define TOK_BOOLEAN 258
#define TOK_INTEGER 259
#define TOK_HEX 260
-#define TOK_INTEGER64 261
-#define TOK_HEX64 262
-#define TOK_FLOAT 263
-#define TOK_STRING 264
-#define TOK_NAME 265
-#define TOK_EQUALS 266
-#define TOK_NEWLINE 267
-#define TOK_ARRAY_START 268
-#define TOK_ARRAY_END 269
-#define TOK_LIST_START 270
-#define TOK_LIST_END 271
-#define TOK_COMMA 272
-#define TOK_GROUP_START 273
-#define TOK_GROUP_END 274
-#define TOK_SEMICOLON 275
-#define TOK_GARBAGE 276
-#define TOK_ERROR 277
+#define TOK_BIN 261
+#define TOK_OCT 262
+#define TOK_INTEGER64 263
+#define TOK_HEX64 264
+#define TOK_BIN64 265
+#define TOK_OCT64 266
+#define TOK_FLOAT 267
+#define TOK_STRING 268
+#define TOK_NAME 269
+#define TOK_EQUALS 270
+#define TOK_NEWLINE 271
+#define TOK_ARRAY_START 272
+#define TOK_ARRAY_END 273
+#define TOK_LIST_START 274
+#define TOK_LIST_END 275
+#define TOK_COMMA 276
+#define TOK_GROUP_START 277
+#define TOK_GROUP_END 278
+#define TOK_SEMICOLON 279
+#define TOK_GARBAGE 280
+#define TOK_ERROR 281
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -211,7 +219,7 @@ union YYSTYPE
double fval;
char *sval;
-#line 215 "grammar.c" /* yacc.c:355 */
+#line 223 "grammar.c" /* yacc.c:355 */
};
typedef union YYSTYPE YYSTYPE;
@@ -227,7 +235,7 @@ int libconfig_yyparse (void *scanner, struct parse_context *ctx, struct scan_con
/* Copy the second part of user declarations. */
-#line 231 "grammar.c" /* yacc.c:358 */
+#line 239 "grammar.c" /* yacc.c:358 */
#ifdef short
# undef short
@@ -469,21 +477,21 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 6
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 37
+#define YYLAST 52
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 23
+#define YYNTOKENS 27
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 23
/* YYNRULES -- Number of rules. */
-#define YYNRULES 43
+#define YYNRULES 47
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 51
+#define YYNSTATES 55
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 277
+#define YYMAXUTOK 281
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -519,7 +527,8 @@ static const yytype_uint8 yytranslate[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26
};
#if YYDEBUG
@@ -529,8 +538,8 @@ static const yytype_uint16 yyrline[] =
0, 101, 101, 103, 107, 108, 111, 113, 116, 118,
119, 122, 124, 129, 128, 148, 147, 171, 170, 193,
194, 195, 196, 200, 201, 205, 225, 247, 269, 291,
- 313, 331, 359, 360, 364, 367, 369, 373, 374, 378,
- 381, 383, 388, 387
+ 313, 330, 347, 364, 381, 399, 427, 428, 432, 435,
+ 437, 441, 442, 446, 449, 451, 456, 455
};
#endif
@@ -540,15 +549,16 @@ static const yytype_uint16 yyrline[] =
static const char *const yytname[] =
{
"$end", "error", "$undefined", "TOK_BOOLEAN", "TOK_INTEGER", "TOK_HEX",
- "TOK_INTEGER64", "TOK_HEX64", "TOK_FLOAT", "TOK_STRING", "TOK_NAME",
- "TOK_EQUALS", "TOK_NEWLINE", "TOK_ARRAY_START", "TOK_ARRAY_END",
- "TOK_LIST_START", "TOK_LIST_END", "TOK_COMMA", "TOK_GROUP_START",
- "TOK_GROUP_END", "TOK_SEMICOLON", "TOK_GARBAGE", "TOK_ERROR", "$accept",
- "configuration", "setting_list", "setting_list_optional",
- "setting_terminator", "comma_optional", "setting", "$@1", "array", "$@2",
- "list", "$@3", "value", "string", "simple_value", "value_list_sub",
- "value_list", "value_list_optional", "simple_value_list_sub",
- "simple_value_list", "simple_value_list_optional", "group", "$@4", YY_NULLPTR
+ "TOK_BIN", "TOK_OCT", "TOK_INTEGER64", "TOK_HEX64", "TOK_BIN64",
+ "TOK_OCT64", "TOK_FLOAT", "TOK_STRING", "TOK_NAME", "TOK_EQUALS",
+ "TOK_NEWLINE", "TOK_ARRAY_START", "TOK_ARRAY_END", "TOK_LIST_START",
+ "TOK_LIST_END", "TOK_COMMA", "TOK_GROUP_START", "TOK_GROUP_END",
+ "TOK_SEMICOLON", "TOK_GARBAGE", "TOK_ERROR", "$accept", "configuration",
+ "setting_list", "setting_list_optional", "setting_terminator",
+ "comma_optional", "setting", "$@1", "array", "$@2", "list", "$@3",
+ "value", "string", "simple_value", "value_list_sub", "value_list",
+ "value_list_optional", "simple_value_list_sub", "simple_value_list",
+ "simple_value_list_optional", "group", "$@4", YY_NULLPTR
};
#endif
@@ -559,14 +569,14 @@ static const yytype_uint16 yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277
+ 275, 276, 277, 278, 279, 280, 281
};
# endif
-#define YYPACT_NINF -26
+#define YYPACT_NINF -19
#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-26)))
+ (!!((Yystate) == (-19)))
#define YYTABLE_NINF -1
@@ -577,12 +587,12 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int8 yypact[] =
{
- 2, -26, 10, 2, -26, 5, -26, -26, 0, -26,
- -26, -26, -26, -26, -26, -26, -26, -26, -26, -26,
- -26, -6, 8, -26, -26, 18, 0, 2, -26, -26,
- -26, -26, -26, 11, -26, 15, -26, 13, -26, 16,
- 2, 12, 18, -26, -26, 0, -26, -26, -26, -26,
- -26
+ 0, -19, 18, 0, -19, 6, -19, -19, -2, -19,
+ -19, -19, -19, -19, -19, -19, -19, -19, -19, -19,
+ -19, -19, -19, -19, -19, -5, 9, -19, -19, 39,
+ -2, 0, -19, -19, -19, -19, -19, 2, -19, 7,
+ -19, 3, -19, 8, 0, 4, 39, -19, -19, -2,
+ -19, -19, -19, -19, -19
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -591,27 +601,27 @@ static const yytype_int8 yypact[] =
static const yytype_uint8 yydefact[] =
{
2, 13, 0, 3, 4, 0, 1, 5, 0, 25,
- 26, 28, 27, 29, 30, 23, 15, 17, 42, 20,
- 21, 8, 31, 19, 22, 40, 35, 6, 10, 9,
- 14, 24, 37, 11, 41, 0, 32, 11, 36, 0,
- 7, 0, 12, 39, 16, 12, 34, 18, 43, 38,
- 33
+ 26, 28, 30, 32, 27, 29, 31, 33, 34, 23,
+ 15, 17, 46, 20, 21, 8, 35, 19, 22, 44,
+ 39, 6, 10, 9, 14, 24, 41, 11, 45, 0,
+ 36, 11, 40, 0, 7, 0, 12, 43, 16, 12,
+ 38, 18, 47, 42, 37
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
- -26, -26, 6, -26, -26, -2, -3, -26, -26, -26,
- -26, -26, -25, -26, -23, -26, -26, -26, -26, -26,
- -26, -26, -26
+ -19, -19, 1, -19, -19, -15, -3, -19, -19, -19,
+ -19, -19, -18, -19, -16, -19, -19, -19, -19, -19,
+ -19, -19, -19
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] =
{
- -1, 2, 3, 41, 30, 43, 4, 5, 19, 25,
- 20, 26, 21, 22, 23, 37, 38, 39, 33, 34,
- 35, 24, 27
+ -1, 2, 3, 45, 34, 47, 4, 5, 23, 29,
+ 24, 30, 25, 26, 27, 41, 42, 43, 37, 38,
+ 39, 28, 31
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -619,40 +629,44 @@ static const yytype_int8 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_uint8 yytable[] =
{
- 7, 36, 32, 9, 10, 11, 12, 13, 14, 15,
- 6, 28, 1, 16, 29, 17, 8, 31, 18, 49,
- 50, 9, 10, 11, 12, 13, 14, 15, 42, 44,
- 45, 48, 47, 40, 0, 46, 0, 7
+ 7, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 40, 36, 1, 20, 32, 21, 6, 33,
+ 22, 8, 35, 46, 49, 48, 50, 52, 51, 0,
+ 53, 54, 44, 0, 0, 0, 0, 0, 0, 0,
+ 0, 7, 9, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, 19
};
static const yytype_int8 yycheck[] =
{
- 3, 26, 25, 3, 4, 5, 6, 7, 8, 9,
- 0, 17, 10, 13, 20, 15, 11, 9, 18, 42,
- 45, 3, 4, 5, 6, 7, 8, 9, 17, 14,
- 17, 19, 16, 27, -1, 37, -1, 40
+ 3, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 30, 29, 14, 17, 21, 19, 0, 24,
+ 22, 15, 13, 21, 21, 18, 41, 23, 20, -1,
+ 46, 49, 31, -1, -1, -1, -1, -1, -1, -1,
+ -1, 44, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
- 0, 10, 24, 25, 29, 30, 0, 29, 11, 3,
- 4, 5, 6, 7, 8, 9, 13, 15, 18, 31,
- 33, 35, 36, 37, 44, 32, 34, 45, 17, 20,
- 27, 9, 37, 41, 42, 43, 35, 38, 39, 40,
- 25, 26, 17, 28, 14, 17, 28, 16, 19, 37,
- 35
+ 0, 14, 28, 29, 33, 34, 0, 33, 15, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 17, 19, 22, 35, 37, 39, 40, 41, 48, 36,
+ 38, 49, 21, 24, 31, 13, 41, 45, 46, 47,
+ 39, 42, 43, 44, 29, 30, 21, 32, 18, 21,
+ 32, 20, 23, 41, 39
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 23, 24, 24, 25, 25, 26, 26, 27, 27,
- 27, 28, 28, 30, 29, 32, 31, 34, 33, 35,
- 35, 35, 35, 36, 36, 37, 37, 37, 37, 37,
- 37, 37, 38, 38, 39, 40, 40, 41, 41, 42,
- 43, 43, 45, 44
+ 0, 27, 28, 28, 29, 29, 30, 30, 31, 31,
+ 31, 32, 32, 34, 33, 36, 35, 38, 37, 39,
+ 39, 39, 39, 40, 40, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 41, 42, 42, 43, 44,
+ 44, 45, 45, 46, 47, 47, 49, 48
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -661,8 +675,8 @@ static const yytype_uint8 yyr2[] =
0, 2, 0, 1, 1, 2, 0, 1, 0, 1,
1, 0, 1, 0, 5, 0, 4, 0, 4, 1,
1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
- 1, 1, 1, 3, 2, 0, 1, 1, 3, 2,
- 0, 1, 0, 4
+ 1, 1, 1, 1, 1, 1, 1, 3, 2, 0,
+ 1, 1, 3, 2, 0, 1, 0, 4
};
@@ -1347,7 +1361,7 @@ yyreduce:
switch (yyn)
{
case 13:
-#line 129 "grammar.y" /* yacc.c:1661 */
+#line 129 "grammar.y" /* yacc.c:1646 */
{
ctx->setting = config_setting_add(ctx->parent, (yyvsp[0].sval), CONFIG_TYPE_NONE);
@@ -1361,11 +1375,11 @@ yyreduce:
CAPTURE_PARSE_POS(ctx->setting);
}
}
-#line 1367 "grammar.c" /* yacc.c:1661 */
+#line 1381 "grammar.c" /* yacc.c:1646 */
break;
case 15:
-#line 148 "grammar.y" /* yacc.c:1661 */
+#line 148 "grammar.y" /* yacc.c:1646 */
{
if(IN_LIST())
{
@@ -1379,20 +1393,20 @@ yyreduce:
ctx->setting = NULL;
}
}
-#line 1385 "grammar.c" /* yacc.c:1661 */
+#line 1399 "grammar.c" /* yacc.c:1646 */
break;
case 16:
-#line 163 "grammar.y" /* yacc.c:1661 */
+#line 163 "grammar.y" /* yacc.c:1646 */
{
if(ctx->parent)
ctx->parent = ctx->parent->parent;
}
-#line 1394 "grammar.c" /* yacc.c:1661 */
+#line 1408 "grammar.c" /* yacc.c:1646 */
break;
case 17:
-#line 171 "grammar.y" /* yacc.c:1661 */
+#line 171 "grammar.y" /* yacc.c:1646 */
{
if(IN_LIST())
{
@@ -1406,32 +1420,32 @@ yyreduce:
ctx->setting = NULL;
}
}
-#line 1412 "grammar.c" /* yacc.c:1661 */
+#line 1426 "grammar.c" /* yacc.c:1646 */
break;
case 18:
-#line 186 "grammar.y" /* yacc.c:1661 */
+#line 186 "grammar.y" /* yacc.c:1646 */
{
if(ctx->parent)
ctx->parent = ctx->parent->parent;
}
-#line 1421 "grammar.c" /* yacc.c:1661 */
+#line 1435 "grammar.c" /* yacc.c:1646 */
break;
case 23:
-#line 200 "grammar.y" /* yacc.c:1661 */
+#line 200 "grammar.y" /* yacc.c:1646 */
{ parsectx_append_string(ctx, (yyvsp[0].sval)); free((yyvsp[0].sval)); }
-#line 1427 "grammar.c" /* yacc.c:1661 */
+#line 1441 "grammar.c" /* yacc.c:1646 */
break;
case 24:
-#line 201 "grammar.y" /* yacc.c:1661 */
+#line 201 "grammar.y" /* yacc.c:1646 */
{ parsectx_append_string(ctx, (yyvsp[0].sval)); free((yyvsp[0].sval)); }
-#line 1433 "grammar.c" /* yacc.c:1661 */
+#line 1447 "grammar.c" /* yacc.c:1646 */
break;
case 25:
-#line 206 "grammar.y" /* yacc.c:1661 */
+#line 206 "grammar.y" /* yacc.c:1646 */
{
if(IN_ARRAY() || IN_LIST())
{
@@ -1451,11 +1465,11 @@ yyreduce:
else
config_setting_set_bool(ctx->setting, (int)(yyvsp[0].ival));
}
-#line 1457 "grammar.c" /* yacc.c:1661 */
+#line 1471 "grammar.c" /* yacc.c:1646 */
break;
case 26:
-#line 226 "grammar.y" /* yacc.c:1661 */
+#line 226 "grammar.y" /* yacc.c:1646 */
{
if(IN_ARRAY() || IN_LIST())
{
@@ -1477,11 +1491,11 @@ yyreduce:
config_setting_set_format(ctx->setting, CONFIG_FORMAT_DEFAULT);
}
}
-#line 1483 "grammar.c" /* yacc.c:1661 */
+#line 1497 "grammar.c" /* yacc.c:1646 */
break;
case 27:
-#line 248 "grammar.y" /* yacc.c:1661 */
+#line 248 "grammar.y" /* yacc.c:1646 */
{
if(IN_ARRAY() || IN_LIST())
{
@@ -1503,11 +1517,11 @@ yyreduce:
config_setting_set_format(ctx->setting, CONFIG_FORMAT_DEFAULT);
}
}
-#line 1509 "grammar.c" /* yacc.c:1661 */
+#line 1523 "grammar.c" /* yacc.c:1646 */
break;
case 28:
-#line 270 "grammar.y" /* yacc.c:1661 */
+#line 270 "grammar.y" /* yacc.c:1646 */
{
if(IN_ARRAY() || IN_LIST())
{
@@ -1529,11 +1543,11 @@ yyreduce:
config_setting_set_format(ctx->setting, CONFIG_FORMAT_HEX);
}
}
-#line 1535 "grammar.c" /* yacc.c:1661 */
+#line 1549 "grammar.c" /* yacc.c:1646 */
break;
case 29:
-#line 292 "grammar.y" /* yacc.c:1661 */
+#line 292 "grammar.y" /* yacc.c:1646 */
{
if(IN_ARRAY() || IN_LIST())
{
@@ -1555,11 +1569,95 @@ yyreduce:
config_setting_set_format(ctx->setting, CONFIG_FORMAT_HEX);
}
}
-#line 1561 "grammar.c" /* yacc.c:1661 */
+#line 1575 "grammar.c" /* yacc.c:1646 */
break;
case 30:
-#line 314 "grammar.y" /* yacc.c:1661 */
+#line 314 "grammar.y" /* yacc.c:1646 */
+ {
+ if (IN_ARRAY() || IN_LIST()) {
+ struct config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, (yyvsp[0].ival));
+
+ if (e == NULL) {
+ libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
+ YYABORT;
+ } else {
+ config_setting_set_format(e, CONFIG_FORMAT_BIN);
+ CAPTURE_PARSE_POS(e);
+ }
+ } else {
+ config_setting_set_int(ctx->setting, (yyvsp[0].ival));
+ config_setting_set_format(ctx->setting, CONFIG_FORMAT_BIN);
+ }
+ }
+#line 1596 "grammar.c" /* yacc.c:1646 */
+ break;
+
+ case 31:
+#line 331 "grammar.y" /* yacc.c:1646 */
+ {
+ if (IN_ARRAY() || IN_LIST()) {
+ struct config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, (yyvsp[0].llval));
+
+ if (e == NULL) {
+ libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
+ YYABORT;
+ } else {
+ config_setting_set_format(e, CONFIG_FORMAT_BIN);
+ CAPTURE_PARSE_POS(e);
+ }
+ } else {
+ config_setting_set_int64(ctx->setting, (yyvsp[0].llval));
+ config_setting_set_format(ctx->setting, CONFIG_FORMAT_BIN);
+ }
+ }
+#line 1617 "grammar.c" /* yacc.c:1646 */
+ break;
+
+ case 32:
+#line 348 "grammar.y" /* yacc.c:1646 */
+ {
+ if (IN_ARRAY() || IN_LIST()) {
+ struct config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, (yyvsp[0].ival));
+
+ if (e == NULL) {
+ libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
+ YYABORT;
+ } else {
+ config_setting_set_format(e, CONFIG_FORMAT_OCT);
+ CAPTURE_PARSE_POS(e);
+ }
+ } else {
+ config_setting_set_int(ctx->setting, (yyvsp[0].ival));
+ config_setting_set_format(ctx->setting, CONFIG_FORMAT_OCT);
+ }
+ }
+#line 1638 "grammar.c" /* yacc.c:1646 */
+ break;
+
+ case 33:
+#line 365 "grammar.y" /* yacc.c:1646 */
+ {
+ if (IN_ARRAY() || IN_LIST()) {
+ struct config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, (yyvsp[0].llval));
+
+ if (e == NULL) {
+ libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type);
+ YYABORT;
+ } else {
+ config_setting_set_format(e, CONFIG_FORMAT_OCT);
+ CAPTURE_PARSE_POS(e);
+ }
+ } else {
+ config_setting_set_int64(ctx->setting, (yyvsp[0].llval));
+ config_setting_set_format(ctx->setting, CONFIG_FORMAT_OCT);
+ }
+ }
+#line 1659 "grammar.c" /* yacc.c:1646 */
+ break;
+
+ case 34:
+#line 382 "grammar.y" /* yacc.c:1646 */
{
if(IN_ARRAY() || IN_LIST())
{
@@ -1577,11 +1675,11 @@ yyreduce:
else
config_setting_set_float(ctx->setting, (yyvsp[0].fval));
}
-#line 1583 "grammar.c" /* yacc.c:1661 */
+#line 1681 "grammar.c" /* yacc.c:1646 */
break;
- case 31:
-#line 332 "grammar.y" /* yacc.c:1661 */
+ case 35:
+#line 400 "grammar.y" /* yacc.c:1646 */
{
if(IN_ARRAY() || IN_LIST())
{
@@ -1606,11 +1704,11 @@ yyreduce:
_delete(s);
}
}
-#line 1612 "grammar.c" /* yacc.c:1661 */
+#line 1710 "grammar.c" /* yacc.c:1646 */
break;
- case 42:
-#line 388 "grammar.y" /* yacc.c:1661 */
+ case 46:
+#line 456 "grammar.y" /* yacc.c:1646 */
{
if(IN_LIST())
{
@@ -1624,20 +1722,20 @@ yyreduce:
ctx->setting = NULL;
}
}
-#line 1630 "grammar.c" /* yacc.c:1661 */
+#line 1728 "grammar.c" /* yacc.c:1646 */
break;
- case 43:
-#line 403 "grammar.y" /* yacc.c:1661 */
+ case 47:
+#line 471 "grammar.y" /* yacc.c:1646 */
{
if(ctx->parent)
ctx->parent = ctx->parent->parent;
}
-#line 1639 "grammar.c" /* yacc.c:1661 */
+#line 1737 "grammar.c" /* yacc.c:1646 */
break;
-#line 1643 "grammar.c" /* yacc.c:1661 */
+#line 1741 "grammar.c" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -1865,5 +1963,5 @@ yyreturn:
#endif
return yyresult;
}
-#line 409 "grammar.y" /* yacc.c:1906 */
+#line 477 "grammar.y" /* yacc.c:1906 */
diff --git a/3rdparty/libconfig/grammar.h b/3rdparty/libconfig/grammar.h
index 09e7ae0b4..85f33992b 100644
--- a/3rdparty/libconfig/grammar.h
+++ b/3rdparty/libconfig/grammar.h
@@ -48,60 +48,68 @@ extern int libconfig_yydebug;
TOK_BOOLEAN = 258,
TOK_INTEGER = 259,
TOK_HEX = 260,
- TOK_INTEGER64 = 261,
- TOK_HEX64 = 262,
- TOK_FLOAT = 263,
- TOK_STRING = 264,
- TOK_NAME = 265,
- TOK_EQUALS = 266,
- TOK_NEWLINE = 267,
- TOK_ARRAY_START = 268,
- TOK_ARRAY_END = 269,
- TOK_LIST_START = 270,
- TOK_LIST_END = 271,
- TOK_COMMA = 272,
- TOK_GROUP_START = 273,
- TOK_GROUP_END = 274,
- TOK_SEMICOLON = 275,
- TOK_GARBAGE = 276,
- TOK_ERROR = 277
+ TOK_BIN = 261,
+ TOK_OCT = 262,
+ TOK_INTEGER64 = 263,
+ TOK_HEX64 = 264,
+ TOK_BIN64 = 265,
+ TOK_OCT64 = 266,
+ TOK_FLOAT = 267,
+ TOK_STRING = 268,
+ TOK_NAME = 269,
+ TOK_EQUALS = 270,
+ TOK_NEWLINE = 271,
+ TOK_ARRAY_START = 272,
+ TOK_ARRAY_END = 273,
+ TOK_LIST_START = 274,
+ TOK_LIST_END = 275,
+ TOK_COMMA = 276,
+ TOK_GROUP_START = 277,
+ TOK_GROUP_END = 278,
+ TOK_SEMICOLON = 279,
+ TOK_GARBAGE = 280,
+ TOK_ERROR = 281
};
#endif
/* Tokens. */
#define TOK_BOOLEAN 258
#define TOK_INTEGER 259
#define TOK_HEX 260
-#define TOK_INTEGER64 261
-#define TOK_HEX64 262
-#define TOK_FLOAT 263
-#define TOK_STRING 264
-#define TOK_NAME 265
-#define TOK_EQUALS 266
-#define TOK_NEWLINE 267
-#define TOK_ARRAY_START 268
-#define TOK_ARRAY_END 269
-#define TOK_LIST_START 270
-#define TOK_LIST_END 271
-#define TOK_COMMA 272
-#define TOK_GROUP_START 273
-#define TOK_GROUP_END 274
-#define TOK_SEMICOLON 275
-#define TOK_GARBAGE 276
-#define TOK_ERROR 277
+#define TOK_BIN 261
+#define TOK_OCT 262
+#define TOK_INTEGER64 263
+#define TOK_HEX64 264
+#define TOK_BIN64 265
+#define TOK_OCT64 266
+#define TOK_FLOAT 267
+#define TOK_STRING 268
+#define TOK_NAME 269
+#define TOK_EQUALS 270
+#define TOK_NEWLINE 271
+#define TOK_ARRAY_START 272
+#define TOK_ARRAY_END 273
+#define TOK_LIST_START 274
+#define TOK_LIST_END 275
+#define TOK_COMMA 276
+#define TOK_GROUP_START 277
+#define TOK_GROUP_END 278
+#define TOK_SEMICOLON 279
+#define TOK_GARBAGE 280
+#define TOK_ERROR 281
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 86 "grammar.y" /* yacc.c:1915 */
+#line 86 "grammar.y" /* yacc.c:1909 */
int ival;
long long llval;
double fval;
char *sval;
-#line 105 "grammar.h" /* yacc.c:1915 */
+#line 113 "grammar.h" /* yacc.c:1909 */
};
typedef union YYSTYPE YYSTYPE;
diff --git a/3rdparty/libconfig/libconfig.c b/3rdparty/libconfig/libconfig.c
index 533145ac4..daf3ba42d 100644
--- a/3rdparty/libconfig/libconfig.c
+++ b/3rdparty/libconfig/libconfig.c
@@ -174,6 +174,31 @@ static void __config_indent(FILE *stream, int depth, unsigned short w)
/* ------------------------------------------------------------------------- */
+/**
+ * converts an integer to a binary string (because itoa is not in C99)
+ * skips leading zeros, and does not prepend with a 0b prefix
+ *
+ * @param value - the integer to convert to a binary expression
+ * @param buffer - a pointer to the buffer used to build the string
+ * @returns the same buffer
+ */
+char *int_tobin(const unsigned long long value, char *buffer) {
+ const unsigned long long mask = 1;
+ unsigned char nonzero = 0;
+
+ for (char bit = 63; bit >= 0; --bit) {
+ if ((value & (mask << bit)) == 1) {
+ nonzero = 1;
+ *buffer++ = '1';
+ } else if (nonzero != 0) {
+ *buffer++ = '0';
+ }
+ }
+
+ *buffer = '\0';
+ return buffer;
+}
+
static void __config_write_value(const struct config_t *config,
const union config_value_t *value, int type,
int format, int depth, FILE *stream)
@@ -195,6 +220,17 @@ static void __config_write_value(const struct config_t *config,
fprintf(stream, "0x%X", (unsigned int)(value->ival));
break;
+ case CONFIG_FORMAT_BIN:
+ {
+ char buffer[33]; // 32 individual bits (char '0' and '1') represented as 32 bytes + null
+ fprintf(stream, "0b%s", int_tobin((unsigned int)(value->ival), buffer));
+ break;
+ }
+
+ case CONFIG_FORMAT_OCT:
+ fprintf(stream, "0o%o", (unsigned int)(value->ival));
+ break;
+
case CONFIG_FORMAT_DEFAULT:
default:
fprintf(stream, "%d", value->ival);
@@ -210,6 +246,17 @@ static void __config_write_value(const struct config_t *config,
fprintf(stream, "0x" INT64_HEX_FMT "L", (unsigned long long)(value->llval));
break;
+ case CONFIG_FORMAT_BIN:
+ {
+ char buffer[65]; // 64 individual bits (char '0' and '1') represented as 64 bytes + null
+ fprintf(stream, "0b%s", int_tobin((unsigned long long)(value->llval), buffer));
+ break;
+ }
+
+ case CONFIG_FORMAT_OCT:
+ fprintf(stream, "0o" INT64_OCT_FMT "L", (unsigned long long)(value->llval));
+ break;
+
case CONFIG_FORMAT_DEFAULT:
default:
fprintf(stream, INT64_FMT "L", value->llval);
@@ -1174,14 +1221,15 @@ int config_setting_set_string(struct config_setting_t *setting, const char *valu
int config_setting_set_format(struct config_setting_t *setting, short format)
{
- if(((setting->type != CONFIG_TYPE_INT)
- && (setting->type != CONFIG_TYPE_INT64))
- || ((format != CONFIG_FORMAT_DEFAULT) && (format != CONFIG_FORMAT_HEX)))
- return(CONFIG_FALSE);
+ if (((setting->type != CONFIG_TYPE_INT) && (setting->type != CONFIG_TYPE_INT64))
+ || ((format != CONFIG_FORMAT_DEFAULT) && (format != CONFIG_FORMAT_HEX)
+ && (format != CONFIG_FORMAT_BIN) && (format != CONFIG_FORMAT_OCT))) {
+ return CONFIG_FALSE;
+ }
setting->format = format;
- return(CONFIG_TRUE);
+ return CONFIG_TRUE;
}
/* ------------------------------------------------------------------------- */
diff --git a/3rdparty/libconfig/libconfig.h b/3rdparty/libconfig/libconfig.h
index 5662968a7..8c432b023 100644
--- a/3rdparty/libconfig/libconfig.h
+++ b/3rdparty/libconfig/libconfig.h
@@ -57,6 +57,8 @@ extern "C" {
#define CONFIG_FORMAT_DEFAULT 0
#define CONFIG_FORMAT_HEX 1
+#define CONFIG_FORMAT_BIN 2
+#define CONFIG_FORMAT_OCT 3
#define CONFIG_OPTION_AUTOCONVERT 0x01
#define CONFIG_OPTION_SEMICOLON_SEPARATORS 0x02
diff --git a/3rdparty/libconfig/scanner.c b/3rdparty/libconfig/scanner.c
index 1914142c4..584c8ae06 100644
--- a/3rdparty/libconfig/scanner.c
+++ b/3rdparty/libconfig/scanner.c
@@ -1,6 +1,6 @@
-#line 1 "scanner.c"
+#line 2 "scanner.c"
-#line 3 "scanner.c"
+#line 4 "scanner.c"
#define YY_INT_ALIGNED short int
@@ -9,11 +9,233 @@
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 2
+#define YY_FLEX_SUBMINOR_VERSION 4
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
+#ifdef yy_create_buffer
+#define libconfig_yy_create_buffer_ALREADY_DEFINED
+#else
+#define yy_create_buffer libconfig_yy_create_buffer
+#endif
+
+#ifdef yy_delete_buffer
+#define libconfig_yy_delete_buffer_ALREADY_DEFINED
+#else
+#define yy_delete_buffer libconfig_yy_delete_buffer
+#endif
+
+#ifdef yy_scan_buffer
+#define libconfig_yy_scan_buffer_ALREADY_DEFINED
+#else
+#define yy_scan_buffer libconfig_yy_scan_buffer
+#endif
+
+#ifdef yy_scan_string
+#define libconfig_yy_scan_string_ALREADY_DEFINED
+#else
+#define yy_scan_string libconfig_yy_scan_string
+#endif
+
+#ifdef yy_scan_bytes
+#define libconfig_yy_scan_bytes_ALREADY_DEFINED
+#else
+#define yy_scan_bytes libconfig_yy_scan_bytes
+#endif
+
+#ifdef yy_init_buffer
+#define libconfig_yy_init_buffer_ALREADY_DEFINED
+#else
+#define yy_init_buffer libconfig_yy_init_buffer
+#endif
+
+#ifdef yy_flush_buffer
+#define libconfig_yy_flush_buffer_ALREADY_DEFINED
+#else
+#define yy_flush_buffer libconfig_yy_flush_buffer
+#endif
+
+#ifdef yy_load_buffer_state
+#define libconfig_yy_load_buffer_state_ALREADY_DEFINED
+#else
+#define yy_load_buffer_state libconfig_yy_load_buffer_state
+#endif
+
+#ifdef yy_switch_to_buffer
+#define libconfig_yy_switch_to_buffer_ALREADY_DEFINED
+#else
+#define yy_switch_to_buffer libconfig_yy_switch_to_buffer
+#endif
+
+#ifdef yypush_buffer_state
+#define libconfig_yypush_buffer_state_ALREADY_DEFINED
+#else
+#define yypush_buffer_state libconfig_yypush_buffer_state
+#endif
+
+#ifdef yypop_buffer_state
+#define libconfig_yypop_buffer_state_ALREADY_DEFINED
+#else
+#define yypop_buffer_state libconfig_yypop_buffer_state
+#endif
+
+#ifdef yyensure_buffer_stack
+#define libconfig_yyensure_buffer_stack_ALREADY_DEFINED
+#else
+#define yyensure_buffer_stack libconfig_yyensure_buffer_stack
+#endif
+
+#ifdef yylex
+#define libconfig_yylex_ALREADY_DEFINED
+#else
+#define yylex libconfig_yylex
+#endif
+
+#ifdef yyrestart
+#define libconfig_yyrestart_ALREADY_DEFINED
+#else
+#define yyrestart libconfig_yyrestart
+#endif
+
+#ifdef yylex_init
+#define libconfig_yylex_init_ALREADY_DEFINED
+#else
+#define yylex_init libconfig_yylex_init
+#endif
+
+#ifdef yylex_init_extra
+#define libconfig_yylex_init_extra_ALREADY_DEFINED
+#else
+#define yylex_init_extra libconfig_yylex_init_extra
+#endif
+
+#ifdef yylex_destroy
+#define libconfig_yylex_destroy_ALREADY_DEFINED
+#else
+#define yylex_destroy libconfig_yylex_destroy
+#endif
+
+#ifdef yyget_debug
+#define libconfig_yyget_debug_ALREADY_DEFINED
+#else
+#define yyget_debug libconfig_yyget_debug
+#endif
+
+#ifdef yyset_debug
+#define libconfig_yyset_debug_ALREADY_DEFINED
+#else
+#define yyset_debug libconfig_yyset_debug
+#endif
+
+#ifdef yyget_extra
+#define libconfig_yyget_extra_ALREADY_DEFINED
+#else
+#define yyget_extra libconfig_yyget_extra
+#endif
+
+#ifdef yyset_extra
+#define libconfig_yyset_extra_ALREADY_DEFINED
+#else
+#define yyset_extra libconfig_yyset_extra
+#endif
+
+#ifdef yyget_in
+#define libconfig_yyget_in_ALREADY_DEFINED
+#else
+#define yyget_in libconfig_yyget_in
+#endif
+
+#ifdef yyset_in
+#define libconfig_yyset_in_ALREADY_DEFINED
+#else
+#define yyset_in libconfig_yyset_in
+#endif
+
+#ifdef yyget_out
+#define libconfig_yyget_out_ALREADY_DEFINED
+#else
+#define yyget_out libconfig_yyget_out
+#endif
+
+#ifdef yyset_out
+#define libconfig_yyset_out_ALREADY_DEFINED
+#else
+#define yyset_out libconfig_yyset_out
+#endif
+
+#ifdef yyget_leng
+#define libconfig_yyget_leng_ALREADY_DEFINED
+#else
+#define yyget_leng libconfig_yyget_leng
+#endif
+
+#ifdef yyget_text
+#define libconfig_yyget_text_ALREADY_DEFINED
+#else
+#define yyget_text libconfig_yyget_text
+#endif
+
+#ifdef yyget_lineno
+#define libconfig_yyget_lineno_ALREADY_DEFINED
+#else
+#define yyget_lineno libconfig_yyget_lineno
+#endif
+
+#ifdef yyset_lineno
+#define libconfig_yyset_lineno_ALREADY_DEFINED
+#else
+#define yyset_lineno libconfig_yyset_lineno
+#endif
+
+#ifdef yyget_column
+#define libconfig_yyget_column_ALREADY_DEFINED
+#else
+#define yyget_column libconfig_yyget_column
+#endif
+
+#ifdef yyset_column
+#define libconfig_yyset_column_ALREADY_DEFINED
+#else
+#define yyset_column libconfig_yyset_column
+#endif
+
+#ifdef yywrap
+#define libconfig_yywrap_ALREADY_DEFINED
+#else
+#define yywrap libconfig_yywrap
+#endif
+
+#ifdef yyget_lval
+#define libconfig_yyget_lval_ALREADY_DEFINED
+#else
+#define yyget_lval libconfig_yyget_lval
+#endif
+
+#ifdef yyset_lval
+#define libconfig_yyset_lval_ALREADY_DEFINED
+#else
+#define yyset_lval libconfig_yyset_lval
+#endif
+
+#ifdef yyalloc
+#define libconfig_yyalloc_ALREADY_DEFINED
+#else
+#define yyalloc libconfig_yyalloc
+#endif
+
+#ifdef yyrealloc
+#define libconfig_yyrealloc_ALREADY_DEFINED
+#else
+#define yyrealloc libconfig_yyrealloc
+#endif
+
+#ifdef yyfree
+#define libconfig_yyfree_ALREADY_DEFINED
+#else
+#define yyfree libconfig_yyfree
+#endif
+
/* First, we deal with platform-specific or compiler-specific issues. */
/* begin standard C headers. */
@@ -85,10 +307,16 @@ typedef unsigned int flex_uint32_t;
#define UINT32_MAX (4294967295U)
#endif
+#ifndef SIZE_MAX
+#define SIZE_MAX (~(size_t)0)
+#endif
+
#endif /* ! C99 */
#endif /* ! FLEXINT_H */
+/* begin standard C++ headers. */
+
/* TODO: this is always defined, so inline it */
#define yyconst const
@@ -137,7 +365,7 @@ typedef void* yyscan_t;
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE libconfig_yyrestart(yyin ,yyscanner )
+#define YY_NEW_FILE yyrestart( yyin , yyscanner )
#define YY_END_OF_BUFFER_CHAR 0
/* Size of default input buffer. */
@@ -173,7 +401,7 @@ typedef size_t yy_size_t;
/* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
* access to the local variable yy_act. Since yyless() is a macro, it would break
- * existing scanners that call yyless() from OUTSIDE libconfig_yylex.
+ * existing scanners that call yyless() from OUTSIDE yylex.
* One obvious solution it to make yy_act a global. I tried that, and saw
* a 5% performance hit in a non-yylineno scanner, because yy_act is
* normally declared as a register variable-- so it is not worth it.
@@ -248,7 +476,7 @@ struct yy_buffer_state
int yy_bs_lineno; /**< The line count. */
int yy_bs_column; /**< The column count. */
-
+
/* Whether to try to fill the input buffer when we reach the
* end of it.
*/
@@ -265,7 +493,7 @@ struct yy_buffer_state
* possible backing-up.
*
* When we actually see the EOF, we change the status to "new"
- * (via libconfig_yyrestart()), so that the user can continue scanning by
+ * (via yyrestart()), so that the user can continue scanning by
* just pointing yyin at a new input file.
*/
#define YY_BUFFER_EOF_PENDING 2
@@ -287,43 +515,43 @@ struct yy_buffer_state
*/
#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
-void libconfig_yyrestart ( FILE *input_file , yyscan_t yyscanner );
-void libconfig_yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
-YY_BUFFER_STATE libconfig_yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner );
-void libconfig_yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
-void libconfig_yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
-void libconfig_yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
-void libconfig_yypop_buffer_state ( yyscan_t yyscanner );
+void yyrestart ( FILE *input_file , yyscan_t yyscanner );
+void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner );
+void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
+void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
+void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
+void yypop_buffer_state ( yyscan_t yyscanner );
-static void libconfig_yyensure_buffer_stack ( yyscan_t yyscanner );
-static void libconfig_yy_load_buffer_state ( yyscan_t yyscanner );
-static void libconfig_yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner );
-#define YY_FLUSH_BUFFER libconfig_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
+static void yyensure_buffer_stack ( yyscan_t yyscanner );
+static void yy_load_buffer_state ( yyscan_t yyscanner );
+static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner );
+#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner)
-YY_BUFFER_STATE libconfig_yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner );
-YY_BUFFER_STATE libconfig_yy_scan_string ( const char *yy_str , yyscan_t yyscanner );
-YY_BUFFER_STATE libconfig_yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner );
-void *libconfig_yyalloc ( yy_size_t , yyscan_t yyscanner );
-void *libconfig_yyrealloc ( void *, yy_size_t , yyscan_t yyscanner );
-void libconfig_yyfree ( void * , yyscan_t yyscanner );
+void *yyalloc ( yy_size_t , yyscan_t yyscanner );
+void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner );
+void yyfree ( void * , yyscan_t yyscanner );
-#define yy_new_buffer libconfig_yy_create_buffer
+#define yy_new_buffer yy_create_buffer
#define yy_set_interactive(is_interactive) \
{ \
if ( ! YY_CURRENT_BUFFER ){ \
- libconfig_yyensure_buffer_stack (yyscanner); \
+ yyensure_buffer_stack (yyscanner); \
YY_CURRENT_BUFFER_LVALUE = \
- libconfig_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+ yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \
} \
YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
}
#define yy_set_bol(at_bol) \
{ \
if ( ! YY_CURRENT_BUFFER ){\
- libconfig_yyensure_buffer_stack (yyscanner); \
+ yyensure_buffer_stack (yyscanner); \
YY_CURRENT_BUFFER_LVALUE = \
- libconfig_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+ yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \
} \
YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
}
@@ -351,8 +579,8 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner );
yyg->yy_hold_char = *yy_cp; \
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
-#define YY_NUM_RULES 45
-#define YY_END_OF_BUFFER 46
+#define YY_NUM_RULES 49
+#define YY_END_OF_BUFFER 50
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -360,22 +588,23 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static const flex_int16_t yy_accept[123] =
+static const flex_int16_t yy_accept[134] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 46, 44, 25, 24, 24, 5, 44, 40, 41, 37,
- 44, 27, 32, 44, 33, 33, 26, 42, 44, 37,
- 37, 38, 39, 28, 29, 25, 44, 3, 4, 3,
- 6, 15, 14, 20, 23, 45, 17, 45, 25, 0,
- 43, 37, 32, 33, 32, 0, 1, 0, 32, 33,
- 37, 34, 37, 16, 37, 37, 25, 0, 0, 2,
- 6, 12, 0, 11, 10, 7, 8, 9, 20, 22,
- 21, 17, 0, 18, 32, 0, 34, 0, 32, 32,
- 37, 0, 37, 32, 34, 35, 37, 37, 0, 0,
-
- 32, 0, 32, 34, 0, 37, 32, 36, 37, 30,
- 0, 13, 32, 36, 31, 0, 0, 0, 0, 0,
- 19, 0
+ 50, 48, 25, 24, 24, 5, 48, 44, 45, 41,
+ 48, 27, 32, 48, 33, 33, 26, 46, 48, 41,
+ 41, 42, 43, 33, 28, 29, 25, 48, 3, 4,
+ 3, 6, 15, 14, 20, 23, 49, 17, 49, 25,
+ 0, 47, 41, 32, 33, 33, 32, 0, 1, 0,
+ 32, 33, 41, 41, 34, 41, 41, 33, 16, 41,
+ 41, 34, 25, 0, 0, 2, 6, 12, 0, 11,
+ 10, 7, 8, 9, 20, 22, 21, 17, 0, 18,
+ 32, 0, 0, 32, 32, 41, 37, 0, 41, 32,
+
+ 34, 39, 35, 41, 41, 34, 0, 0, 32, 0,
+ 32, 0, 41, 32, 38, 40, 36, 41, 30, 0,
+ 13, 32, 38, 40, 36, 31, 0, 0, 0, 0,
+ 0, 19, 0
} ;
static const YY_CHAR yy_ec[256] =
@@ -384,16 +613,16 @@ static const YY_CHAR yy_ec[256] =
1, 4, 5, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 2, 1, 6, 7, 1, 1, 1, 1, 8,
- 9, 10, 11, 12, 13, 14, 15, 16, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 18, 19, 20,
- 21, 22, 1, 23, 24, 25, 25, 25, 26, 27,
- 28, 28, 28, 28, 28, 29, 28, 28, 28, 28,
- 28, 30, 31, 32, 33, 28, 28, 34, 28, 28,
- 35, 36, 37, 1, 38, 1, 24, 25, 39, 40,
-
- 41, 42, 28, 28, 43, 28, 28, 44, 28, 45,
- 28, 28, 28, 46, 31, 47, 48, 28, 28, 34,
- 28, 28, 49, 1, 50, 1, 1, 1, 1, 1,
+ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 18, 18, 18, 18, 18, 19, 19, 20, 21, 22,
+ 23, 24, 1, 25, 26, 27, 28, 28, 29, 30,
+ 31, 31, 31, 31, 31, 32, 31, 31, 33, 31,
+ 31, 34, 35, 36, 37, 31, 31, 38, 31, 31,
+ 39, 40, 41, 1, 42, 1, 26, 27, 43, 44,
+
+ 45, 46, 31, 31, 47, 31, 31, 48, 31, 49,
+ 33, 31, 31, 50, 35, 51, 52, 31, 31, 38,
+ 31, 31, 53, 1, 54, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -410,135 +639,160 @@ static const YY_CHAR yy_ec[256] =
1, 1, 1, 1, 1
} ;
-static const YY_CHAR yy_meta[51] =
+static const YY_CHAR yy_meta[55] =
{ 0,
1, 1, 1, 1, 1, 2, 1, 1, 1, 3,
- 1, 1, 3, 3, 1, 4, 4, 1, 1, 1,
- 1, 1, 1, 4, 4, 4, 4, 3, 3, 3,
- 3, 3, 3, 3, 1, 2, 1, 3, 4, 4,
- 4, 4, 3, 3, 3, 3, 3, 3, 1, 1
+ 1, 1, 3, 3, 1, 4, 4, 4, 4, 1,
+ 1, 1, 1, 1, 1, 4, 4, 4, 4, 4,
+ 3, 3, 3, 3, 3, 3, 3, 3, 1, 2,
+ 1, 3, 4, 4, 4, 4, 3, 3, 3, 3,
+ 3, 3, 1, 1
} ;
-static const flex_int16_t yy_base[134] =
+static const flex_int16_t yy_base[145] =
{ 0,
- 0, 49, 49, 50, 48, 49, 50, 51, 244, 243,
- 248, 251, 245, 251, 251, 251, 243, 251, 251, 0,
- 47, 251, 49, 52, 54, 211, 251, 251, 238, 219,
- 28, 251, 251, 251, 251, 71, 199, 251, 251, 226,
- 0, 251, 63, 0, 251, 70, 234, 217, 236, 234,
- 251, 0, 75, 86, 97, 108, 251, 233, 113, 201,
- 115, 205, 139, 251, 49, 48, 75, 190, 187, 251,
- 0, 251, 0, 251, 251, 251, 251, 251, 0, 251,
- 251, 225, 202, 251, 117, 124, 191, 101, 128, 131,
- 157, 133, 135, 143, 0, 156, 152, 63, 138, 0,
-
- 145, 171, 159, 251, 173, 175, 177, 140, 81, 0,
- 123, 251, 179, 0, 0, 105, 96, 79, 109, 140,
- 251, 251, 196, 200, 204, 208, 212, 214, 218, 222,
- 226, 78, 75
+ 0, 53, 53, 54, 52, 53, 54, 55, 347, 346,
+ 351, 354, 348, 354, 354, 354, 346, 354, 354, 0,
+ 54, 354, 58, 52, 90, 52, 354, 354, 342, 321,
+ 31, 354, 354, 82, 354, 354, 64, 299, 354, 354,
+ 330, 0, 354, 80, 0, 354, 76, 332, 310, 299,
+ 297, 354, 0, 120, 152, 125, 129, 143, 354, 280,
+ 134, 64, 156, 169, 249, 159, 186, 191, 354, 73,
+ 32, 206, 86, 188, 151, 354, 0, 354, 0, 354,
+ 354, 354, 354, 354, 0, 354, 354, 187, 154, 354,
+ 208, 223, 173, 201, 227, 241, 179, 231, 245, 249,
+
+ 0, 253, 132, 120, 154, 354, 97, 0, 257, 271,
+ 261, 275, 280, 287, 102, 101, 95, 177, 0, 77,
+ 354, 291, 0, 0, 0, 0, 63, 69, 67, 108,
+ 249, 354, 354, 310, 314, 318, 322, 326, 328, 332,
+ 336, 340, 79, 76
} ;
-static const flex_int16_t yy_def[134] =
+static const flex_int16_t yy_def[145] =
{ 0,
- 122, 1, 123, 123, 124, 124, 125, 125, 126, 126,
- 122, 122, 122, 122, 122, 122, 127, 122, 122, 128,
- 122, 122, 122, 122, 128, 25, 122, 122, 122, 128,
- 128, 122, 122, 122, 122, 122, 122, 122, 122, 122,
- 129, 122, 122, 130, 122, 122, 131, 131, 122, 127,
- 122, 128, 122, 122, 122, 122, 122, 127, 128, 25,
- 128, 128, 128, 122, 128, 128, 122, 122, 122, 122,
- 129, 122, 132, 122, 122, 122, 122, 122, 130, 122,
- 122, 131, 131, 122, 122, 122, 122, 122, 122, 128,
- 128, 122, 128, 128, 128, 63, 128, 128, 122, 133,
-
- 122, 122, 122, 122, 122, 128, 128, 128, 128, 128,
- 122, 122, 122, 128, 128, 122, 122, 122, 122, 122,
- 122, 0, 122, 122, 122, 122, 122, 122, 122, 122,
- 122, 122, 122
+ 133, 1, 134, 134, 135, 135, 136, 136, 137, 137,
+ 133, 133, 133, 133, 133, 133, 138, 133, 133, 139,
+ 133, 133, 133, 133, 139, 25, 133, 133, 133, 139,
+ 139, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 140, 133, 133, 141, 133, 133, 142, 142, 133,
+ 138, 133, 139, 133, 133, 133, 133, 133, 133, 138,
+ 139, 25, 139, 139, 139, 139, 139, 139, 133, 139,
+ 139, 133, 133, 133, 133, 133, 140, 133, 143, 133,
+ 133, 133, 133, 133, 141, 133, 133, 142, 142, 133,
+ 133, 133, 133, 133, 139, 139, 139, 133, 139, 139,
+
+ 139, 139, 67, 139, 139, 133, 133, 144, 133, 133,
+ 133, 133, 139, 139, 139, 139, 139, 139, 139, 133,
+ 133, 133, 139, 139, 139, 139, 133, 133, 133, 133,
+ 133, 133, 0, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133
} ;
-static const flex_int16_t yy_nxt[302] =
+static const flex_int16_t yy_nxt[409] =
{ 0,
12, 13, 14, 15, 15, 16, 17, 18, 19, 20,
- 21, 22, 21, 23, 24, 25, 26, 27, 28, 29,
- 27, 12, 12, 20, 20, 20, 30, 20, 20, 20,
- 20, 31, 20, 20, 32, 12, 33, 12, 20, 20,
- 20, 30, 20, 20, 20, 20, 31, 20, 34, 35,
- 36, 39, 39, 42, 42, 45, 45, 66, 40, 40,
- 53, 57, 54, 54, 55, 55, 58, 59, 72, 60,
- 60, 37, 67, 66, 56, 80, 67, 97, 112, 61,
- 98, 100, 62, 43, 43, 46, 46, 63, 110, 56,
- 55, 55, 97, 68, 61, 98, 73, 68, 74, 85,
-
- 56, 54, 54, 110, 75, 81, 115, 76, 77, 78,
- 120, 86, 55, 55, 87, 56, 89, 89, 88, 119,
- 88, 115, 56, 89, 89, 92, 86, 93, 90, 90,
- 94, 94, 101, 101, 92, 118, 92, 56, 91, 103,
- 103, 120, 102, 89, 89, 121, 90, 90, 103, 103,
- 94, 94, 117, 91, 96, 96, 91, 102, 94, 94,
- 101, 101, 96, 96, 96, 96, 116, 105, 114, 106,
- 102, 91, 107, 107, 103, 103, 111, 96, 96, 96,
- 96, 105, 109, 105, 108, 102, 113, 113, 113, 113,
- 107, 107, 107, 107, 113, 113, 38, 38, 38, 38,
-
- 41, 41, 41, 41, 44, 44, 44, 44, 47, 47,
- 47, 47, 50, 50, 50, 50, 52, 52, 71, 104,
- 71, 71, 79, 122, 79, 79, 82, 82, 82, 82,
- 83, 99, 69, 95, 52, 51, 51, 49, 84, 83,
- 70, 69, 65, 64, 52, 51, 49, 122, 48, 48,
- 11, 122, 122, 122, 122, 122, 122, 122, 122, 122,
- 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
- 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
- 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
- 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
-
- 122
+ 21, 22, 21, 23, 24, 25, 26, 26, 26, 27,
+ 28, 29, 27, 12, 12, 20, 20, 20, 20, 30,
+ 20, 20, 20, 20, 20, 31, 20, 20, 32, 12,
+ 33, 34, 20, 20, 20, 30, 20, 20, 20, 20,
+ 31, 20, 35, 36, 37, 40, 40, 43, 43, 46,
+ 46, 59, 41, 41, 71, 73, 60, 54, 105, 55,
+ 55, 55, 55, 57, 57, 57, 57, 38, 53, 121,
+ 71, 86, 108, 105, 53, 78, 58, 73, 74, 53,
+ 53, 44, 44, 47, 47, 56, 53, 56, 56, 56,
+
+ 56, 53, 58, 61, 104, 62, 62, 62, 62, 131,
+ 74, 130, 129, 72, 128, 87, 63, 79, 64, 80,
+ 104, 65, 66, 56, 127, 81, 125, 67, 82, 83,
+ 84, 68, 124, 123, 64, 57, 57, 57, 57, 120,
+ 56, 56, 56, 56, 57, 57, 57, 57, 58, 95,
+ 95, 95, 95, 93, 118, 93, 72, 58, 94, 94,
+ 94, 94, 96, 117, 58, 91, 56, 55, 55, 55,
+ 55, 97, 97, 58, 102, 102, 102, 133, 96, 98,
+ 92, 99, 119, 72, 100, 100, 100, 100, 94, 94,
+ 94, 94, 89, 56, 97, 97, 92, 97, 119, 107,
+
+ 102, 103, 103, 103, 103, 126, 68, 68, 68, 68,
+ 115, 103, 103, 103, 103, 103, 94, 94, 94, 94,
+ 97, 126, 65, 109, 109, 109, 109, 103, 103, 103,
+ 103, 103, 68, 98, 75, 98, 110, 106, 111, 111,
+ 111, 111, 95, 95, 95, 95, 111, 111, 111, 111,
+ 131, 112, 110, 113, 132, 96, 114, 114, 114, 114,
+ 100, 100, 100, 100, 100, 100, 100, 100, 102, 102,
+ 102, 96, 109, 109, 109, 109, 111, 111, 111, 111,
+ 101, 112, 52, 112, 116, 110, 122, 122, 122, 122,
+ 122, 122, 122, 122, 102, 114, 114, 114, 114, 52,
+
+ 50, 110, 114, 114, 114, 114, 122, 122, 122, 122,
+ 39, 39, 39, 39, 42, 42, 42, 42, 45, 45,
+ 45, 45, 48, 48, 48, 48, 51, 51, 51, 51,
+ 53, 53, 77, 90, 77, 77, 85, 89, 85, 85,
+ 88, 88, 88, 88, 76, 75, 70, 69, 52, 50,
+ 133, 49, 49, 11, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+
+ 133, 133, 133, 133, 133, 133, 133, 133
} ;
-static const flex_int16_t yy_chk[302] =
+static const flex_int16_t yy_chk[409] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 3, 4, 5, 6, 7, 8, 31, 3, 4,
- 21, 24, 21, 21, 23, 23, 24, 25, 43, 25,
- 25, 2, 36, 31, 23, 46, 67, 65, 133, 25,
- 66, 132, 25, 5, 6, 7, 8, 25, 98, 23,
- 53, 53, 65, 36, 25, 66, 43, 67, 43, 54,
-
- 53, 54, 54, 98, 43, 46, 109, 43, 43, 43,
- 119, 54, 55, 55, 54, 53, 88, 88, 56, 118,
- 56, 109, 55, 56, 56, 61, 54, 61, 59, 59,
- 61, 61, 85, 85, 86, 117, 86, 55, 59, 86,
- 86, 120, 85, 89, 89, 120, 90, 90, 92, 92,
- 93, 93, 116, 59, 63, 63, 90, 85, 94, 94,
- 101, 101, 63, 63, 63, 63, 111, 91, 108, 91,
- 101, 90, 91, 91, 103, 103, 99, 63, 63, 63,
- 63, 102, 97, 102, 96, 101, 102, 102, 105, 105,
- 106, 106, 107, 107, 113, 113, 123, 123, 123, 123,
-
- 124, 124, 124, 124, 125, 125, 125, 125, 126, 126,
- 126, 126, 127, 127, 127, 127, 128, 128, 129, 87,
- 129, 129, 130, 83, 130, 130, 131, 131, 131, 131,
- 82, 69, 68, 62, 60, 58, 50, 49, 48, 47,
- 40, 37, 30, 29, 26, 17, 13, 11, 10, 9,
- 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
- 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
- 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
- 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
- 122, 122, 122, 122, 122, 122, 122, 122, 122, 122,
-
- 122
+ 1, 1, 1, 1, 2, 3, 4, 5, 6, 7,
+ 8, 24, 3, 4, 31, 37, 24, 21, 71, 21,
+ 21, 21, 21, 23, 23, 23, 23, 2, 26, 144,
+ 31, 47, 143, 71, 26, 44, 23, 73, 37, 26,
+ 62, 5, 6, 7, 8, 21, 62, 34, 34, 34,
+
+ 34, 62, 23, 25, 70, 25, 25, 25, 25, 130,
+ 73, 129, 128, 34, 127, 47, 25, 44, 25, 44,
+ 70, 25, 25, 34, 120, 44, 117, 25, 44, 44,
+ 44, 25, 116, 115, 25, 54, 54, 54, 54, 107,
+ 56, 56, 56, 56, 57, 57, 57, 57, 54, 61,
+ 61, 61, 61, 58, 104, 58, 56, 57, 58, 58,
+ 58, 58, 61, 103, 54, 55, 56, 55, 55, 55,
+ 55, 63, 63, 57, 66, 66, 66, 89, 61, 64,
+ 55, 64, 105, 55, 64, 64, 64, 64, 93, 93,
+ 93, 93, 88, 55, 97, 97, 55, 63, 105, 75,
+
+ 66, 67, 67, 67, 67, 118, 68, 68, 68, 68,
+ 97, 67, 67, 67, 67, 67, 94, 94, 94, 94,
+ 97, 118, 68, 91, 91, 91, 91, 67, 67, 67,
+ 67, 67, 68, 92, 74, 92, 91, 72, 92, 92,
+ 92, 92, 95, 95, 95, 95, 98, 98, 98, 98,
+ 131, 96, 91, 96, 131, 95, 96, 96, 96, 96,
+ 99, 99, 99, 99, 100, 100, 100, 100, 102, 102,
+ 102, 95, 109, 109, 109, 109, 111, 111, 111, 111,
+ 65, 110, 60, 110, 102, 109, 110, 110, 110, 110,
+ 112, 112, 112, 112, 102, 113, 113, 113, 113, 51,
+
+ 50, 109, 114, 114, 114, 114, 122, 122, 122, 122,
+ 134, 134, 134, 134, 135, 135, 135, 135, 136, 136,
+ 136, 136, 137, 137, 137, 137, 138, 138, 138, 138,
+ 139, 139, 140, 49, 140, 140, 141, 48, 141, 141,
+ 142, 142, 142, 142, 41, 38, 30, 29, 17, 13,
+ 11, 10, 9, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+ 133, 133, 133, 133, 133, 133, 133, 133, 133, 133,
+
+ 133, 133, 133, 133, 133, 133, 133, 133
} ;
/* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[46] =
+static const flex_int32_t yy_rule_can_match_eol[50] =
{ 0,
0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, };
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
/* The intent behind this definition is that it'll catch
* any uses of REJECT which flex missed.
@@ -589,43 +843,108 @@ static const flex_int32_t yy_rule_can_match_eol[46] =
#define YY_NO_INPUT // Suppress generation of useless input() function
-static unsigned long long fromhex(const char *s)
+/**
+ * converts a hexadecimal number literal to an ull integer
+ *
+ * @param p - a pointer to the hexacimal expression to parse
+ * @returns the resulting unsigned long long integer
+ */
+static unsigned long long fromhex(const char *p)
{
-#ifdef __MINGW32__
+ unsigned long long val = 0;
- /* MinGW's strtoull() seems to be broken; it only returns the lower
- * 32 bits...
- */
+ if (*p != '0' || (p[1] != 'x' && p[1] != 'X')) {
+ return 0;
+ }
- const char *p = s;
+ for (p += 2; isxdigit(*p) || *p == '_'; ++p) {
+ if (*p != '_') {
+ val <<= 4;
+ val |= ((*p < 'A') ? (*p & 0xF) : (9 + (*p & 0x7)));
+ }
+ }
+
+ return val;
+}
+
+/**
+ * converts a binary number literal to an ull integer
+ *
+ * @param p - a pointer to the hexacimal expression to parse
+ * @returns the resulting unsigned long long integer
+ */
+static unsigned long long frombin (const char *p)
+{
unsigned long long val = 0;
- if(*p != '0')
- return(0);
+ if (*p != '0' || (p[1] != 'b' && p[1] != 'B')) {
+ return 0;
+ }
+
+ for (p += 2; *p == '0' || *p == '1' || *p == '_'; ++p) {
+ if (*p != '_') {
+ val <<= 1;
+ val |= (*p == '0') ? 0 : 1;
+ }
+ }
+
+ return val;
+}
- ++p;
+/**
+ * converts an octal number literal to an ull integer
+ *
+ * @param p - a pointer to the hexacimal expression to parse
+ * @returns the resulting unsigned long long integer
+ */
+static unsigned long long fromoct (const char *p)
+{
+ unsigned long long val = 0;
- if(*p != 'x' && *p != 'X')
- return(0);
+ if (*p != '0' || (p[1] != 'o' && p[1] != 'O')) {
+ return 0;
+ }
- for(++p; isxdigit(*p); ++p)
- {
- val <<= 4;
- val |= ((*p < 'A') ? (*p & 0xF) : (9 + (*p & 0x7)));
+ for (p += 2; (*p >= '0' && *p <= '7') || *p == '_'; ++p) {
+ if (*p != '_') {
+ val <<= 3;
+ val |= (*p & 0xF);
+ }
}
- return(val);
+ return val;
+}
-#else /* ! __MINGW32__ */
+/**
+ * converts a decimal number literal to a ll integer
+ *
+ * @param p - a pointer to the hexacimal expression to parse
+ * @returns the resulting signed long long integer
+ */
+static long long fromdec (const char *p)
+{
+ unsigned char is_neg = 0;
+
+ if (*p == '-') {
+ is_neg = 1;
+ p++;
+ }
- return(strtoull(s, NULL, 16));
+ long long val = 0;
-#endif /* __MINGW32__ */
+ for (; isdigit(*p) || *p == '_'; ++p) {
+ if (*p != '_') {
+ val *= 10;
+ val += (*p & 0xF);
+ }
+ }
+
+ return (is_neg == 1) ? -val : val;
}
-#line 625 "scanner.c"
+#line 945 "scanner.c"
-#line 627 "scanner.c"
+#line 947 "scanner.c"
#define INITIAL 0
#define COMMENT 1
@@ -677,46 +996,46 @@ static int yy_init_globals ( yyscan_t yyscanner );
* from bison output in section 1.*/
# define yylval yyg->yylval_r
-int libconfig_yylex_init (yyscan_t* scanner);
+int yylex_init (yyscan_t* scanner);
-int libconfig_yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
+int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
/* Accessor methods to globals.
These are made visible to non-reentrant scanners for convenience. */
-int libconfig_yylex_destroy ( yyscan_t yyscanner );
+int yylex_destroy ( yyscan_t yyscanner );
-int libconfig_yyget_debug ( yyscan_t yyscanner );
+int yyget_debug ( yyscan_t yyscanner );
-void libconfig_yyset_debug ( int debug_flag , yyscan_t yyscanner );
+void yyset_debug ( int debug_flag , yyscan_t yyscanner );
-YY_EXTRA_TYPE libconfig_yyget_extra ( yyscan_t yyscanner );
+YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner );
-void libconfig_yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner );
+void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner );
-FILE *libconfig_yyget_in ( yyscan_t yyscanner );
+FILE *yyget_in ( yyscan_t yyscanner );
-void libconfig_yyset_in ( FILE * _in_str , yyscan_t yyscanner );
+void yyset_in ( FILE * _in_str , yyscan_t yyscanner );
-FILE *libconfig_yyget_out ( yyscan_t yyscanner );
+FILE *yyget_out ( yyscan_t yyscanner );
-void libconfig_yyset_out ( FILE * _out_str , yyscan_t yyscanner );
+void yyset_out ( FILE * _out_str , yyscan_t yyscanner );
- int libconfig_yyget_leng ( yyscan_t yyscanner );
+ int yyget_leng ( yyscan_t yyscanner );
-char *libconfig_yyget_text ( yyscan_t yyscanner );
+char *yyget_text ( yyscan_t yyscanner );
-int libconfig_yyget_lineno ( yyscan_t yyscanner );
+int yyget_lineno ( yyscan_t yyscanner );
-void libconfig_yyset_lineno ( int _line_number , yyscan_t yyscanner );
+void yyset_lineno ( int _line_number , yyscan_t yyscanner );
-int libconfig_yyget_column ( yyscan_t yyscanner );
+int yyget_column ( yyscan_t yyscanner );
-void libconfig_yyset_column ( int _column_no , yyscan_t yyscanner );
+void yyset_column ( int _column_no , yyscan_t yyscanner );
-YYSTYPE * libconfig_yyget_lval ( yyscan_t yyscanner );
+YYSTYPE * yyget_lval ( yyscan_t yyscanner );
-void libconfig_yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner );
+void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner );
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -724,9 +1043,9 @@ void libconfig_yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner );
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
-extern "C" int libconfig_yywrap ( yyscan_t yyscanner );
+extern "C" int yywrap ( yyscan_t yyscanner );
#else
-extern int libconfig_yywrap ( yyscan_t yyscanner );
+extern int yywrap ( yyscan_t yyscanner );
#endif
#endif
@@ -831,10 +1150,10 @@ static int input ( yyscan_t yyscanner );
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1
-extern int libconfig_yylex \
+extern int yylex \
(YYSTYPE * yylval_param , yyscan_t yyscanner);
-#define YY_DECL int libconfig_yylex \
+#define YY_DECL int yylex \
(YYSTYPE * yylval_param , yyscan_t yyscanner)
#endif /* !YY_DECL */
@@ -885,19 +1204,19 @@ YY_DECL
yyout = stdout;
if ( ! YY_CURRENT_BUFFER ) {
- libconfig_yyensure_buffer_stack (yyscanner);
+ yyensure_buffer_stack (yyscanner);
YY_CURRENT_BUFFER_LVALUE =
- libconfig_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+ yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner);
}
- libconfig_yy_load_buffer_state(yyscanner );
+ yy_load_buffer_state( yyscanner );
}
{
-#line 103 "scanner.l"
+#line 172 "scanner.l"
-#line 899 "scanner.c"
+#line 1219 "scanner.c"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -925,13 +1244,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 123 )
+ if ( yy_current_state >= 134 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp;
}
- while ( yy_current_state != 122 );
+ while ( yy_current_state != 133 );
yy_cp = yyg->yy_last_accepting_cpos;
yy_current_state = yyg->yy_last_accepting_state;
@@ -945,7 +1264,7 @@ yy_find_action:
int yyl;
for ( yyl = 0; yyl < yyleng; ++yyl )
if ( yytext[yyl] == '\n' )
-
+
do{ yylineno++;
yycolumn=0;
}while(0)
@@ -965,69 +1284,69 @@ do_action: /* This label is used only to access EOF actions. */
case 1:
YY_RULE_SETUP
-#line 105 "scanner.l"
+#line 174 "scanner.l"
{ BEGIN COMMENT; }
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 106 "scanner.l"
+#line 175 "scanner.l"
{ BEGIN INITIAL; }
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 107 "scanner.l"
+#line 176 "scanner.l"
{ /* ignore */ }
YY_BREAK
case 4:
/* rule 4 can match eol */
YY_RULE_SETUP
-#line 108 "scanner.l"
+#line 177 "scanner.l"
{ /* ignore */ }
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 110 "scanner.l"
+#line 179 "scanner.l"
{ BEGIN STRING; }
YY_BREAK
case 6:
/* rule 6 can match eol */
YY_RULE_SETUP
-#line 111 "scanner.l"
+#line 180 "scanner.l"
{ scanctx_append_string(yyextra, yytext); }
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 112 "scanner.l"
+#line 181 "scanner.l"
{ scanctx_append_string(yyextra, "\n"); }
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 113 "scanner.l"
+#line 182 "scanner.l"
{ scanctx_append_string(yyextra, "\r"); }
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 114 "scanner.l"
+#line 183 "scanner.l"
{ scanctx_append_string(yyextra, "\t"); }
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 115 "scanner.l"
+#line 184 "scanner.l"
{ scanctx_append_string(yyextra, "\f"); }
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 116 "scanner.l"
+#line 185 "scanner.l"
{ scanctx_append_string(yyextra, "\\"); }
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 117 "scanner.l"
+#line 186 "scanner.l"
{ scanctx_append_string(yyextra, "\""); }
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 118 "scanner.l"
+#line 187 "scanner.l"
{
char c[2] = { (char)(strtol(yytext + 2, NULL, 16) & 0xFF),
0 };
@@ -1036,12 +1355,12 @@ YY_RULE_SETUP
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 123 "scanner.l"
+#line 192 "scanner.l"
{ scanctx_append_string(yyextra, "\\"); }
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 124 "scanner.l"
+#line 193 "scanner.l"
{
yylval->sval = scanctx_take_string(yyextra);
BEGIN INITIAL;
@@ -1050,18 +1369,18 @@ YY_RULE_SETUP
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 130 "scanner.l"
+#line 199 "scanner.l"
{ BEGIN SCRIPTBLOCK; }
YY_BREAK
case 17:
/* rule 17 can match eol */
YY_RULE_SETUP
-#line 131 "scanner.l"
+#line 200 "scanner.l"
{ scanctx_append_string(yyextra, yytext); }
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 132 "scanner.l"
+#line 201 "scanner.l"
{
yylval->sval = scanctx_take_string(yyextra);
BEGIN INITIAL;
@@ -1070,28 +1389,28 @@ YY_RULE_SETUP
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 138 "scanner.l"
+#line 207 "scanner.l"
{ BEGIN INCLUDE; }
YY_BREAK
case 20:
/* rule 20 can match eol */
YY_RULE_SETUP
-#line 139 "scanner.l"
+#line 208 "scanner.l"
{ scanctx_append_string(yyextra, yytext); }
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 140 "scanner.l"
+#line 209 "scanner.l"
{ scanctx_append_string(yyextra, "\\"); }
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 141 "scanner.l"
+#line 210 "scanner.l"
{ scanctx_append_string(yyextra, "\""); }
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 142 "scanner.l"
+#line 211 "scanner.l"
{
const char *error;
FILE *fp = scanctx_push_include(yyextra,
@@ -1100,8 +1419,8 @@ YY_RULE_SETUP
if(fp)
{
yyin = fp;
- libconfig_yy_switch_to_buffer(
- libconfig_yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner),
+ yy_switch_to_buffer(
+ yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner),
yyscanner);
}
else
@@ -1119,129 +1438,130 @@ YY_RULE_SETUP
case 24:
/* rule 24 can match eol */
YY_RULE_SETUP
-#line 166 "scanner.l"
+#line 235 "scanner.l"
{ /* ignore */ }
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 167 "scanner.l"
+#line 236 "scanner.l"
{ /* ignore */ }
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 169 "scanner.l"
+#line 238 "scanner.l"
{ return(TOK_EQUALS); }
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 170 "scanner.l"
+#line 239 "scanner.l"
{ return(TOK_COMMA); }
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 171 "scanner.l"
+#line 240 "scanner.l"
{ return(TOK_GROUP_START); }
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 172 "scanner.l"
+#line 241 "scanner.l"
{ return(TOK_GROUP_END); }
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 173 "scanner.l"
+#line 242 "scanner.l"
{ yylval->ival = 1; return(TOK_BOOLEAN); }
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 174 "scanner.l"
+#line 243 "scanner.l"
{ yylval->ival = 0; return(TOK_BOOLEAN); }
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 175 "scanner.l"
+#line 244 "scanner.l"
{ yylval->fval = atof(yytext); return(TOK_FLOAT); }
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 176 "scanner.l"
-{
- long long llval;
- llval = atoll(yytext);
- if((llval < INT_MIN) || (llval > INT_MAX))
- {
- yylval->llval = llval;
- return(TOK_INTEGER64);
- }
- else
- {
- yylval->ival = (int)llval;
- return(TOK_INTEGER);
- }
- }
+#line 245 "scanner.l"
+{ yylval->ival = (int)fromdec(yytext); return TOK_INTEGER; }
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 190 "scanner.l"
-{ yylval->llval = atoll(yytext); return(TOK_INTEGER64); }
+#line 246 "scanner.l"
+{ yylval->llval = fromdec(yytext); return TOK_INTEGER64; }
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 191 "scanner.l"
-{
- unsigned long ulval = strtoul(yytext, NULL, 16);
- if (ulval > INT32_MAX)
- ulval &= INT32_MAX;
- yylval->ival = (int)ulval;
- return(TOK_HEX);
- }
+#line 247 "scanner.l"
+{ yylval->ival = (int)fromhex(yytext); return TOK_HEX; }
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 198 "scanner.l"
-{ yylval->llval = fromhex(yytext); return(TOK_HEX64); }
+#line 248 "scanner.l"
+{ yylval->llval = fromhex(yytext); return TOK_HEX64; }
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 199 "scanner.l"
-{ yylval->sval = yytext; return(TOK_NAME); }
+#line 249 "scanner.l"
+{ yylval->ival = (int)frombin(yytext); return TOK_BIN; }
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 200 "scanner.l"
-{ return(TOK_ARRAY_START); }
+#line 250 "scanner.l"
+{ yylval->llval = frombin(yytext); return TOK_BIN64; }
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 201 "scanner.l"
-{ return(TOK_ARRAY_END); }
+#line 251 "scanner.l"
+{ yylval->ival = (int)fromoct(yytext); return TOK_OCT; }
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 202 "scanner.l"
-{ return(TOK_LIST_START); }
+#line 252 "scanner.l"
+{ yylval->llval = fromoct(yytext); return TOK_OCT64; }
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 203 "scanner.l"
-{ return(TOK_LIST_END); }
+#line 253 "scanner.l"
+{ yylval->sval = yytext; return(TOK_NAME); }
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 204 "scanner.l"
-{ return(TOK_SEMICOLON); }
+#line 254 "scanner.l"
+{ return(TOK_ARRAY_START); }
YY_BREAK
case 43:
+YY_RULE_SETUP
+#line 255 "scanner.l"
+{ return(TOK_ARRAY_END); }
+ YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 256 "scanner.l"
+{ return(TOK_LIST_START); }
+ YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 257 "scanner.l"
+{ return(TOK_LIST_END); }
+ YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 258 "scanner.l"
+{ return(TOK_SEMICOLON); }
+ YY_BREAK
+case 47:
*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
yyg->yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 205 "scanner.l"
+#line 259 "scanner.l"
{ /* ignore */ }
YY_BREAK
-case 44:
+case 48:
YY_RULE_SETUP
-#line 206 "scanner.l"
+#line 260 "scanner.l"
{ return(TOK_GARBAGE); }
YY_BREAK
case YY_STATE_EOF(INITIAL):
@@ -1249,25 +1569,25 @@ case YY_STATE_EOF(COMMENT):
case YY_STATE_EOF(STRING):
case YY_STATE_EOF(INCLUDE):
case YY_STATE_EOF(SCRIPTBLOCK):
-#line 208 "scanner.l"
+#line 262 "scanner.l"
{
YY_BUFFER_STATE buf = (YY_BUFFER_STATE)scanctx_pop_include(
yyextra);
if(buf)
{
- libconfig_yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner);
- libconfig_yy_switch_to_buffer(buf, yyscanner);
+ yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner);
+ yy_switch_to_buffer(buf, yyscanner);
}
else
yyterminate();
}
YY_BREAK
-case 45:
+case 49:
YY_RULE_SETUP
-#line 219 "scanner.l"
+#line 273 "scanner.l"
ECHO;
YY_BREAK
-#line 1269 "scanner.c"
+#line 1590 "scanner.c"
case YY_END_OF_BUFFER:
{
@@ -1283,7 +1603,7 @@ ECHO;
/* We're scanning a new file or input source. It's
* possible that this happened because the user
* just pointed yyin at a new source and called
- * libconfig_yylex(). If so, then we have to assure
+ * yylex(). If so, then we have to assure
* consistency between YY_CURRENT_BUFFER and our
* globals. Here is the right place to do so, because
* this is the first action (other than possibly a
@@ -1344,7 +1664,7 @@ ECHO;
{
yyg->yy_did_buffer_switch_on_eof = 0;
- if ( libconfig_yywrap(yyscanner ) )
+ if ( yywrap( yyscanner ) )
{
/* Note: because we've taken care in
* yy_get_next_buffer() to have set up
@@ -1398,7 +1718,7 @@ ECHO;
} /* end of action switch */
} /* end of scanning one token */
} /* end of user's declarations */
-} /* end of libconfig_yylex */
+} /* end of yylex */
/* yy_get_next_buffer - try to read in a new buffer
*
@@ -1477,7 +1797,8 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
b->yy_ch_buf = (char *)
/* Include room in for 2 EOB chars. */
- libconfig_yyrealloc((void *) b->yy_ch_buf,(yy_size_t) (b->yy_buf_size + 2) ,yyscanner );
+ yyrealloc( (void *) b->yy_ch_buf,
+ (yy_size_t) (b->yy_buf_size + 2) , yyscanner );
}
else
/* Can't grow it, we don't own it. */
@@ -1509,7 +1830,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
if ( number_to_move == YY_MORE_ADJ )
{
ret_val = EOB_ACT_END_OF_FILE;
- libconfig_yyrestart(yyin ,yyscanner);
+ yyrestart( yyin , yyscanner);
}
else
@@ -1526,9 +1847,12 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
/* Extend the array by 50%, plus the number we really need. */
int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) libconfig_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,(yy_size_t) new_size ,yyscanner );
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
+ (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner );
if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ /* "- 2" to take care of EOB's */
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
}
yyg->yy_n_chars += number_to_move;
@@ -1562,7 +1886,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 123 )
+ if ( yy_current_state >= 134 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1591,11 +1915,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 123 )
+ if ( yy_current_state >= 134 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
- yy_is_jam = (yy_current_state == 122);
+ yy_is_jam = (yy_current_state == 133);
(void)yyg;
return yy_is_jam ? 0 : yy_current_state;
@@ -1647,13 +1971,13 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
*/
/* Reset buffer status. */
- libconfig_yyrestart(yyin ,yyscanner);
+ yyrestart( yyin , yyscanner);
/*FALLTHROUGH*/
case EOB_ACT_END_OF_FILE:
{
- if ( libconfig_yywrap(yyscanner ) )
+ if ( yywrap( yyscanner ) )
return 0;
if ( ! yyg->yy_did_buffer_switch_on_eof )
@@ -1678,7 +2002,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol )
-
+
do{ yylineno++;
yycolumn=0;
}while(0)
@@ -1693,36 +2017,36 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
* @param yyscanner The scanner object.
* @note This function does not reset the start condition to @c INITIAL .
*/
- void libconfig_yyrestart (FILE * input_file , yyscan_t yyscanner)
+ void yyrestart (FILE * input_file , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
if ( ! YY_CURRENT_BUFFER ){
- libconfig_yyensure_buffer_stack (yyscanner);
+ yyensure_buffer_stack (yyscanner);
YY_CURRENT_BUFFER_LVALUE =
- libconfig_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+ yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner);
}
assert(YY_CURRENT_BUFFER != NULL); // Fixes compiler warning -Wnull-dereference on gcc-6 and -O3
- libconfig_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
- libconfig_yy_load_buffer_state(yyscanner );
+ yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner);
+ yy_load_buffer_state( yyscanner );
}
/** Switch to a different input buffer.
* @param new_buffer The new input buffer.
* @param yyscanner The scanner object.
*/
- void libconfig_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
/* TODO. We should be able to replace this entire function body
* with
- * libconfig_yypop_buffer_state();
- * libconfig_yypush_buffer_state(new_buffer);
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
*/
- libconfig_yyensure_buffer_stack (yyscanner);
+ yyensure_buffer_stack (yyscanner);
if ( YY_CURRENT_BUFFER == new_buffer )
return;
@@ -1735,17 +2059,17 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
}
YY_CURRENT_BUFFER_LVALUE = new_buffer;
- libconfig_yy_load_buffer_state(yyscanner );
+ yy_load_buffer_state( yyscanner );
/* We don't actually know whether we did this switch during
- * EOF (libconfig_yywrap()) processing, but the only time this flag
- * is looked at is after libconfig_yywrap() is called, so it's safe
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
* to go ahead and always set it.
*/
yyg->yy_did_buffer_switch_on_eof = 1;
}
-static void libconfig_yy_load_buffer_state (yyscan_t yyscanner)
+static void yy_load_buffer_state (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
@@ -1760,35 +2084,35 @@ static void libconfig_yy_load_buffer_state (yyscan_t yyscanner)
* @param yyscanner The scanner object.
* @return the allocated buffer state.
*/
- YY_BUFFER_STATE libconfig_yy_create_buffer (FILE * file, int size , yyscan_t yyscanner)
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner)
{
YY_BUFFER_STATE b;
- b = (YY_BUFFER_STATE) libconfig_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+ b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner );
if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in libconfig_yy_create_buffer()" );
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
b->yy_buf_size = size;
/* yy_ch_buf has to be 2 characters longer than the size given because
* we need to put in 2 end-of-buffer characters.
*/
- b->yy_ch_buf = (char *) libconfig_yyalloc((yy_size_t) (b->yy_buf_size + 2) ,yyscanner );
+ b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner );
if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in libconfig_yy_create_buffer()" );
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
b->yy_is_our_buffer = 1;
- libconfig_yy_init_buffer(b,file ,yyscanner);
+ yy_init_buffer( b, file , yyscanner);
return b;
}
/** Destroy the buffer.
- * @param b a buffer created with libconfig_yy_create_buffer()
+ * @param b a buffer created with yy_create_buffer()
* @param yyscanner The scanner object.
*/
- void libconfig_yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
+ void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
@@ -1799,28 +2123,28 @@ static void libconfig_yy_load_buffer_state (yyscan_t yyscanner)
YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
if ( b->yy_is_our_buffer )
- libconfig_yyfree((void *) b->yy_ch_buf ,yyscanner );
+ yyfree( (void *) b->yy_ch_buf , yyscanner );
- libconfig_yyfree((void *) b ,yyscanner );
+ yyfree( (void *) b , yyscanner );
}
/* Initializes or reinitializes a buffer.
* This function is sometimes called more than once on the same buffer,
- * such as during a libconfig_yyrestart() or at EOF.
+ * such as during a yyrestart() or at EOF.
*/
- static void libconfig_yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner)
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner)
{
int oerrno = errno;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- libconfig_yy_flush_buffer(b ,yyscanner);
+ yy_flush_buffer( b , yyscanner);
b->yy_input_file = file;
b->yy_fill_buffer = 1;
- /* If b is the current buffer, then libconfig_yy_init_buffer was _probably_
- * called from libconfig_yyrestart() or through yy_get_next_buffer.
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
* In that case, we don't want to reset the lineno or column.
*/
if (b != YY_CURRENT_BUFFER){
@@ -1837,7 +2161,7 @@ static void libconfig_yy_load_buffer_state (yyscan_t yyscanner)
* @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
* @param yyscanner The scanner object.
*/
- void libconfig_yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
+ void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
if ( ! b )
@@ -1858,7 +2182,7 @@ static void libconfig_yy_load_buffer_state (yyscan_t yyscanner)
b->yy_buffer_status = YY_BUFFER_NEW;
if ( b == YY_CURRENT_BUFFER )
- libconfig_yy_load_buffer_state(yyscanner );
+ yy_load_buffer_state( yyscanner );
}
/** Pushes the new state onto the stack. The new state becomes
@@ -1867,15 +2191,15 @@ static void libconfig_yy_load_buffer_state (yyscan_t yyscanner)
* @param new_buffer The new state.
* @param yyscanner The scanner object.
*/
-void libconfig_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
if (new_buffer == NULL)
return;
- libconfig_yyensure_buffer_stack(yyscanner);
+ yyensure_buffer_stack(yyscanner);
- /* This block is copied from libconfig_yy_switch_to_buffer. */
+ /* This block is copied from yy_switch_to_buffer. */
if ( YY_CURRENT_BUFFER )
{
/* Flush out information for old buffer. */
@@ -1889,8 +2213,8 @@ void libconfig_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscan
yyg->yy_buffer_stack_top++;
YY_CURRENT_BUFFER_LVALUE = new_buffer;
- /* copied from libconfig_yy_switch_to_buffer. */
- libconfig_yy_load_buffer_state(yyscanner );
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( yyscanner );
yyg->yy_did_buffer_switch_on_eof = 1;
}
@@ -1898,19 +2222,19 @@ void libconfig_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscan
* The next element becomes the new top.
* @param yyscanner The scanner object.
*/
-void libconfig_yypop_buffer_state (yyscan_t yyscanner)
+void yypop_buffer_state (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
if (!YY_CURRENT_BUFFER)
return;
- libconfig_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
+ yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner);
YY_CURRENT_BUFFER_LVALUE = NULL;
if (yyg->yy_buffer_stack_top > 0)
--yyg->yy_buffer_stack_top;
if (YY_CURRENT_BUFFER) {
- libconfig_yy_load_buffer_state(yyscanner );
+ yy_load_buffer_state( yyscanner );
yyg->yy_did_buffer_switch_on_eof = 1;
}
}
@@ -1918,7 +2242,7 @@ void libconfig_yypop_buffer_state (yyscan_t yyscanner)
/* Allocates the stack if it does not exist.
* Guarantees space for at least one push.
*/
-static void libconfig_yyensure_buffer_stack (yyscan_t yyscanner)
+static void yyensure_buffer_stack (yyscan_t yyscanner)
{
yy_size_t num_to_alloc;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
@@ -1930,14 +2254,14 @@ static void libconfig_yyensure_buffer_stack (yyscan_t yyscanner)
* immediate realloc on the next call.
*/
num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
- yyg->yy_buffer_stack = (struct yy_buffer_state**)libconfig_yyalloc
+ yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc
(num_to_alloc * sizeof(struct yy_buffer_state*)
, yyscanner);
if ( ! yyg->yy_buffer_stack )
- YY_FATAL_ERROR( "out of dynamic memory in libconfig_yyensure_buffer_stack()" );
-
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-
+
yyg->yy_buffer_stack_max = num_to_alloc;
yyg->yy_buffer_stack_top = 0;
return;
@@ -1949,12 +2273,12 @@ static void libconfig_yyensure_buffer_stack (yyscan_t yyscanner)
yy_size_t grow_size = 8 /* arbitrary grow size */;
num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
- yyg->yy_buffer_stack = (struct yy_buffer_state**)libconfig_yyrealloc
+ yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc
(yyg->yy_buffer_stack,
num_to_alloc * sizeof(struct yy_buffer_state*)
, yyscanner);
if ( ! yyg->yy_buffer_stack )
- YY_FATAL_ERROR( "out of dynamic memory in libconfig_yyensure_buffer_stack()" );
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
/* zero only the new slots.*/
memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
@@ -1966,9 +2290,9 @@ static void libconfig_yyensure_buffer_stack (yyscan_t yyscanner)
* @param base the character buffer
* @param size the size in bytes of the character buffer
* @param yyscanner The scanner object.
- * @return the newly allocated buffer state object.
+ * @return the newly allocated buffer state object.
*/
-YY_BUFFER_STATE libconfig_yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner)
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner)
{
YY_BUFFER_STATE b;
@@ -1978,9 +2302,9 @@ YY_BUFFER_STATE libconfig_yy_scan_buffer (char * base, yy_size_t size , yyscan
/* They forgot to leave room for the EOB's. */
return NULL;
- b = (YY_BUFFER_STATE) libconfig_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+ b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner );
if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in libconfig_yy_scan_buffer()" );
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */
b->yy_buf_pos = b->yy_ch_buf = base;
@@ -1992,33 +2316,33 @@ YY_BUFFER_STATE libconfig_yy_scan_buffer (char * base, yy_size_t size , yyscan
b->yy_fill_buffer = 0;
b->yy_buffer_status = YY_BUFFER_NEW;
- libconfig_yy_switch_to_buffer(b ,yyscanner );
+ yy_switch_to_buffer( b , yyscanner );
return b;
}
-/** Setup the input buffer state to scan a string. The next call to libconfig_yylex() will
+/** Setup the input buffer state to scan a string. The next call to yylex() will
* scan from a @e copy of @a str.
* @param yystr a NUL-terminated string to scan
* @param yyscanner The scanner object.
* @return the newly allocated buffer state object.
* @note If you want to scan bytes that may contain NUL values, then use
- * libconfig_yy_scan_bytes() instead.
+ * yy_scan_bytes() instead.
*/
-YY_BUFFER_STATE libconfig_yy_scan_string (const char * yystr , yyscan_t yyscanner)
+YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner)
{
- return libconfig_yy_scan_bytes(yystr,(int) strlen(yystr) ,yyscanner);
+ return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner);
}
-/** Setup the input buffer state to scan the given bytes. The next call to libconfig_yylex() will
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
* scan from a @e copy of @a bytes.
* @param yybytes the byte buffer to scan
* @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
* @param yyscanner The scanner object.
* @return the newly allocated buffer state object.
*/
-YY_BUFFER_STATE libconfig_yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner)
+YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner)
{
YY_BUFFER_STATE b;
char *buf;
@@ -2027,18 +2351,18 @@ YY_BUFFER_STATE libconfig_yy_scan_bytes (const char * yybytes, int _yybytes_le
/* Get memory for full buffer, including space for trailing EOB's. */
n = (yy_size_t) (_yybytes_len + 2);
- buf = (char *) libconfig_yyalloc(n ,yyscanner );
+ buf = (char *) yyalloc( n , yyscanner );
if ( ! buf )
- YY_FATAL_ERROR( "out of dynamic memory in libconfig_yy_scan_bytes()" );
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
for ( i = 0; i < _yybytes_len; ++i )
buf[i] = yybytes[i];
buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
- b = libconfig_yy_scan_buffer(buf,n ,yyscanner);
+ b = yy_scan_buffer( buf, n , yyscanner);
if ( ! b )
- YY_FATAL_ERROR( "bad buffer in libconfig_yy_scan_bytes()" );
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
/* It's okay to grow etc. this buffer, and we should throw it
* away when we're done.
@@ -2056,7 +2380,7 @@ static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
(void)yyg;
- (void) fprintf( stderr, "%s\n", msg );
+ fprintf( stderr, "%s\n", msg );
exit( YY_EXIT_FAILURE );
}
@@ -2082,7 +2406,7 @@ static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner)
/** Get the user-defined data for this scanner.
* @param yyscanner The scanner object.
*/
-YY_EXTRA_TYPE libconfig_yyget_extra (yyscan_t yyscanner)
+YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yyextra;
@@ -2091,10 +2415,10 @@ YY_EXTRA_TYPE libconfig_yyget_extra (yyscan_t yyscanner)
/** Get the current line number.
* @param yyscanner The scanner object.
*/
-int libconfig_yyget_lineno (yyscan_t yyscanner)
+int yyget_lineno (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-
+
if (! YY_CURRENT_BUFFER)
return 0;
@@ -2104,10 +2428,10 @@ int libconfig_yyget_lineno (yyscan_t yyscanner)
/** Get the current column number.
* @param yyscanner The scanner object.
*/
-int libconfig_yyget_column (yyscan_t yyscanner)
+int yyget_column (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-
+
if (! YY_CURRENT_BUFFER)
return 0;
@@ -2117,7 +2441,7 @@ int libconfig_yyget_column (yyscan_t yyscanner)
/** Get the input stream.
* @param yyscanner The scanner object.
*/
-FILE *libconfig_yyget_in (yyscan_t yyscanner)
+FILE *yyget_in (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yyin;
@@ -2126,7 +2450,7 @@ FILE *libconfig_yyget_in (yyscan_t yyscanner)
/** Get the output stream.
* @param yyscanner The scanner object.
*/
-FILE *libconfig_yyget_out (yyscan_t yyscanner)
+FILE *yyget_out (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yyout;
@@ -2135,7 +2459,7 @@ FILE *libconfig_yyget_out (yyscan_t yyscanner)
/** Get the length of the current token.
* @param yyscanner The scanner object.
*/
-int libconfig_yyget_leng (yyscan_t yyscanner)
+int yyget_leng (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yyleng;
@@ -2145,7 +2469,7 @@ int libconfig_yyget_leng (yyscan_t yyscanner)
* @param yyscanner The scanner object.
*/
-char *libconfig_yyget_text (yyscan_t yyscanner)
+char *yyget_text (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yytext;
@@ -2155,7 +2479,7 @@ char *libconfig_yyget_text (yyscan_t yyscanner)
* @param user_defined The data to be associated with this scanner.
* @param yyscanner The scanner object.
*/
-void libconfig_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner)
+void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yyextra = user_defined ;
@@ -2165,13 +2489,13 @@ void libconfig_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner)
* @param _line_number line number
* @param yyscanner The scanner object.
*/
-void libconfig_yyset_lineno (int _line_number , yyscan_t yyscanner)
+void yyset_lineno (int _line_number , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
/* lineno is only valid if an input buffer exists. */
if (! YY_CURRENT_BUFFER )
- YY_FATAL_ERROR( "libconfig_yyset_lineno called with no buffer" );
+ YY_FATAL_ERROR( "yyset_lineno called with no buffer" );
yylineno = _line_number;
}
@@ -2180,13 +2504,13 @@ void libconfig_yyset_lineno (int _line_number , yyscan_t yyscanner)
* @param _column_no column number
* @param yyscanner The scanner object.
*/
-void libconfig_yyset_column (int _column_no , yyscan_t yyscanner)
+void yyset_column (int _column_no , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
/* column is only valid if an input buffer exists. */
if (! YY_CURRENT_BUFFER )
- YY_FATAL_ERROR( "libconfig_yyset_column called with no buffer" );
+ YY_FATAL_ERROR( "yyset_column called with no buffer" );
yycolumn = _column_no;
}
@@ -2195,27 +2519,27 @@ void libconfig_yyset_column (int _column_no , yyscan_t yyscanner)
* input buffer.
* @param _in_str A readable stream.
* @param yyscanner The scanner object.
- * @see libconfig_yy_switch_to_buffer
+ * @see yy_switch_to_buffer
*/
-void libconfig_yyset_in (FILE * _in_str , yyscan_t yyscanner)
+void yyset_in (FILE * _in_str , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yyin = _in_str ;
}
-void libconfig_yyset_out (FILE * _out_str , yyscan_t yyscanner)
+void yyset_out (FILE * _out_str , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yyout = _out_str ;
}
-int libconfig_yyget_debug (yyscan_t yyscanner)
+int yyget_debug (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yy_flex_debug;
}
-void libconfig_yyset_debug (int _bdebug , yyscan_t yyscanner)
+void yyset_debug (int _bdebug , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yy_flex_debug = _bdebug ;
@@ -2223,13 +2547,13 @@ void libconfig_yyset_debug (int _bdebug , yyscan_t yyscanner)
/* Accessor methods for yylval and yylloc */
-YYSTYPE * libconfig_yyget_lval (yyscan_t yyscanner)
+YYSTYPE * yyget_lval (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yylval;
}
-void libconfig_yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner)
+void yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yylval = yylval_param;
@@ -2237,18 +2561,18 @@ void libconfig_yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner)
/* User-visible API */
-/* libconfig_yylex_init is special because it creates the scanner itself, so it is
+/* yylex_init is special because it creates the scanner itself, so it is
* the ONLY reentrant function that doesn't take the scanner as the last argument.
* That's why we explicitly handle the declaration, instead of using our macros.
*/
-int libconfig_yylex_init(yyscan_t* ptr_yy_globals)
+int yylex_init(yyscan_t* ptr_yy_globals)
{
if (ptr_yy_globals == NULL){
errno = EINVAL;
return 1;
}
- *ptr_yy_globals = (yyscan_t) libconfig_yyalloc ( sizeof( struct yyguts_t ), NULL );
+ *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL );
if (*ptr_yy_globals == NULL){
errno = ENOMEM;
@@ -2261,37 +2585,37 @@ int libconfig_yylex_init(yyscan_t* ptr_yy_globals)
return yy_init_globals ( *ptr_yy_globals );
}
-/* libconfig_yylex_init_extra has the same functionality as libconfig_yylex_init, but follows the
+/* yylex_init_extra has the same functionality as yylex_init, but follows the
* convention of taking the scanner as the last argument. Note however, that
* this is a *pointer* to a scanner, as it will be allocated by this call (and
* is the reason, too, why this function also must handle its own declaration).
- * The user defined value in the first argument will be available to libconfig_yyalloc in
+ * The user defined value in the first argument will be available to yyalloc in
* the yyextra field.
*/
-int libconfig_yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
+int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals )
{
struct yyguts_t dummy_yyguts;
- libconfig_yyset_extra (yy_user_defined, &dummy_yyguts);
+ yyset_extra (yy_user_defined, &dummy_yyguts);
if (ptr_yy_globals == NULL){
errno = EINVAL;
return 1;
}
-
- *ptr_yy_globals = (yyscan_t) libconfig_yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
-
+
+ *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
+
if (*ptr_yy_globals == NULL){
errno = ENOMEM;
return 1;
}
-
+
/* By setting to 0xAA, we expose bugs in
yy_init_globals. Leave at 0x00 for releases. */
memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
-
- libconfig_yyset_extra (yy_user_defined, *ptr_yy_globals);
-
+
+ yyset_extra (yy_user_defined, *ptr_yy_globals);
+
return yy_init_globals ( *ptr_yy_globals );
}
@@ -2299,7 +2623,7 @@ static int yy_init_globals (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
/* Initialization is the same as for the non-reentrant scanner.
- * This function is called from libconfig_yylex_destroy(), so don't allocate here.
+ * This function is called from yylex_destroy(), so don't allocate here.
*/
yyg->yy_buffer_stack = NULL;
@@ -2323,37 +2647,37 @@ static int yy_init_globals (yyscan_t yyscanner)
#endif
/* For future reference: Set errno on error, since we are called by
- * libconfig_yylex_init()
+ * yylex_init()
*/
return 0;
}
-/* libconfig_yylex_destroy is for both reentrant and non-reentrant scanners. */
-int libconfig_yylex_destroy (yyscan_t yyscanner)
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
/* Pop the buffer stack, destroying each element. */
while(YY_CURRENT_BUFFER){
- libconfig_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
+ yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner );
YY_CURRENT_BUFFER_LVALUE = NULL;
- libconfig_yypop_buffer_state(yyscanner);
+ yypop_buffer_state(yyscanner);
}
/* Destroy the stack itself. */
- libconfig_yyfree(yyg->yy_buffer_stack ,yyscanner);
+ yyfree(yyg->yy_buffer_stack , yyscanner);
yyg->yy_buffer_stack = NULL;
/* Destroy the start condition stack. */
- libconfig_yyfree(yyg->yy_start_stack ,yyscanner );
+ yyfree( yyg->yy_start_stack , yyscanner );
yyg->yy_start_stack = NULL;
/* Reset the globals. This is important in a non-reentrant scanner so the next time
- * libconfig_yylex() is called, initialization will occur. */
+ * yylex() is called, initialization will occur. */
yy_init_globals( yyscanner);
/* Destroy the main struct (reentrant only). */
- libconfig_yyfree ( yyscanner , yyscanner );
+ yyfree ( yyscanner , yyscanner );
yyscanner = NULL;
return 0;
}
@@ -2385,14 +2709,14 @@ static int yy_flex_strlen (const char * s , yyscan_t yyscanner)
}
#endif
-void *libconfig_yyalloc (yy_size_t size , yyscan_t yyscanner)
+void *yyalloc (yy_size_t size , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
(void)yyg;
return malloc(size);
}
-void *libconfig_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
+void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
(void)yyg;
@@ -2407,13 +2731,13 @@ void *libconfig_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
return realloc(ptr, size);
}
-void libconfig_yyfree (void * ptr , yyscan_t yyscanner)
+void yyfree (void * ptr , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
(void)yyg;
- free( (char *) ptr ); /* see libconfig_yyrealloc() for (char *) cast */
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
}
#define YYTABLES_NAME "yytables"
-#line 219 "scanner.l"
+#line 273 "scanner.l"
diff --git a/3rdparty/libconfig/scanner.h b/3rdparty/libconfig/scanner.h
index c1d295594..92e55d04b 100644
--- a/3rdparty/libconfig/scanner.h
+++ b/3rdparty/libconfig/scanner.h
@@ -2,9 +2,9 @@
#define libconfig_yyHEADER_H 1
#define libconfig_yyIN_HEADER 1
-#line 5 "scanner.h"
+#line 6 "scanner.h"
-#line 7 "scanner.h"
+#line 8 "scanner.h"
#define YY_INT_ALIGNED short int
@@ -13,11 +13,233 @@
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 2
+#define YY_FLEX_SUBMINOR_VERSION 4
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
+#ifdef yy_create_buffer
+#define libconfig_yy_create_buffer_ALREADY_DEFINED
+#else
+#define yy_create_buffer libconfig_yy_create_buffer
+#endif
+
+#ifdef yy_delete_buffer
+#define libconfig_yy_delete_buffer_ALREADY_DEFINED
+#else
+#define yy_delete_buffer libconfig_yy_delete_buffer
+#endif
+
+#ifdef yy_scan_buffer
+#define libconfig_yy_scan_buffer_ALREADY_DEFINED
+#else
+#define yy_scan_buffer libconfig_yy_scan_buffer
+#endif
+
+#ifdef yy_scan_string
+#define libconfig_yy_scan_string_ALREADY_DEFINED
+#else
+#define yy_scan_string libconfig_yy_scan_string
+#endif
+
+#ifdef yy_scan_bytes
+#define libconfig_yy_scan_bytes_ALREADY_DEFINED
+#else
+#define yy_scan_bytes libconfig_yy_scan_bytes
+#endif
+
+#ifdef yy_init_buffer
+#define libconfig_yy_init_buffer_ALREADY_DEFINED
+#else
+#define yy_init_buffer libconfig_yy_init_buffer
+#endif
+
+#ifdef yy_flush_buffer
+#define libconfig_yy_flush_buffer_ALREADY_DEFINED
+#else
+#define yy_flush_buffer libconfig_yy_flush_buffer
+#endif
+
+#ifdef yy_load_buffer_state
+#define libconfig_yy_load_buffer_state_ALREADY_DEFINED
+#else
+#define yy_load_buffer_state libconfig_yy_load_buffer_state
+#endif
+
+#ifdef yy_switch_to_buffer
+#define libconfig_yy_switch_to_buffer_ALREADY_DEFINED
+#else
+#define yy_switch_to_buffer libconfig_yy_switch_to_buffer
+#endif
+
+#ifdef yypush_buffer_state
+#define libconfig_yypush_buffer_state_ALREADY_DEFINED
+#else
+#define yypush_buffer_state libconfig_yypush_buffer_state
+#endif
+
+#ifdef yypop_buffer_state
+#define libconfig_yypop_buffer_state_ALREADY_DEFINED
+#else
+#define yypop_buffer_state libconfig_yypop_buffer_state
+#endif
+
+#ifdef yyensure_buffer_stack
+#define libconfig_yyensure_buffer_stack_ALREADY_DEFINED
+#else
+#define yyensure_buffer_stack libconfig_yyensure_buffer_stack
+#endif
+
+#ifdef yylex
+#define libconfig_yylex_ALREADY_DEFINED
+#else
+#define yylex libconfig_yylex
+#endif
+
+#ifdef yyrestart
+#define libconfig_yyrestart_ALREADY_DEFINED
+#else
+#define yyrestart libconfig_yyrestart
+#endif
+
+#ifdef yylex_init
+#define libconfig_yylex_init_ALREADY_DEFINED
+#else
+#define yylex_init libconfig_yylex_init
+#endif
+
+#ifdef yylex_init_extra
+#define libconfig_yylex_init_extra_ALREADY_DEFINED
+#else
+#define yylex_init_extra libconfig_yylex_init_extra
+#endif
+
+#ifdef yylex_destroy
+#define libconfig_yylex_destroy_ALREADY_DEFINED
+#else
+#define yylex_destroy libconfig_yylex_destroy
+#endif
+
+#ifdef yyget_debug
+#define libconfig_yyget_debug_ALREADY_DEFINED
+#else
+#define yyget_debug libconfig_yyget_debug
+#endif
+
+#ifdef yyset_debug
+#define libconfig_yyset_debug_ALREADY_DEFINED
+#else
+#define yyset_debug libconfig_yyset_debug
+#endif
+
+#ifdef yyget_extra
+#define libconfig_yyget_extra_ALREADY_DEFINED
+#else
+#define yyget_extra libconfig_yyget_extra
+#endif
+
+#ifdef yyset_extra
+#define libconfig_yyset_extra_ALREADY_DEFINED
+#else
+#define yyset_extra libconfig_yyset_extra
+#endif
+
+#ifdef yyget_in
+#define libconfig_yyget_in_ALREADY_DEFINED
+#else
+#define yyget_in libconfig_yyget_in
+#endif
+
+#ifdef yyset_in
+#define libconfig_yyset_in_ALREADY_DEFINED
+#else
+#define yyset_in libconfig_yyset_in
+#endif
+
+#ifdef yyget_out
+#define libconfig_yyget_out_ALREADY_DEFINED
+#else
+#define yyget_out libconfig_yyget_out
+#endif
+
+#ifdef yyset_out
+#define libconfig_yyset_out_ALREADY_DEFINED
+#else
+#define yyset_out libconfig_yyset_out
+#endif
+
+#ifdef yyget_leng
+#define libconfig_yyget_leng_ALREADY_DEFINED
+#else
+#define yyget_leng libconfig_yyget_leng
+#endif
+
+#ifdef yyget_text
+#define libconfig_yyget_text_ALREADY_DEFINED
+#else
+#define yyget_text libconfig_yyget_text
+#endif
+
+#ifdef yyget_lineno
+#define libconfig_yyget_lineno_ALREADY_DEFINED
+#else
+#define yyget_lineno libconfig_yyget_lineno
+#endif
+
+#ifdef yyset_lineno
+#define libconfig_yyset_lineno_ALREADY_DEFINED
+#else
+#define yyset_lineno libconfig_yyset_lineno
+#endif
+
+#ifdef yyget_column
+#define libconfig_yyget_column_ALREADY_DEFINED
+#else
+#define yyget_column libconfig_yyget_column
+#endif
+
+#ifdef yyset_column
+#define libconfig_yyset_column_ALREADY_DEFINED
+#else
+#define yyset_column libconfig_yyset_column
+#endif
+
+#ifdef yywrap
+#define libconfig_yywrap_ALREADY_DEFINED
+#else
+#define yywrap libconfig_yywrap
+#endif
+
+#ifdef yyget_lval
+#define libconfig_yyget_lval_ALREADY_DEFINED
+#else
+#define yyget_lval libconfig_yyget_lval
+#endif
+
+#ifdef yyset_lval
+#define libconfig_yyset_lval_ALREADY_DEFINED
+#else
+#define yyset_lval libconfig_yyset_lval
+#endif
+
+#ifdef yyalloc
+#define libconfig_yyalloc_ALREADY_DEFINED
+#else
+#define yyalloc libconfig_yyalloc
+#endif
+
+#ifdef yyrealloc
+#define libconfig_yyrealloc_ALREADY_DEFINED
+#else
+#define yyrealloc libconfig_yyrealloc
+#endif
+
+#ifdef yyfree
+#define libconfig_yyfree_ALREADY_DEFINED
+#else
+#define yyfree libconfig_yyfree
+#endif
+
/* First, we deal with platform-specific or compiler-specific issues. */
/* begin standard C headers. */
@@ -88,10 +310,16 @@ typedef unsigned int flex_uint32_t;
#define UINT32_MAX (4294967295U)
#endif
+#ifndef SIZE_MAX
+#define SIZE_MAX (~(size_t)0)
+#endif
+
#endif /* ! C99 */
#endif /* ! FLEXINT_H */
+/* begin standard C++ headers. */
+
/* TODO: this is always defined, so inline it */
#define yyconst const
@@ -181,7 +409,7 @@ struct yy_buffer_state
int yy_bs_lineno; /**< The line count. */
int yy_bs_column; /**< The column count. */
-
+
/* Whether to try to fill the input buffer when we reach the
* end of it.
*/
@@ -192,21 +420,21 @@ struct yy_buffer_state
};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-void libconfig_yyrestart ( FILE *input_file , yyscan_t yyscanner );
-void libconfig_yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
-YY_BUFFER_STATE libconfig_yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner );
-void libconfig_yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
-void libconfig_yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
-void libconfig_yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
-void libconfig_yypop_buffer_state ( yyscan_t yyscanner );
+void yyrestart ( FILE *input_file , yyscan_t yyscanner );
+void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner );
+void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
+void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
+void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
+void yypop_buffer_state ( yyscan_t yyscanner );
-YY_BUFFER_STATE libconfig_yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner );
-YY_BUFFER_STATE libconfig_yy_scan_string ( const char *yy_str , yyscan_t yyscanner );
-YY_BUFFER_STATE libconfig_yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner );
-void *libconfig_yyalloc ( yy_size_t , yyscan_t yyscanner );
-void *libconfig_yyrealloc ( void *, yy_size_t , yyscan_t yyscanner );
-void libconfig_yyfree ( void * , yyscan_t yyscanner );
+void *yyalloc ( yy_size_t , yyscan_t yyscanner );
+void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner );
+void yyfree ( void * , yyscan_t yyscanner );
#define libconfig_yywrap(yyscanner) (/*CONSTCOND*/1)
#define YY_SKIP_YYWRAP
@@ -224,46 +452,46 @@ void libconfig_yyfree ( void * , yyscan_t yyscanner );
#define YY_EXTRA_TYPE struct scan_context *
-int libconfig_yylex_init (yyscan_t* scanner);
+int yylex_init (yyscan_t* scanner);
-int libconfig_yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
+int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
/* Accessor methods to globals.
These are made visible to non-reentrant scanners for convenience. */
-int libconfig_yylex_destroy ( yyscan_t yyscanner );
+int yylex_destroy ( yyscan_t yyscanner );
-int libconfig_yyget_debug ( yyscan_t yyscanner );
+int yyget_debug ( yyscan_t yyscanner );
-void libconfig_yyset_debug ( int debug_flag , yyscan_t yyscanner );
+void yyset_debug ( int debug_flag , yyscan_t yyscanner );
-YY_EXTRA_TYPE libconfig_yyget_extra ( yyscan_t yyscanner );
+YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner );
-void libconfig_yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner );
+void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner );
-FILE *libconfig_yyget_in ( yyscan_t yyscanner );
+FILE *yyget_in ( yyscan_t yyscanner );
-void libconfig_yyset_in ( FILE * _in_str , yyscan_t yyscanner );
+void yyset_in ( FILE * _in_str , yyscan_t yyscanner );
-FILE *libconfig_yyget_out ( yyscan_t yyscanner );
+FILE *yyget_out ( yyscan_t yyscanner );
-void libconfig_yyset_out ( FILE * _out_str , yyscan_t yyscanner );
+void yyset_out ( FILE * _out_str , yyscan_t yyscanner );
- int libconfig_yyget_leng ( yyscan_t yyscanner );
+ int yyget_leng ( yyscan_t yyscanner );
-char *libconfig_yyget_text ( yyscan_t yyscanner );
+char *yyget_text ( yyscan_t yyscanner );
-int libconfig_yyget_lineno ( yyscan_t yyscanner );
+int yyget_lineno ( yyscan_t yyscanner );
-void libconfig_yyset_lineno ( int _line_number , yyscan_t yyscanner );
+void yyset_lineno ( int _line_number , yyscan_t yyscanner );
-int libconfig_yyget_column ( yyscan_t yyscanner );
+int yyget_column ( yyscan_t yyscanner );
-void libconfig_yyset_column ( int _column_no , yyscan_t yyscanner );
+void yyset_column ( int _column_no , yyscan_t yyscanner );
-YYSTYPE * libconfig_yyget_lval ( yyscan_t yyscanner );
+YYSTYPE * yyget_lval ( yyscan_t yyscanner );
-void libconfig_yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner );
+void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner );
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -271,9 +499,9 @@ void libconfig_yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner );
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
-extern "C" int libconfig_yywrap ( yyscan_t yyscanner );
+extern "C" int yywrap ( yyscan_t yyscanner );
#else
-extern int libconfig_yywrap ( yyscan_t yyscanner );
+extern int yywrap ( yyscan_t yyscanner );
#endif
#endif
@@ -310,10 +538,10 @@ static int yy_flex_strlen ( const char * , yyscan_t yyscanner);
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1
-extern int libconfig_yylex \
+extern int yylex \
(YYSTYPE * yylval_param , yyscan_t yyscanner);
-#define YY_DECL int libconfig_yylex \
+#define YY_DECL int yylex \
(YYSTYPE * yylval_param , yyscan_t yyscanner)
#endif /* !YY_DECL */
@@ -331,8 +559,153 @@ extern int libconfig_yylex \
#undef YY_DECL
#endif
-#line 219 "scanner.l"
+#ifndef libconfig_yy_create_buffer_ALREADY_DEFINED
+#undef yy_create_buffer
+#endif
+#ifndef libconfig_yy_delete_buffer_ALREADY_DEFINED
+#undef yy_delete_buffer
+#endif
+#ifndef libconfig_yy_scan_buffer_ALREADY_DEFINED
+#undef yy_scan_buffer
+#endif
+#ifndef libconfig_yy_scan_string_ALREADY_DEFINED
+#undef yy_scan_string
+#endif
+#ifndef libconfig_yy_scan_bytes_ALREADY_DEFINED
+#undef yy_scan_bytes
+#endif
+#ifndef libconfig_yy_init_buffer_ALREADY_DEFINED
+#undef yy_init_buffer
+#endif
+#ifndef libconfig_yy_flush_buffer_ALREADY_DEFINED
+#undef yy_flush_buffer
+#endif
+#ifndef libconfig_yy_load_buffer_state_ALREADY_DEFINED
+#undef yy_load_buffer_state
+#endif
+#ifndef libconfig_yy_switch_to_buffer_ALREADY_DEFINED
+#undef yy_switch_to_buffer
+#endif
+#ifndef libconfig_yypush_buffer_state_ALREADY_DEFINED
+#undef yypush_buffer_state
+#endif
+#ifndef libconfig_yypop_buffer_state_ALREADY_DEFINED
+#undef yypop_buffer_state
+#endif
+#ifndef libconfig_yyensure_buffer_stack_ALREADY_DEFINED
+#undef yyensure_buffer_stack
+#endif
+#ifndef libconfig_yylex_ALREADY_DEFINED
+#undef yylex
+#endif
+#ifndef libconfig_yyrestart_ALREADY_DEFINED
+#undef yyrestart
+#endif
+#ifndef libconfig_yylex_init_ALREADY_DEFINED
+#undef yylex_init
+#endif
+#ifndef libconfig_yylex_init_extra_ALREADY_DEFINED
+#undef yylex_init_extra
+#endif
+#ifndef libconfig_yylex_destroy_ALREADY_DEFINED
+#undef yylex_destroy
+#endif
+#ifndef libconfig_yyget_debug_ALREADY_DEFINED
+#undef yyget_debug
+#endif
+#ifndef libconfig_yyset_debug_ALREADY_DEFINED
+#undef yyset_debug
+#endif
+#ifndef libconfig_yyget_extra_ALREADY_DEFINED
+#undef yyget_extra
+#endif
+#ifndef libconfig_yyset_extra_ALREADY_DEFINED
+#undef yyset_extra
+#endif
+#ifndef libconfig_yyget_in_ALREADY_DEFINED
+#undef yyget_in
+#endif
+#ifndef libconfig_yyset_in_ALREADY_DEFINED
+#undef yyset_in
+#endif
+#ifndef libconfig_yyget_out_ALREADY_DEFINED
+#undef yyget_out
+#endif
+#ifndef libconfig_yyset_out_ALREADY_DEFINED
+#undef yyset_out
+#endif
+#ifndef libconfig_yyget_leng_ALREADY_DEFINED
+#undef yyget_leng
+#endif
+#ifndef libconfig_yyget_text_ALREADY_DEFINED
+#undef yyget_text
+#endif
+#ifndef libconfig_yyget_lineno_ALREADY_DEFINED
+#undef yyget_lineno
+#endif
+#ifndef libconfig_yyset_lineno_ALREADY_DEFINED
+#undef yyset_lineno
+#endif
+#ifndef libconfig_yyget_column_ALREADY_DEFINED
+#undef yyget_column
+#endif
+#ifndef libconfig_yyset_column_ALREADY_DEFINED
+#undef yyset_column
+#endif
+#ifndef libconfig_yywrap_ALREADY_DEFINED
+#undef yywrap
+#endif
+#ifndef libconfig_yyget_lval_ALREADY_DEFINED
+#undef yyget_lval
+#endif
+#ifndef libconfig_yyset_lval_ALREADY_DEFINED
+#undef yyset_lval
+#endif
+#ifndef libconfig_yyget_lloc_ALREADY_DEFINED
+#undef yyget_lloc
+#endif
+#ifndef libconfig_yyset_lloc_ALREADY_DEFINED
+#undef yyset_lloc
+#endif
+#ifndef libconfig_yyalloc_ALREADY_DEFINED
+#undef yyalloc
+#endif
+#ifndef libconfig_yyrealloc_ALREADY_DEFINED
+#undef yyrealloc
+#endif
+#ifndef libconfig_yyfree_ALREADY_DEFINED
+#undef yyfree
+#endif
+#ifndef libconfig_yytext_ALREADY_DEFINED
+#undef yytext
+#endif
+#ifndef libconfig_yyleng_ALREADY_DEFINED
+#undef yyleng
+#endif
+#ifndef libconfig_yyin_ALREADY_DEFINED
+#undef yyin
+#endif
+#ifndef libconfig_yyout_ALREADY_DEFINED
+#undef yyout
+#endif
+#ifndef libconfig_yy_flex_debug_ALREADY_DEFINED
+#undef yy_flex_debug
+#endif
+#ifndef libconfig_yylineno_ALREADY_DEFINED
+#undef yylineno
+#endif
+#ifndef libconfig_yytables_fload_ALREADY_DEFINED
+#undef yytables_fload
+#endif
+#ifndef libconfig_yytables_destroy_ALREADY_DEFINED
+#undef yytables_destroy
+#endif
+#ifndef libconfig_yyTABLES_NAME_ALREADY_DEFINED
+#undef yyTABLES_NAME
+#endif
+
+#line 273 "scanner.l"
-#line 336 "scanner.h"
+#line 710 "scanner.h"
#undef libconfig_yyIN_HEADER
#endif /* libconfig_yyHEADER_H */
diff --git a/3rdparty/libconfig/wincompat.h b/3rdparty/libconfig/wincompat.h
index f0719ea5f..cceb6f866 100644
--- a/3rdparty/libconfig/wincompat.h
+++ b/3rdparty/libconfig/wincompat.h
@@ -60,6 +60,8 @@
#define INT64_HEX_FMT "%I64X"
+#define INT64_OCT_FMT "%I64o"
+
#define FILE_SEPARATOR "\\"
#else /* defined(WIN32) || defined(__MINGW32__) */
@@ -69,6 +71,8 @@
#define INT64_HEX_FMT "%llX"
+#define INT64_OCT_FMT "%llo"
+
#define FILE_SEPARATOR "/"
#endif /* defined(WIN32) || defined(__MINGW32__) */
diff --git a/AUTHORS b/AUTHORS
index 73fbbaa27..f51704d4b 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,3 +1,224 @@
+Hercules/RAthena contributors/developers
+
+ai4rei <ai4rei@users.noreply.github.com>
+Akkarinage <mike.langford@live.co.uk>
+akrus <akrus@flygroup.st>
+akshat157 <ancientfuture1337@gmail.com>
+Alexander Kozlov <landergate@landergate.com>
+Alige <gauvain.dauchy@free.fr>
+Amir El Sayed <aes@basecom.de>
+Ancyker <ancyker@gmail.com>
+Andrei Karas <akaras@inbox.ru>
+Angelmelody <Angelmelody@gmail.com>
+Angelmelody <cutepeipei@hotmail.com.tw>
+AnnieRuru <jeankofannie2@gmail.com>
+AnnieRuru <jeankof@ymail.com>
+Asheraf <Asheraf@users.noreply.github.com>
+Atemo <capucrath@gmail.com>
+AtlantisRO <atlas@atlantis-ro.net>
+BinaryCrochet <43975470+BinaryCrochet@users.noreply.github.com>
+blacksirius <fw@f-ws.de>
+brianluau <brianluau@users.noreply.github.com>
+CairoLee <cairoliyu@gmail.com>
+calciumkid <harrison@isabarwon.com>
+cannelle <cannelle@users.noreply.github.com>
+cannelle <starfish2700@gmail.com>
+Carlos <carloshlfzanon@gmail.com>
+Carlos Henrique <carloshlfzanon@gmail.com>
+Christian <txandy@gmail.com>
+csnv <ctt@csnv.es>
+daegaladh <Daegaladh@users.noreply.github.com>
+danieldpl <56430929+danieldpl@users.noreply.github.com>
+Darren <darrensapalo@users.noreply.github.com>
+dastgir <dastgirp@gmail.com>
+Dastgir <dastgirp@gmail.com>
+dastgirpojee <dastgirp@gmail.com>
+Dastgir Pojee <dastgirp@gmail.com>
+Earisu <bruant.bastien@gmail.com>
+Edwin <edwin@yohanesedwin.com>
+Emistry <equinox1991@gmail.com>
+Emistry <Equinox1991@gmail.com>
+Emistry Haoyan <equinox1991@gmail.com>
+Emistry Haoyan <Equinox1991@gmail.com>
+epuncker <gm.perflex@gmail.com>
+EPuncker <gm.perflex@gmail.com>
+Er_Maqui <er_maqui@darkbolt.net>
+Euphy <euphy@rathena.org>
+euphyy <euphy@rathena.org>
+Evil Puncker <gm.perflex@gmail.com>
+EyesOfAHawk <blackoutro2006@gmail.com>
+Fisune <fisuned@gmail.com>
+flaviojs2005 <flaviojs2005@gmail.com>
+flaviojs <flaviojs2005@gmail.com>
+FlavioJS <flaviojs2005@gmail.com>
+Flipp <mysteriousragnarok@hotmail.com>
+Florian Wilkemeyer <fw@f-ws.de>
+FreddieFatso <slg@xyz.de>
+Frost <jedzkie13@rocketmail.com>
+Gabriel Mejia <elgartoinf@gmail.com>
+GammCrucis <HaxD64@live.ca>
+Gde Mahardhikha Satrigraha <gde.satrigraha@gmail.com>
+Geniks <geniks34@gmail.com>
+gepard1984 <piotr.halaczkiewicz@gmail.com>
+Gepard <piotr.halaczkiewicz@gmail.com>
+glighta <lightaisme@gmail.com>
+GmOcean <hyperassassin@gmail.com>
+greenboxal2 <greenboxal@gmail.com>
+GrumpyLittlePanda <samuli.vaara@yahoo.com>
+Guilherme G. Menaldo <guilherme.menaldo@outlook.com>
+Guilherme G. M <guilherme.menaldo@outlook.com>
+Guilherme Guiguer Menaldo <guilherme.menaldo@outlook.com>
+Guilherme <guilherme_mith@hotmail.com>
+Guilherme Menaldo <guilherme.menaldo@outlook.com>
+gumi <git@gumi.ca>
+Habilya <ciuvilin.co@gmail.com>
+Habilya <hercuser@prdcrazyserver>
+Happy <markaizer@gmail.com>
+Haru <haru@dotalux.com>
+Haruna <haru@dotalux.com>
+hemagx <ibrahem.h.basyone@gmail.com>
+HerculesUser <Hercules@mail.com>
+Hercules.ws <dev@herc.ws>
+Ibrahem Hossam <ibrahem.h.basyone@gmail.com>
+Ibrahem Zidan <brahem@aotsw.com>
+Ibrahim Hossam <ibrahem.h.basyone@gmail.com>
+Ibrahim Zidan <brahem@aotsw.com>
+inhyositsu <inhyositsu@gmail.com>
+Inzianity <inzianity@gmail.com>
+jaBote <jaBote@fake-emails-rock.com>
+jaBote <jaBote@users.noreply.github.com>
+jaBote <javote91@hotmail.com>
+jaBote <j@bot.e>
+Jackson <chadfield.jackson@gmail.com>
+Jedzkie <jedzkie13@rocketmail.com>
+Jenkijo <jenkijo@hrzn.community>
+Jesusaves <jesusalva@themanaworld.org>
+jmanfffreak <jmish1987@gmail.com>
+Jônatas Andreta <jonataandretta@hotmail.com>
+Jorge C <ctt@csnv.es>
+Jose Luis Rivera Flores <jose-pro_h4kr@hotmail.com>
+j-tkay <joseph.tk.ea@gmail.com>
+Kenpachi <Kenpachi.Developer@gmx.de>
+Kerubael <keru@ro-mina.net>
+KirieZ <guilherme_kiriez@hotmail.com>
+KirieZ <guilherme.menaldo@outlook.com>
+kisuka <kisuka@kisuka.com>
+Kisuka <kisuka@kisuka.com>
+Kolkka <lmiranda@lumigo.net>
+Kpy! <ouroboros.ai@gmail.com>
+landergate <landergate@landergate.com>
+lemongrass3110 <lemongrass@kstp.at>
+Lemongrass3110 <lemongrass@kstp.at>
+Leo Pflug <skyleo@skyleo.de>
+linton-dawson <pushkarkukde@gmail.com>
+LiYu <cairoliyu@gmail.com>
+louisplag <42522191+louisplag@users.noreply.github.com>
+Lucas Brito <lucasljsb@gmail.com>
+M45T3Ryu <jose-pro_h4kr@hotmail.com>
+malufett <malufett.eat.my.binaries@gmail.com>
+maqc1 <alex--223@hotmail.com>
+Marcelo Liberato <marceloll@outlook.com>
+Mark Hester <Marky360@live.ie>
+marky291 <Marky360@live.ie>
+Marvin Lamart <m.lamart@agence-passerelle.com>
+masao87 <masao@gmx.ch>
+Masao87 <masao@gmx.ch>
+Masao <masao@gmx.ch>
+MasterOfMuppets <masterofmuppets89@gmail.com>
+Matej Pristak <matej.pristak@gmail.com>
+Matheus Macabu <mkbu95@gmail.com>
+Mathy <MathyM@users.noreply.github.com>
+Matias <matiassw@gmail.com>
+Maytichai Saowa <nightcoremax@gmail.com>
+mekolat <git@gumi.ca>
+Mhalicot <sevenzz23@yahoo.com>
+michaelforge <landergate@landergate.com>
+michieru <michieru-kun@hotmail.com>
+Michieru <michieru-kun@hotmail.com>
+Milchdealer <jocker300@hotmail.de>
+Milk <welcomerooot@gmail.com>
+milky-milk <welcomerooot@gmail.com>
+Miniack <Redemer_Braulio@hotmail.com>
+moguri85 <ikke85@gmail.com>
+momacabu <macabu.matheus@gmail.com>
+MordekaiserGod <mordekaiser@iwillgetaproperemail.com>
+MrKeiKun <the.keikun@gmail.com>
+Mr.Postman <MrPostman@windowslive.com>
+Mumbles <datmumbles@icloud.com>
+Mumbles <icelestial@outlook.com>
+Mumbles <mumbles@qt-ro.com>
+Mumbles <mumbles@rhythm.ro>
+Murilo_Bio <murilopereti@gmail.com>
+Murilo Pereti Tavares <murilopereti@gmail.com>
+Mysteries <mysteriousragnarok@hotmail.com>
+Mysterious <mysteriousragnarok@hotmail.com>
+nadiyama <ctt@csnv.es>
+nadiyama <jorgecsnova@gmail.com>
+Nihadm89 <nihadm89@hotmail.com>
+Noil <senpainoil@gmail.com>
+Normynator <Norman.Ziebal@web.de>
+ossi0110 <asmodus1@web.de>
+ossi0110 <maikkempkes@alice.de>
+panikon <panikon@zoho.com>
+Paradox924x <paradox924x@gmail.com>
+Paradox924X <paradox924x@gmail.com>
+Patskie <escalona3413@gmail.com>
+Piotr Hałaczkiewicz <piotr.halaczkiewicz@gmail.com>
+playtester <Kenji.Ito@gmx.de>
+Playtester <Kenji.Ito@gmx.de>
+Poison <poison.lethaliagaming@gmail.com>
+Potte <the.keikun@gmail.com>
+Ragno <gerquicira@hotmail.com>
+Rajat Verma <verma.rajatk@gmail.com>
+Reid <reidyaro@gmail.com>
+Ridley8819 <ridley8819@gmail.com>
+Ridley <ridley8819@gmail.com>
+Robbie <crgarvey@gmail.com>
+rud0lp20 <malufett.eat.my.binaries@gmail.com>
+sagunkho <sagunkho@hotmail.com>
+SagunKho <sagunkho@hotmail.com>
+SamuelHercules <exhilaratero@gmail.com>
+seifert10 <luis.seifert@gmail.com>
+sevenzz23 <sevenzz23@yahoo.com>
+Shaktoh <shakto@hotmail.fr>
+shenhuyong <shenhuyong@hotmail.com>
+shennetsind <ind@henn.et>
+Shido <the.keikun@gmail.com>
+Shizuke <matiasdvt@hotmail.com>
+sigtus <vantimothy@openmailbox.org>
+sirius <fw@f-ws.de>
+Sirius <zopokx@gmail.com>
+skyleo <leo-pflug@web.de>
+skyleo <skyleo@skyleo.de>
+smokexyz <sagunkho@hotmail.com>
+Smokexyz <sagunkho@hotmail.com>
+Streusel <streusel@gravity.co.kr>
+Susu <bruant.bastien@gmail.com>
+Susu <susu-@live.fr>
+Taylor Locke <kisuka@kisuka.com>
+TeMPlatonic <gerquicira@hotmail.com>
+themon <themon1666@gmail.com>
+Thibault Payet <monwarez@gmail.com>
+trojal <trojal@gmail.com>
+Trojal <trojal@gmail.com>
+tungsinpei <sinpeiton@hotmail.com>
+TungSinpei <TungSinpei@hotmail.com>
+ultramage <umage@netvor.sk>
+Unknown <nightcoremax@gmail.com>
+Victor <victor.lombardi@insa-rouen.fr>
+Vincent Thibault <vthibault.mobile@gmail.com>
+Wolf <vitinho.senos@live.com>
+xantara <missxantara@gmail.com>
+Xantara <missxantara@gmail.com>
+Xavier RENE-CORAIL <xavier.renecorail@gmail.com>
+Yommy <yomanda@gmail.com>
+Your Name <ibrahem.h.basyone@gmail.com>
+zackdreaver <zackdreaver@gmail.com>
+Zarbony <justonlinegames@web.de>
+
+
+
+
The following people & communities have contributed to the development of Athena through the years.
Thank you for all your hard work.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 718fe09a9..cc07ad060 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,10 +5,326 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project does not adhere to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## [Unreleased]
+
<!--
If you are reading this in a text editor, simply ignore this section
-->
+## [v2020.06.28] `June 28 2020`
+
+### Added
+
+- Added support to display a pet's intimacy in the egg's item description window. (#2781)
+- Added a convenience macro `pc_has_pet()` to check whether a character has a pet. (part of #2781)
+- Added convenience macros `pc_istrading_except_npc()` and `pc_cant_act_except_npc_chat()`. (part of #2775)
+- Added support for `PACKET_ZC_PERSONAL_INFOMATION`, to replace the old custom status messages about rates and penalties. (#2757)
+- Added a new configuration flag `display_rate_messages` (`conf/map/battle/client.conf`) to control whether and when to display the rate modifiers to players. (part of #2757)
+- Added a new configuration flag `display_config_messages` (`conf/map/battle/client.conf`) to control whether and when to display the configuration messages to players as well as which messages to display. By default, now the pet autofeed and guild urgent call setting are also displayed, along with the others. (part of #2757)
+- Added a new configuration flag `send_party_options` (`conf/map/battle/client.conf`) to control whether and when to display the party option messages to players, including some cases (on login, when options are changed, when a party member is added or removed) that were previously not available. (part of #2757)
+- Added a new configuration flag `display_overweight_messages` (`conf/map/battle/client.conf`) to control whether and when to display the overweight notification message to players. (part of #2757)
+- Added support to display the Tip of the Day message box on login. A new configuration flag `show_tip_window` (`conf/map/battle/client.conf`) is provided, in order to disable this feature. (part of #2757)
+- Added missing plugins to the makefiles. (part of #2778)
+- Added missing mobs and items in the pre-re database, necessary for loading custom scripts. (part of #2778)
+- Added support for GitHub actions and added builds to test different flags and compilers and different MySQL/MariaDB versions. (part of #2778 and 9b89425550)
+- Added/updated packets, encryption keys and message tables for clients up to 2020-06-03. (#2763)
+
+### Changed
+
+- Updated the documentation of the `instance_create()` to clarify the type of ID required to create each type of instance. Notably, instances of type `IOT_CHAR` require an account ID and not a character ID. (part of #2732, issue #2326)
+- Updated the instancing system so that the instance information window is also displayed on login for instances of type `IOT_CHAR`, `IOT_PARTY`, `IOT_GUILD`, even if the instance state is `INSTANCE_IDLE`. (part of #2732)
+- Changed the chatroom creation and trade checks to allow dead characters to perform them. A new configuration flag `allowed_actions_when_dead` (`conf/map/battle/player.conf`) is now available, to allow neither, either or both. (#2755, issue #2740)
+- Changed the behavior when a pet's intimacy drops to 0 to immediately remove the pet rather than leaving it free to roam on the map. A new configuration flag `pet_remove_immediately` (`conf/map/battle/pet.conf`) has been added, to restore the old behavior. (part of #2781)
+- Centralized some repeated code related to pet spawning and consolidated the sending of the pet's intimacy and hunger information to the client when appropriate. (part of #2781)
+- Extended the `guild_notice_changemap` configuration flag with more fine grained settings on when to display the guild notice. Note: if you are currently overriding this setting, you'll need to update its value with the new meaning. (part of #2757)
+- Enforced the use of signed characters on platforms where `char` is unsigned. (part of #2778)
+- Travis-CI scripts and configuration updates: (part of #2778)
+ - Improved the build speed by reducing the clone depth to 1.
+ - Improved error reporting if an error occurs during tests.
+ - Added configurations targeting the arm64 and ppc64le cpu architectures as well as the gcc-10 compiler.
+ - Reduced the total amount of build configurations to improve the CI build time.
+ - Added execution of the servers with all the plugins enabled in order to detect memory violations and errors.
+ - Fixed some build failures caused by a false positive odr violation.
+ - Added execution of the map server with all the custom scripts uncommented.
+ - Disabled asan in the gcc-7 builds, as it's too slow.
+- Converted `validateinterfaces.py` to Python 3. (part of #2778)
+- Changed the plugin handler to call all plugin events even when the server is running in minimal mode. (part of #2778)
+- Updated the friend list related packets for Zero clients. (part of #2763)
+- Changed the storage (account and guild storage) to automatically close when using the teleport skill. A configuration flag `teleport_close_storage` (`conf/map/battle/skill.conf`) has been added to restore the previous behavior. (#2756, issue #1762)
+
+### Fixed
+
+- Fixed an issue when deleting instances of type `IOT_CHAR`. (part of #2732)
+- Fixed an issue that prevented the removal of offline characters from parties to get correctly saved to the database. (#2762)
+- Fixed the deletion of skill units belonging to an NPC when it gets unloaded. (#2712, issue #768)
+- Fixed the selection of required items for various skills, such as Slim Potion Pitcher, for skill levels greater than 2. Required items are now selected through the `skill->get_item_index()` function. (#2774)
+- Fixed the description of the meaning of rows and columns in the documentation for `db/*/attr_fix.txt`. (#2765)
+- Fixed the behavior of the Megaphone item script to remove the normal script restrictions (walking, attacking, using skills and items, dropping and picking up items, trading, etc) while the message input box is present and not to be cancelled on death. (#2775, issue #2751)
+- Fixed a client freeze when talking with an NPC or using a Megaphone while the Rodex window is open. Rodex and NPC scripts (or megaphones) are now mutually exclusive. (part of #2775)
+- Added a workaround in the CI scripts to support MySQL/MariaDB setups where the normal grant code does not work. (part of #2778)
+- Fixed a memory violation between core and plugins in the HPMDataCheck code. (part of #2778)
+- Fixed warnings in the skill database parser when running in minimal mode. The battle configuration is now read in minimal mode. (part of #2778, issue #2776)
+- Fixed warnings about missing maps that were present in the map index and scripts. (part of #2778)
+- Fixed a duplicated `fclose()` call in the mapcache plugin. (part of #2778)
+- Fixed conflicting NPC names in `re/merchants/hd_refiner.txt` and in various custom scripts. (part of #2778)
+- Fixed builds on ARMv8, some ARMv7 versions and PPC64. (part of #2778)
+- Fixed the field size of `struct script_state::npc_item_flag` to support all the possible values and reduced the maximum value of the `item_enabled_npc` configuration flag to 3. (#2784)
+- Fixed the width of the path affected by Focused Arrow Strike to be 1 cell wide instead of 2 on each side. (part of #2785)
+- Fixed a missing character ID in name requests. (part of #2763)
+- Fixed an issue that caused loss of items when selling items to an NPC fails because of the character zeny cap. (#2782, issue #2780)
+- Fixed the disappearance of status icon timers when the character spawns. (#2786, issue #580)
+
+### Removed
+
+- Removed a duplicated function `time2str` from `bg_common.txt`. (part of #2778)
+
+## [v2020.05.31+1] `May 31 2020` `PATCH 1`
+
+### Fixed
+
+- Fixed a crash in the db2sql plugin with the MariaDB client library. (#2748)
+- Fixed the job level stat bonuses for the Novice class to match the official servers. (#2747)
+- Fixed an issue that caused the walk-path check to be never executed for skills that require the caster to be able to move. (#2761)
+- Fixed an issue that caused "Unknown Skill" errors to appear while casting skills. The default value for the skill damage type field of the skill database is now `NK_NONE` instead of `NK_NO_DAMAGE`. (#2761, issue #2760)
+
+## [v2020.05.31] `May 31 2020`
+
+### Added
+
+- Added the possibility to declare local NPC functions as public or private. (#2142)
+ - Functions declared as private can be called from other scripts with the syntax `"npc name"::function_name()`.
+ - The configuration option `script_configuration.functions_private_by_default` controls whether functions are public or private when not specified.
+- Added a new cast condition `MSC_MAGICATTACKED` to the mob skill database, allowing mobs to react to magical attacks. (#2733, issue #2578)
+- Added support for level-specific values in the skill database fields `Hit`, `AttackType`, `InterruptCast`, `CastDefRate`, `Requirement.State`, `Unit.Id`, `Unit.Interval`, `Unit.Target`, `Requirements.Items.Amount` (part of #2731)
+ - Removed hardcoded required item amounts for various skills, moving them to the skill database.
+- Added support for `Requirements.Items.Any` in the skill database, allowing skills that require any one of their item conditions to be verified (as opposed to all). (part of #2731, issue #1250)
+- Added support for `Requirements.Equip` in the skill database, allowing to specify a required equipment to cast a skill. (part of #2731)
+ - Removed hardcoded equip requirements for various skills, moving them to the skill database.
+- Added support for `Requirements.MaxSPTrigger` in the skill database, allowing to specify a maximum SP percentage that allows to cast a skill. (part of #2731)
+- Added/updated packets, encryption keys and message tables for clients up to 2020-05-20. (#2713)
+- Added support for the gcc sanitizer flags `address-use-after-scope`, `pointer-overflow`, `builtin`, `pointer-compare`, `pointer-subtract`, `shift-exponent`, `shift-base`, `sanitize-address-use-after-scope`. (part of #2713)
+- Added support for binary and octal number literals in scripts and libconfig configuration files, using the syntax 0b000 / 0o000. (#2671)
+- Added support for number separators in number literals in scripts and libconfig configuration files. The symbol `_` can be used as grouping separator (`1_000_000`, `0x_ffff_ffff`, etc). (part of #2671)
+- Added support for overriding `ENABLE_SC_SAVING`, `MAX_CARTS`, `MAX_SLOTS`, `MAX_AMOUNT`, `MAX_ZENY`, `MAX_BANK_ZENY`, `MAX_FAME`, `MAX_CART` through CFLAGS. (#2220)
+- Added a `skill_enabled_npc` battle flag allowing to specify whether self-targeted or targeted skills can be used while interacting with NPCs. (part of #2718, issue #862)
+- Added the `loudhailer()` script command, as used by the `Megaphone_` item. (#2758, issue #2751)
+
+### Changed
+
+- Added validation for the maximum length of permanent string variables and consolidated it to 255 characters. This requires a database migration. (#2705, issue #1037)
+- Split the `mapreg` SQL table into separate tables for integer and string variables. This requires a database migration. (#2720)
+- Updated the AUTHORS file to include names and emails from every commit so far. A helper script `tools/authors.sh` to extract them has been added. (#2729, issue #245)
+- Updated the drop chance of the Black and White Wing Suits. (#2739, issue #562)
+- Improved validation and bounds checking in the skill database loader. (#2731)
+ - Increased the maximum length of the skill descriptions (display names) to 50. (part of #2731)
+ - Increased the maximum skill level to 20 (to support `NPC_RUN`). (part of #2731)
+ - Capped the SkillInstances values to 25 (`MAX_SKILLUNITGROUP`) in the skill database. (part of #2731)
+- Extended the `item_enabled_npc` battle flag and the `enable_items()`/`disable_items()` script commands with finer grained options to allow the use of usable items or equipment while interacting with NPCs. (#2718)
+- Changed the default setting of `player_warp_keep_direction` to match the official servers' setting. (#2752)
+- Replaced the (failing) gitlab-ci centos6 builds with centos8 (released in september 2019). (#2759)
+
+### Fixed
+
+- Fixed the logic and interaction between the (element)proof Potions and Undead Scrolls and their status icons. (#2708)
+- Fixed an issue in the Lost Puppies quest causing the dogs to be unable to reappear. (#2698)
+- Fixed a possible data corruption caused by gender mismatch after a changesex/changecharsex operation. (#2714, issue #985)
+- Fixed a warning and name truncation when receiving a whisper message with a recipient name with a length of 24 characters. This allows to whisper to scripts with a name length up to 20 (through the `NPC:name` syntax). (#2721, issue #718)
+- Fixed interaction between `itemskill()` other item/skill uses, including other `itemskill()`. The autocast code has been changed to use a vector, to allow multiple concurrent skills. (#2699)
+ - It's now possible to use multiple `itemskill()` calls in the same item, as long there is at most one targeted skill, and it's the last one used.
+ - It's now possible to use items while the target cursor for a previously activated skill is visible, without aborting it. (issue #816)
+ - It's now possible to use a scroll while casting another skill (and the provided skill will be cast after the current one finishes). (issue #1026)
+- Fixed use of Fly Wing/Butterfly Wing while riding a cash shop mount (Boarding Halter) and having a falcon. (part of #2699, issue #2750)
+- Fixed the `Requirements.MaxHPTrigger` conditions for mercenary skills. (part of #2731)
+- Fixed a possible memory corruption or crash in the mob delayed removal function. (part of #2713, issue #2719)
+- Fixed a crash in the `npcshopdelitem()` script command. (part of #2713)
+- Fixed a crash in the achievement progress update code. (part of #2713)
+- Fixed a possible crash in the RODEX check name function. (part of #2713)
+- Added null pointer checks for missing view data in clif and status code. (part of #2713)
+- Added a check for the current map in mob and map code. (part of #2713)
+- Fixed an error or possible crash when a mob dies on an invalid map. (part of #2713)
+- Fixed an incorrect npc ID for the MOTD script after reloading or unloading scripts. (part of #2713)
+- Fixed an use after free in `party->broken()`. (part of #7213)
+- Fixed a possible crash in `mapif->guild_withdraw()`. (part of #2713)
+- Fixed a null pointer error in `unit->steptimer()`. (#2723, issue #2707)
+- Fixed the left-shift of a negative value in `GN_CRAZYWEED_ATK`. (#2734, issue #1151)
+- Fixed a missing "Beloved" attribute on the eggs of renamed pets. (#2744, issue #2743)
+- Fixed an inverted logic in the `storage_use_item` battle flag. (#2746)
+- Fixed the mineffect map property flag so that it's not affected by the character's minimized effects but only by the map type. It's enabled on all the guild castles, regardless of whether WoE is running. (#2754, issue #803)
+- Fixed a crash in the equip check code if a character logs wearing an item that was previously, but is no longer, equippable. (#2745)
+- Fixed a compiler warnings in 32 bit builds. (#2759)
+
+### Deprecated
+
+- Deprecated the (unintended and undocumented) possibility of calling local NPC functions as event labels if their name started with `On`. (part of #2142, issue #2137)
+ - The functionality is now disabled by default, and can be enabled by changing the `script_configuration.functions_as_events` setting.
+
+### Removed
+
+- Removed old debug code from the `SC_DANCING` case of `status_change_end_()`. (#2736, issue #2716)
+- Removed useless `FixedCastTime` values from the pre-re skill database. (part of #2731)
+
+## [v2020.05.03] `May 03 2020`
+
+### Added
+
+- Added the new pets (including the jRO exclusive ones) and their related items/monsters to the renewal database. (#2689)
+- Added constants `ALL_MOBS_NONBOSS`, `ALL_MOBS_BOSS`, `ALL_MOBS` for the special mob IDs for global skill assignment in the mob skill database. (part of #2691)
+- Added support for `__func__` on Windows, since it's now available in every supported compiler. (part of #2691)
+- Added documentation for the mob skill database. See `doc/mob_skill_db.conf`. (#2680)
+- Added missing functions for the name ack packets for `BL_ITEM` and `BL_SKILL`. (part of #2695)
+- Added/updated packets and encryption keys for clients up to 2020-04-14. (#2695)
+- Added support for packets `ZC_LAPINEUPGRADE_OPEN`, `CZ_LAPINEUPGRADE_CLOSE` and `ZC_LAPINEUPGRADE_RESULT` and a placeholder for `CZ_LAPINEUPGRADE_MAKE_ITEM`. (part of #2695)
+- Added a new cell type `cell_noskill`, to block skill usage. (#2188)
+
+### Changed
+
+- Removed warning messages about missing elements in the mob db, since it's an optional field. (part of #2689)
+- Updated the renewal pet database with the correct values and bonuses. (part of #2689, issue #2435)
+- Changed `mob_getfriendstatus()` to consider character as friends of their support monsters, for consistency with `mob_getfriendhprate()`. (part of #2691)
+- Changed `MSC_AFTERSKILL` to trigger on any skill when its `ConditionData` is 0, for consistency with `MSC_SKILLUSED`. (part of #2691)
+- Improved data validation and error reporting in the mob skill database. (part of #2691)
+- Changed return values of `mob_skill_use()` and `mobskill_event()`. Any third party code that uses them needs to be updated. (part of #2691)
+- Changed the battle configuration flag `manner_system` to be applied immediately to any existing `SC_NOCHAT`. (#2696, issue #227)
+- Changed the `atcommand()` command to ignore `PCBLOCK_COMMANDS`. (#2062)
+
+### Fixed
+
+- Fixed `SC_AUTOTRADE`, `SC_KSPROTECTED` and `SC_NO_SWITCH_EQUIP` incorrectly recognized as unknown status changes. (#2686, issue #2684)
+- Prevented `SC_KSPROTECTED` from starting on dead monsters. (part of #2686)
+- Fixed character unhiding while disguised or when using `@option 0`. (#2687, issues #1556 and #2104)
+- Fixed an incorrect order of operations causing results too small in various calculations related to free cell search, mob skill chances/delays, exp penalty, pet hunger and friendly rates, cast duration. (#2690)
+- Fixed errors caused by `pet_ai_sub_hard()` called for monsters that haven't been added to a map yet. (#2693)
+- Fixed a wrong packet error displayed when using an incorrect password for the char-login connection. (part of #2695)
+- Fixed a security check in the lapine ack packet handler. (part of #2695)
+- Fixed some incorrect assumptions about the skill index values, causing the Bard/Dancer soul link to grant the wrong skills. (#2710, issue #2670)
+- Fixed some conditions that could cause a skill to be attempted to save to the database with a negative skill level, resulting in query errors and data loss. (part of #2710)
+- Fixed the skill type of `RK_DRAGONBREATH` and `RK_DRAGONBREATH_WATER` to be `BF_WEAPON` and support the `bLongAtkRate` bonus. (#1304)
+- Fixed `SC_TELEKINESIS_INTENSE` to add percent MATK instead of fixed MATK. (part of #1304)
+
+## [v2020.04.05] `April 05 2020` `PATCH 1`
+
+### Fixed
+
+- Fixed a regression that prevented pets from hatching. (#2685, issue #2683)
+
+## [v2020.04.05] `April 05 2020`
+
+### Added
+
+- Added/updated packets, encryption keys and message tables for clients up to 2020-04-01. (#2663)
+- The `setpcblock()` and `checkpcblock()` can now be used on another character by passing the account id. (#2668)
+- Added new StatusChange types (`SC_POPECOOKIE`, `SC_VITALIZE_POTION`, `SC_SKF_MATK`, `SC_SKF_ATK`, `SC_SKF_ASPD`, `SC_SKF_CAST`, `SC_ALMIGHTY`) and updated relevant items. (#2658, related to #1177)
+- Added _libbacktrace_ support (currently Linux-only) for better error call stack logging. (#2581)
+
+### Changed
+
+- Extended the atcommand `@fakename` with a new `options` parameter, to select which names will be displayed. (#2637, related to issue #1966 and #2168)
+- Refactored the pet system code. (#2600, issues #2434 and #303)
+ - Added enumerations for pet hunger/intimacy levels
+ - Added value capping to `pet_set_intimate()` function.
+ - Adjusted pet catch rate calculation. The old, custom, calculation can be restored by setting the `pet_catch_rate_official_formula` battle config flag to false.
+ - Adjusted pet intimacy calculation when feeding.
+ - Improved validation of the Pet DB fields and of the input of various pet related functions.
+ - Removed the redundant `SpriteName` field from pet DB.
+ - Changed `EggItem` field in pet DB to be mandatory.
+ - Added new field `HungerDecrement` to pet DB. This replaces the `pet_hungry_friendly_decrease` battle config setting.
+ - Added new field `Intimacy.StarvingDelay` to pet DB.
+ - Added new field `Intimacy.StarvingDecrement` to pet DB.
+ - Increased `MAX_MOB_DB` to 22000.
+ - Added pet DB documentation file. (`doc/pet_db.txt`)
+ - Removed fields from pet DB where default values can be used.
+ - Added intimacy validation to pet DB `EquipScript` fields. This replaces the `pet_equip_min_friendly` battle config setting.
+ - Adjusted `inter_pet_tosql()` and `inter_pet_fromsql()` functions to use prepared statements.
+ - Refactored and/or updated code style of various functions that were touched by this pull request.
+- Added a backtrace to the error message of `clif_unknownname_ack()`. (part of #2663)
+- Added a `UNIQUE` constraint to the `userid` column of the `login` SQL table to prevent having multiple accounts with the same name. (#2666, related to #2169)
+- Increased the column size of `list`for the `ipbanlist` SQL table to accomodate for non-wildcard IPv4 and for IPv6 compatiblity. (#2665, issue #2631)
+
+### Fixed
+
+- Fixed memory violations and incorrect handling of `npc_data` in the quest info code. (#2682)
+- Fixed an issue that prevented the fake name to show up when using `@fakename` in RE clients. (part of #2637)
+- Fixed a compiler error in `PACKET_ZC_SE_CASHSHOP_OPEN`. (part of #2663, issue #2669)
+- Added missing libraries into the plugins Makefile, causing a linking error when a plugin uses MySQL or other libraries. (part of #2663)
+- Fixed a bug causing failed assertions that appeared when attacking a skill unit (such as Ice Wall). (#2678)
+- Fixed a bug causing failed assertions in `timer_do_delete()`, related to `ud->walktimer`. (#2676)
+- Fixed a bug allowing to equip bullets and grenades regardless of the weapon type. (#2660, issue #2661, related to #2579)
+- Fixed a memory leak in barter NPCs. (#2655)
+- Fixed a pointer overflow in the script command `getiteminfo()`. (#2656)
+- Refactored and fixed several bugs in the skill auto-cast system. (#2657, issue #1211)
+
+### Removed
+
+- Removed the `pet_hungry_friendly_decrease` battle config setting, superseded by the `HungerDecrement` field of the Pet DB. (part of #2600)
+- Removed the `pet_equip_min_friendly` battle config setting, superseded by the code inside the Pet DB `EquipScript` fields. (part of #2600)
+- Removed the redundant `SpriteName` field from pet DB. (part of #2600)
+
+## [v2020.03.08+2] `March 08 2020` `PATCH 2`
+
+### Fixed
+
+- Fixed an incorrect return value in `unit->walktobl()` causing mobs to get stuck when they try to loot. (#2664)
+
+## [v2020.03.08+1] `March 08 2020` `PATCH 1`
+
+### Fixed
+
+- Fixed an incorrect return value in `unit->walktobl()` causing mobs to be unable to walk to their target. (#2659)
+
+## [v2020.03.08] `March 08 2020`
+
+### Added
+
+- Added/updated packets, encryption keys and message tables for clients up to 2020-03-04. (#2645)
+- Exposed the item bound type (`IBT_*`) constants to the script engine. (#2650)
+- Added item scripts for item IDs 12459 through 12465 and corrected their name in the pre-renewal DB. (#2634, issue #1196)
+- Added the `unitiswalking()` script command, to check whether an unit is walking at a given time. (#2628)
+
+### Changed
+
+- Changed the default `PACKETVER` to 2019-05-30. (part of #2645)
+- Major refactoring of the functions in `unit.c`, adding code documentation and following the code style guidelines. Functions have been renamed when backward compatible changes to the arguments or return values were made. (#2546)
+ - A new header `unitdefines.h` has been added.
+ - `enum unit_dir` is now provided, to standardize handling of facing/walking directions.
+ - The macros `unit_get_opposite_dir()`, `unit_is_diagonal_dir()`, `unit_is_dir_or_opposite()`, `unit_get_ccw90_dir()`, `unit_get_rnd_diagonal_dir()` have been added.
+ - `unit->walktoxy_timer()` has been renamed to `unit->walk_toxy_timer()` and its return values have been changed and documented.
+ - `unit->walktoxy_sub()` has been renamed to `unit->walk_toxy_sub()` and its return values have been changed and documented.
+ - `unit->delay_walktoxy_timer()` has been renamed to `unit->delay_walk_toxy_timer()` and its return values have been changed and documented.
+ - `unit->walktoxy()` has been renamed to `unit->walk_toxy()` and its return values have been changed and documented.
+ - `unit->walktobl_sub()` has been renamed to `unit->walk_tobl_timer()` and its return values have been changed and documented.
+ - `unit->setdir()` has been renamed to `unit->set_dir()` and its return value and arguments have been changed and documented.
+ - `unit->getdir()` has been renamed to `unit->get_dir()` and its return type and constness of the arguments have been changed.
+ - `unit->warpto_master()` has been added.
+ - `unit->sleep_timer()` has been renamed to `unit->sleeptimer()` and its return values have been changed and documented.
+ - `unit->calc_pos()` now accepts `enum unit_dir`.
+ - `map->check_dir()` now accepts `enum unit_dir`.
+ - `map->calc_dir()` now returns `enum unit_dir` and accepts a const bl.
+ - `npc->create_npc()` now accepts `enum unit_dir`.
+ - `skill->blown()` now accepts `enum unit_dir`.
+ - `skill->brandishspear_first()` now accepts `enum unit_dir`.
+ - `skill->brandishspear_dir()` now accepts `enum unit_dir`.
+ - `skill->attack_blow_unknown()` now accepts `enum unit_dir`.
+ - The remaining unit functions have been documented.
+- New return values have been added to `pc->setpos()`, for better error handling. (#2633, issue #2632)
+- Increased the `MAX_MOB_LIST_PER_MAP` value to 115 in pre-renewal builds, to fit all the default spawns. (#2638, issue #1915)
+- Extended the `getiteminfo()` command to also accept item names, and added the types `ITEMINFO_ID`, `ITEMINFO_AEGISNAME`, `ITEMINFO_NAME`. (#2639)
+- Changed `itemskill()` to ignore conditions by default. The `ISF_CHECKCONDITIONS` needs to be explicitly passed if conditions should be checked/consumed. (part of #2648)
+- Changed the NPC shop behavior to prevent selling items from the favorites tab of the inventory. (#2651)
+- Updated Doxygen configuration to speed up generation and fix compatibility warnings. (0d747896e0)
+- Updated the Travis-CI configuration file according to the validation warnings and notices. (eb97973e68)
+
+### Fixed
+
+- Fixed a missing `get_index()` call in `Skill2SCTable`, causing some skills to activate the wrong status. (#2643, issue #2636)
+- Fixed a compilation error C2233 in Visual Studio. (part of #2645)
+- Fixed Basilica unintentionally restraining boss mobs. (#2612, issue #1276, related to issue #2420)
+- Fixed the handling of unequip scripts in zones where an item is restricted. The `OnUnequip` script is now never executed when unequipping in a restricted zone, but it is always executed when entering such zones, regardless of the `unequip_restricted_equipment` battle flag. (#2642, issue #2180)
+- Fixed the handling of skill requirements and conditions by the `itemskill()` command. (#2648, issue #2646)
+- Added missing requirements to `CASH_INCAGI` and `RK_CRUSHSTRIKE`. (part of #2648)
+
+### Removed
+
+- Removed the `ISF_IGNORECONDITIONS` flag previously used by `itemskill()`, now the default behavior. (#2648)
+
## [v2020.02.09] `February 09 2020`
### Added
@@ -1196,6 +1512,15 @@ 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
+[v2020.06.28]: https://github.com/HerculesWS/Hercules/compare/v2020.05.31+1...v2020.06.28
+[v2020.05.31+1]: https://github.com/HerculesWS/Hercules/compare/v2020.05.31...v2020.05.31+1
+[v2020.05.31]: https://github.com/HerculesWS/Hercules/compare/v2020.05.03...v2020.05.31
+[v2020.05.03]: https://github.com/HerculesWS/Hercules/compare/v2020.04.05+1...v2020.05.03
+[v2020.04.05+1]: https://github.com/HerculesWS/Hercules/compare/v2020.04.05...v2020.04.05+1
+[v2020.04.05]: https://github.com/HerculesWS/Hercules/compare/v2020.03.08+2...v2020.04.05
+[v2020.03.08+2]: https://github.com/HerculesWS/Hercules/compare/v2020.03.08+1...v2020.03.08+2
+[v2020.03.08+1]: https://github.com/HerculesWS/Hercules/compare/v2020.03.08...v2020.03.08+1
+[v2020.03.08]: https://github.com/HerculesWS/Hercules/compare/v2020.02.09...v2020.03.08
[v2020.02.09]: https://github.com/HerculesWS/Hercules/compare/v2020.01.12...v2020.02.09
[v2020.01.12]: https://github.com/HerculesWS/Hercules/compare/v2019.12.15...v2020.01.12
[v2019.12.15]: https://github.com/HerculesWS/Hercules/compare/v2019.11.17+1...v2019.12.15
diff --git a/Makefile.in b/Makefile.in
index 5378a5b67..3d6309925 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -25,11 +25,11 @@ HAVE_MYSQL=@HAVE_MYSQL@
ifeq ($(HAVE_MYSQL),yes)
ALL_DEPENDS=common_sql login_sql char_sql map_sql sysinfo | import
SQL_DEPENDS=common_sql login_sql char_sql map_sql sysinfo | import
- COMMON_SQL_DEPENDS=mt19937ar libconfig sysinfo
- LOGIN_SQL_DEPENDS=mt19937ar libconfig common_sql sysinfo
- CHAR_SQL_DEPENDS=mt19937ar libconfig common_sql sysinfo
- MAP_SQL_DEPENDS=mt19937ar libconfig common_sql sysinfo
- TOOLS_DEPENDS=mt19937ar libconfig common_sql sysinfo
+ COMMON_SQL_DEPENDS=mt19937ar libconfig libbacktrace sysinfo
+ LOGIN_SQL_DEPENDS=mt19937ar libconfig libbacktrace common_sql sysinfo
+ CHAR_SQL_DEPENDS=mt19937ar libconfig libbacktrace common_sql sysinfo
+ MAP_SQL_DEPENDS=mt19937ar libconfig libbacktrace common_sql sysinfo
+ TOOLS_DEPENDS=mt19937ar libconfig libbacktrace common_sql sysinfo
else
ALL_DEPENDS=needs_mysql
SQL_DEPENDS=needs_mysql
@@ -52,7 +52,7 @@ HAVE_PERL=@HAVE_PERL@
HAVE_DOXYGEN=@HAVE_DOXYGEN@
MF_TARGETS = Makefile $(addsuffix /Makefile, src/common 3rdparty/mt19937ar \
- 3rdparty/libconfig src/char src/login src/map src/plugins \
+ 3rdparty/libconfig 3rdparty/libbacktrace src/char src/login src/map src/plugins \
src/test tools/HPMHookGen tools/doxygen)
CC = @CC@
@@ -107,6 +107,10 @@ libconfig: 3rdparty/libconfig/Makefile
@echo " MAKE $@"
@$(MAKE) -C 3rdparty/libconfig
+libbacktrace: 3rdparty/libbacktrace/Makefile
+ @echo " MAKE $@"
+ @$(MAKE) -C 3rdparty/libbacktrace
+
login_sql: $(LOGIN_SQL_DEPENDS) src/login/Makefile
@echo " MAKE $@"
@$(MAKE) -C src/login sql
@@ -150,6 +154,7 @@ clean buildclean: $(MF_TARGETS)
@$(MAKE) -C src/common $@
@$(MAKE) -C 3rdparty/mt19937ar $@
@$(MAKE) -C 3rdparty/libconfig $@
+ @$(MAKE) -C 3rdparty/libbacktrace $@
@$(MAKE) -C src/login $@
@$(MAKE) -C src/char $@
@$(MAKE) -C src/map $@
@@ -176,31 +181,32 @@ config.status: configure
help: Makefile
@echo "most common targets are 'all' 'sql' 'clean' 'plugins' 'help'"
@echo "possible targets are:"
- @echo "'common_sql' - builds object files used in SQL servers"
- @echo "'mt19937ar' - builds object file of Mersenne Twister MT19937"
- @echo "'libconfig' - builds object files of libconfig"
- @echo "'login_sql' - builds login server"
- @echo "'char_sql' - builds char server"
- @echo "'map_sql' - builds map server"
- @echo "'import' - builds conf/import folder from the template conf/import-tmpl"
- @echo "'all' - builds all the above targets"
- @echo "'sql' - builds sql servers (targets 'common_sql' 'login_sql' 'char_sql'"
- @echo " 'map_sql' and 'import')"
- @echo "'plugins' - builds all available plugins"
- @echo "'plugin.Name' - builds plugin named 'Name'"
- @echo "'test' - builds tests"
- @echo "'clean' - cleans executables and objects"
- @echo "'buildclean' - cleans build temporary (object) files, without deleting the"
- @echo " executables"
- @echo "'distclean' - cleans files generated by ./configure"
- @echo "'sysinfo' - re-generates the System Info include"
+ @echo "'common_sql' - builds object files used in SQL servers"
+ @echo "'mt19937ar' - builds object file of Mersenne Twister MT19937"
+ @echo "'libconfig' - builds object files of libconfig"
+ @echo "'libbacktrace' - builds object files of libbacktrace"
+ @echo "'login_sql' - builds login server"
+ @echo "'char_sql' - builds char server"
+ @echo "'map_sql' - builds map server"
+ @echo "'import' - builds conf/import folder from the template conf/import-tmpl"
+ @echo "'all' - builds all the above targets"
+ @echo "'sql' - builds sql servers (targets 'common_sql' 'login_sql' 'char_sql'"
+ @echo " 'map_sql' and 'import')"
+ @echo "'plugins' - builds all available plugins"
+ @echo "'plugin.Name' - builds plugin named 'Name'"
+ @echo "'test' - builds tests"
+ @echo "'clean' - cleans executables and objects"
+ @echo "'buildclean' - cleans build temporary (object) files, without deleting the"
+ @echo " executables"
+ @echo "'distclean' - cleans files generated by ./configure"
+ @echo "'sysinfo' - re-generates the System Info include"
ifeq ($(HAVE_DOXYGEN),yes)
- @echo "'docs' - Generate the Doxygen source code documentation"
+ @echo "'docs' - Generate the Doxygen source code documentation"
ifeq ($(HAVE_PERL),yes)
- @echo "'hooks' - re-generates the definitions for the HPM"
+ @echo "'hooks' - re-generates the definitions for the HPM"
endif
endif
- @echo "'help' - outputs this message"
+ @echo "'help' - outputs this message"
#####################################################################
diff --git a/conf/common/inter-server.conf b/conf/common/inter-server.conf
index 7696774d6..9960c46d6 100644
--- a/conf/common/inter-server.conf
+++ b/conf/common/inter-server.conf
@@ -76,9 +76,10 @@ inter_configuration: {
acc_reg_str_db: "acc_reg_str_db"
char_reg_str_db: "char_reg_str_db"
char_reg_num_db: "char_reg_num_db"
-
global_acc_reg_num_db: "global_acc_reg_num_db"
global_acc_reg_str_db: "global_acc_reg_str_db"
+ map_reg_num_db: "map_reg_num_db"
+ map_reg_str_db: "map_reg_str_db"
}
pc: {
hotkey_db: "hotkey"
@@ -113,7 +114,6 @@ inter_configuration: {
position_db: "guild_position"
storage_db: "guild_storage"
}
- mapreg_db: "mapreg"
autotrade_merchants_db: "autotrade_merchants"
autotrade_data_db: "autotrade_data"
npc_market_data_db: "npc_market_data"
diff --git a/conf/map/battle/client.conf b/conf/map/battle/client.conf
index 5601dbc9e..d4c0f3e1a 100644
--- a/conf/map/battle/client.conf
+++ b/conf/map/battle/client.conf
@@ -202,3 +202,39 @@ ping_time: 20
// Drop or not connection after client send disconnect request packet
// Official is false
drop_connection_on_quit: false
+
+// When to display the rate modifier messages?
+// 0x0 - Never display rate modifier messages.
+// 0x1 - Display rate modifier messages upon login.
+// 0x2 - Display rate modifier messages upon map change.
+// 0x4 - Display rate modifier messages upon teleporting (regardless of changing maps).
+// Default: 0x1 (Official behavior.)
+display_rate_messages: 0x1
+
+// When to display the configuration messages and which? (Note 3)
+//
+// Flags for when to display the configuration messages:
+// 0x000 - Never display configuration messages.
+// 0x001 - Display configuration messages upon login. (Default. Should always be set.)
+// 0x002 - Display configuration messages upon map change.
+// 0x004 - Display configuration messages upon teleporting (regardless of changing maps).
+//
+// Flags for which configuration messages are displayed:
+// 0x010 - Character's party invitation state. (Default.)
+// 0x020 - Character's view equipment state. (Default.)
+// 0x040 - Character's Urgent Call state. (Default.)
+// 0x080 - Character's pet auto-feed state. (Default.)
+// 0x100 - Character's homunculus auto-feed state. (Default.)
+//
+// Default: 0x1F1 (Official behavior.)
+display_config_messages: 0x1F1
+
+// When to display the overweight messages?
+// 0x0 - Never display overweight messages.
+// 0x1 - Display overweight messages upon login. (Default.)
+// 0x2 - Display overweight messages upon map change. (Default.)
+// Default: 0x3 (Official behavior.)
+display_overweight_messages: 0x3
+
+// Show tip of the day window upon login?
+show_tip_window: true
diff --git a/conf/map/battle/guild.conf b/conf/map/battle/guild.conf
index 781f6555b..204c295c3 100644
--- a/conf/map/battle/guild.conf
+++ b/conf/map/battle/guild.conf
@@ -59,11 +59,13 @@ require_glory_guild: false
// Default is 3
max_guild_alliance: 3
-// When to re-display the guild notice
-// Upon teleporting (regardless of changing maps): 2 (official)
-// Upon changing maps: 1
-// Do not re-display: 0 (disabled)
-guild_notice_changemap: 2
+// When to display the guild notice?
+// 0x0 - Never display guild notice.
+// 0x1 - Display guild notice upon login.
+// 0x2 - Display guild notice upon map change.
+// 0x4 - Display guild notice upon teleporting (regardless of changing maps).
+// Default: 0x7 (Official behavior.)
+guild_notice_changemap: 0x7
// Can guild members invite/expel members inside guild castles in WoE/GvG? (Note 1)
// default: false
diff --git a/conf/map/battle/items.conf b/conf/map/battle/items.conf
index 4788d7b30..ef383e19b 100644
--- a/conf/map/battle/items.conf
+++ b/conf/map/battle/items.conf
@@ -100,10 +100,14 @@ autospell_stacking: false
// Default: true (official)
item_restricted_consumption_type: true
-// Enable all NPC to allow changing of equipments while interacting? (Note 1)
-// Script commands 'enable_items/disable_items' will not be override. (see doc/script_commands.txt)
-// Default: true (official)
-item_enabled_npc: true
+// Which item actions are allowed while interacting with NPC? (Note 3)
+// Script commands 'enable_items/disable_items' will not be overridden. (See doc/script_commands.txt.)
+// 0x0 (ITEMENABLEDNPC_NONE) - Don't allow any item actions.
+// 0x1 (ITEMENABLEDNPC_EQUIP) - Allow changing equipment.
+// 0x2 (ITEMENABLEDNPC_CONSUME) - Allow consuming usable items.
+// Official RE: 0x1 (Default value.)
+// Official Pre-RE: 0x3
+item_enabled_npc: 0x1
// Unequip the equipments that has disabled by map_zone_db.conf ?
// 0 : disabled equipments and cards are nullify (official)
diff --git a/conf/map/battle/party.conf b/conf/map/battle/party.conf
index e27a709fd..7713d5376 100644
--- a/conf/map/battle/party.conf
+++ b/conf/map/battle/party.conf
@@ -80,3 +80,30 @@ party_even_share_bonus: 0
// Display party name regardless if player is in a guild.
// Official servers do not display party name unless the user is in a guild. (Note 1)
display_party_name: false
+
+// When and how to send the party options? (Note 3)
+//
+// Flags for when to display the party options:
+// 0x00000 - Never send party options.
+// 0x00001 - Send party options upon login. (Default. Should always be set.)
+// 0x00002 - Send party options upon map change.
+// 0x00004 - Send party options upon teleporting (regardless of changing maps).
+// 0x00008 - Send party options upon successfully changing options manually. (Default. Should always be set.)
+// 0x00010 - Send party options upon unsuccessfully changing options manually. (Tried to enable EXP sharing if not allowed.) (Default.)
+// 0x00020 - Send party options upon changing options automatically. (Default. Should always be set.)
+// 0x00040 - Send party options upon joining party. (Default. Should always be set.)
+// 0x00080 - Send party options upon leaving party. (Default.)
+//
+// Flags for how to send the party options:
+// 0x00100 - Send party options to all party members upon unsuccessfully changing options manually. (Tried to enable EXP sharing if not allowed.) (Default.)
+// 0x00200 - Send all party options upon login.
+// 0x00400 - Send all party options upon map change.
+// 0x00800 - Send all party options upon teleporting (regardless of changing maps).
+// 0x01000 - Send all party options upon successfully changing options manually. (Default.)
+// 0x02000 - Send all party options upon unsuccessfully changing options manually. (Tried to enable EXP sharing if not allowed.) (Default.)
+// 0x04000 - Send all party options upon changing options automatically.
+// 0x08000 - Send all party options upon joining party.
+// 0x10000 - Send all party options upon leaving party.
+//
+// Default: 0x31F9 (Official behavior.)
+send_party_options: 0x31F9
diff --git a/conf/map/battle/pet.conf b/conf/map/battle/pet.conf
index fa0057564..6d013b0ef 100644
--- a/conf/map/battle/pet.conf
+++ b/conf/map/battle/pet.conf
@@ -32,6 +32,14 @@
// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun, 16: Mercenary)
//=========================================================================
+// Use the offical formula to calculate the pet catch rate? (Note 1)
+// Official formula:
+// CatchRate = CaptureRate * (100 - 100 * MonsterHP / MonsterMaxHP) / 100 + CaptureRate
+// Custum *Athena formula:
+// CatchRate = (CaptureRate + (CharacterBaseLevel - MonsterLevel) * 30 + CharacterLuk * 20) * (200 - 100 * MonsterHP / MonsterMaxHP) / 100
+// (CaptureRate is defined in db/(pre-)re/pet_db.conf.)
+pet_catch_rate_official_formula: true
+
// Rate for catching pets (Note 2)
pet_catch_rate: 100
@@ -44,10 +52,6 @@ pet_friendly_rate: 100
// The rate at which a pet will become hungry. (Note 2)
pet_hungry_delay_rate: 100
-// If your pet is hungry by how much will the friendlyness decrease by. (Default is 5)
-// Note: The friendlyness is 0-1000 total, at 0 the pet runs away.
-pet_hungry_friendly_decrease: 5
-
// Does the pet need its equipment before it does its skill? (Note 1)
pet_equip_required: true
@@ -62,9 +66,6 @@ pet_damage_support: false
// At max (1000) support rate is 150%.
pet_support_min_friendly: 900
-// Same as above, but this is to use the pet_script field with official pet abilities.
-pet_equip_min_friendly: 900
-
// Whether or not the pet's will use skills. (Note 1)
// Note: Offensive pet skills need at least pet_attack_support or
// pet_damage_support to work (they trigger while the pet is attacking).
@@ -94,7 +95,6 @@ pet_max_stats: 99
pet_max_atk1: 500
pet_max_atk2: 1000
-// Are pets disabled during Guild Wars?
-// If set to true, pets are automatically returned to egg when entering castles during WoE times
-// and hatching is forbidden within as well.
-pet_disable_in_gvg: false
+// Should the pet immediately be removed when its intimacy drops to 0? (Note 1)
+// If set to false the pet will randomly walk around the map before being removed.
+pet_remove_immediately: true
diff --git a/conf/map/battle/player.conf b/conf/map/battle/player.conf
index b691f7343..e30c3c134 100644
--- a/conf/map/battle/player.conf
+++ b/conf/map/battle/player.conf
@@ -225,4 +225,11 @@ shadow_refine_atk: true
// Keep player facing direction after warping?
// Default: false (on official servers players always faces north)
-player_warp_keep_direction: true
+player_warp_keep_direction: false
+
+// Can dead players do actions like trading, open a chat room, etc.?
+// 0x0 - Don't allow trading and open chat rooms.
+// 0x1 - Allow trading when dead.
+// 0x2 - Allow open chat room when dead.
+// default: 0x3 (Official)
+allowed_actions_when_dead: 0x3
diff --git a/conf/map/battle/skill.conf b/conf/map/battle/skill.conf
index a40b52124..080ca6517 100644
--- a/conf/map/battle/skill.conf
+++ b/conf/map/battle/skill.conf
@@ -347,3 +347,16 @@ stormgust_knockback: true
// 0 : (official) Magic Rod's animation occurs every time it is used.
// 1 : Magic Rod's animation would not occur unless a spell was absorbed. (old behavior)
magicrod_type: 0
+
+// Which skills are allowed to use while interacting with NPC?
+// 0 (SKILLENABLEDNPC_NONE) - Don't allow using skills.
+// 1 (SKILLENABLEDNPC_SELF) - Allow using non-damaging self skills.
+// 2 (SKILLENABLEDNPC_ALL) - Allow using all skills.
+// Official RE: 0 (Default value.)
+// Official Pre-RE: 1
+skill_enabled_npc: 0
+
+// Close the storage/gstorage when teleported? (Note 1)
+// true : (Official)
+// false : (Athena)
+teleport_close_storage: true
diff --git a/conf/map/script.conf b/conf/map/script.conf
index fc4f26965..4eb84edf4 100644
--- a/conf/map/script.conf
+++ b/conf/map/script.conf
@@ -59,6 +59,16 @@ script_configuration: {
// Defaults to INT_MAX.
//input_max_value: 2147483647
input_max_value: 10000000
+
+ // Specifies whether functions not explicitly marked with a "private" or
+ // "public" keyword should be treated as "private" by default.
+ // Default: true
+ functions_private_by_default: true
+
+ // Specifies whether public functions can be invoked as NPC events. This
+ // allows, for example, to use a `public function OnDeath { ... }` instead
+ // of a `OnDeath:` label for mob death events.
+ functions_as_events: false
}
import: "conf/import/script.conf"
diff --git a/conf/messages.conf b/conf/messages.conf
index 4fdc13b09..c30af621e 100644
--- a/conf/messages.conf
+++ b/conf/messages.conf
@@ -646,8 +646,10 @@
668: Shadow Chaser T
669: Summoner
-//670-853 FREE (please start using from the top if you need, leave the 670+ range for new jobs)
+//670-852 FREE (please start using from the top if you need, leave the 670+ range for new jobs)
+
+853: NoPet |
// Mapflag to disable Autoloot Commands
854: Auto loot item are disabled on this map.
@@ -667,7 +669,7 @@
863: Duel: Can't use this item in duel.
864: You cannot use this command when dead.
865: Can't create chat rooms in this area.
-866: Pets are not allowed in Guild Wars.
+866: Pets are disabled in this map.
867: You're not dead.
868: Your current memo positions are:
869: You broke the target's weapon.
diff --git a/configure b/configure
index 73bd309c9..9341c504a 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
#! /bin/sh
-# From configure.ac 9bce92f63.
+# From configure.ac 6d5542195.
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69.
#
@@ -633,6 +633,16 @@ MYSQL_VERSION
HAVE_MYSQL
MYSQL_CONFIG_HOME
DLLEXT
+USE_LIBBACKTRACE
+BACKTRACE_USES_MALLOC
+ALLOC_FILE
+VIEW_FILE
+BACKTRACE_SUPPORTS_DATA
+BACKTRACE_SUPPORTED
+LIBBACKTRACE_FORMAT_FILE
+BACKTRACE_SUPPORTS_THREADS
+BACKTRACE_FILE
+AWK
SOFLAGS
WITH_PLUGINS
AR
@@ -700,6 +710,7 @@ with_key1
with_key2
with_key3
enable_debug
+enable_libbacktrace
enable_buildbot
enable_rdtsc
enable_profiler
@@ -1355,6 +1366,9 @@ Optional Features:
--enable-epoll use epoll(4) on Linux
--enable-debug[=ARG] Compiles extra debug code. (yes by default)
(available options: yes, no, gdb)
+ --enable-libbacktrace[=ARG]
+ Compiles with libbacktrace. (no by default -
+ experimental)
--enable-buildbot[=ARG] (available options: yes, no)
--enable-rdtsc Uses rdtsc as timing source (disabled by default)
Enable it when you've timing issues. (For example:
@@ -1838,6 +1852,52 @@ $as_echo "$ac_res" >&6; }
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
} # ac_fn_c_check_func
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ as_decl_name=`echo $2|sed 's/ *(.*//'`
+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+ (void) $as_decl_use;
+#else
+ (void) $as_decl_name;
+#endif
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
@@ -2195,7 +2255,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
ac_config_files="$ac_config_files Makefile src/common/Makefile"
-ac_config_files="$ac_config_files 3rdparty/mt19937ar/Makefile 3rdparty/libconfig/Makefile"
+ac_config_files="$ac_config_files 3rdparty/mt19937ar/Makefile 3rdparty/libconfig/Makefile 3rdparty/libbacktrace/Makefile 3rdparty/libbacktrace/backtrace-supported.h"
ac_config_files="$ac_config_files src/char/Makefile src/login/Makefile"
@@ -3457,8 +3517,13 @@ $as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host OS" >&5
+$as_echo_n "checking host OS... " >&6; }
+host_os="`uname`"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $host_os" >&5
+$as_echo "$host_os" >&6; }
+
# Root-check
-host_is="`uname`"
case $host_os in
CYGWIN*)
;;
@@ -3739,6 +3804,34 @@ fi
#
+# libbacktrace
+#
+# Check whether --enable-libbacktrace was given.
+if test "${enable_libbacktrace+set}" = set; then :
+ enableval=$enable_libbacktrace;
+ enable_libbacktrace="$enableval"
+ case $enableval in
+ "no");;
+ "yes");;
+ *) as_fn_error $? "invalid argument --enable-libbacktrace=$enableval... stopping" "$LINENO" 5;;
+ esac
+
+else
+
+ case $host_os in
+ Linux* )
+ enable_libbacktrace="yes"
+ ;;
+ *)
+ enable_libbacktrace="no"
+ ;;
+ esac
+
+
+fi
+
+
+#
# Buildbot
#
# Check whether --enable-buildbot was given.
@@ -6222,6 +6315,390 @@ fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fsanitize=address-use-after-scope" >&5
+$as_echo_n "checking whether $CC supports -fsanitize=address-use-after-scope... " >&6; }
+ OLD_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fsanitize=address-use-after-scope"
+ OLD_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fsanitize=address-use-after-scope"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=address-use-after-scope" >&5
+$as_echo_n "checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=address-use-after-scope... " >&6; }
+ CFLAGS="$CFLAGS -fsanitize-undefined-trap-on-error"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$OLD_CFLAGS"
+ LDFLAGS="$OLD_LDFLAGS"
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fsanitize=pointer-overflow" >&5
+$as_echo_n "checking whether $CC supports -fsanitize=pointer-overflow... " >&6; }
+ OLD_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fsanitize=pointer-overflow"
+ OLD_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fsanitize=pointer-overflow"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=pointer-overflow" >&5
+$as_echo_n "checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=pointer-overflow... " >&6; }
+ CFLAGS="$CFLAGS -fsanitize-undefined-trap-on-error"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$OLD_CFLAGS"
+ LDFLAGS="$OLD_LDFLAGS"
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fsanitize=builtin" >&5
+$as_echo_n "checking whether $CC supports -fsanitize=builtin... " >&6; }
+ OLD_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fsanitize=builtin"
+ OLD_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fsanitize=builtin"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=builtin" >&5
+$as_echo_n "checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=builtin... " >&6; }
+ CFLAGS="$CFLAGS -fsanitize-undefined-trap-on-error"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$OLD_CFLAGS"
+ LDFLAGS="$OLD_LDFLAGS"
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fsanitize=pointer-compare" >&5
+$as_echo_n "checking whether $CC supports -fsanitize=pointer-compare... " >&6; }
+ OLD_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fsanitize=pointer-compare"
+ OLD_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fsanitize=pointer-compare"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=pointer-compare" >&5
+$as_echo_n "checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=pointer-compare... " >&6; }
+ CFLAGS="$CFLAGS -fsanitize-undefined-trap-on-error"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$OLD_CFLAGS"
+ LDFLAGS="$OLD_LDFLAGS"
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fsanitize=pointer-subtract" >&5
+$as_echo_n "checking whether $CC supports -fsanitize=pointer-subtract... " >&6; }
+ OLD_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fsanitize=pointer-subtract"
+ OLD_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fsanitize=pointer-subtract"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=pointer-subtract" >&5
+$as_echo_n "checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=pointer-subtract... " >&6; }
+ CFLAGS="$CFLAGS -fsanitize-undefined-trap-on-error"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$OLD_CFLAGS"
+ LDFLAGS="$OLD_LDFLAGS"
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fsanitize=shift-exponent" >&5
+$as_echo_n "checking whether $CC supports -fsanitize=shift-exponent... " >&6; }
+ OLD_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fsanitize=shift-exponent"
+ OLD_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fsanitize=shift-exponent"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=shift-exponent" >&5
+$as_echo_n "checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=shift-exponent... " >&6; }
+ CFLAGS="$CFLAGS -fsanitize-undefined-trap-on-error"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$OLD_CFLAGS"
+ LDFLAGS="$OLD_LDFLAGS"
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fsanitize=shift-base" >&5
+$as_echo_n "checking whether $CC supports -fsanitize=shift-base... " >&6; }
+ OLD_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fsanitize=shift-base"
+ OLD_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fsanitize=shift-base"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=shift-base" >&5
+$as_echo_n "checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=shift-base... " >&6; }
+ CFLAGS="$CFLAGS -fsanitize-undefined-trap-on-error"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$OLD_CFLAGS"
+ LDFLAGS="$OLD_LDFLAGS"
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fsanitize=sanitize-address-use-after-scope" >&5
+$as_echo_n "checking whether $CC supports -fsanitize=sanitize-address-use-after-scope... " >&6; }
+ OLD_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fsanitize=sanitize-address-use-after-scope"
+ OLD_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fsanitize=sanitize-address-use-after-scope"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=sanitize-address-use-after-scope" >&5
+$as_echo_n "checking whether $CC requires -fsanitize-undefined-trap-on-error for -fsanitize=sanitize-address-use-after-scope... " >&6; }
+ CFLAGS="$CFLAGS -fsanitize-undefined-trap-on-error"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$OLD_CFLAGS"
+ LDFLAGS="$OLD_LDFLAGS"
+
+
+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
fi
@@ -6230,6 +6707,33 @@ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fsigned-char" >&5
+$as_echo_n "checking whether $CC supports -fsigned-char... " >&6; }
+ OLD_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fsigned-char"
+ OLD_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fsigned-char"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$OLD_CFLAGS"
+ LDFLAGS="$OLD_LDFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wno-unused-parameter" >&5
$as_echo_n "checking whether $CC supports -Wno-unused-parameter... " >&6; }
@@ -8518,6 +9022,439 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
esac
#
+# libbacktrace
+#
+if test "$enable_libbacktrace" = "no" ; then
+ USE_LIBBACKTRACE="no"
+else
+ CPPFLAGS="$CPPFLAGS -DHAVE_LIBBACKTRACE"
+ USE_LIBBACKTRACE="yes"
+
+ # libbacktrace checks
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -funwind-tables" >&5
+$as_echo_n "checking whether $CC supports -funwind-tables... " >&6; }
+ OLD_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -funwind-tables"
+ OLD_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -funwind-tables"
+ 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; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$OLD_CFLAGS"
+ LDFLAGS="$OLD_LDFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
+ for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+ case "$AWK" in
+ "")
+ as_fn_error $? "Libbacktrace requires awk to build" "$LINENO" 5
+ ;;
+ esac
+
+ backtrace_supported=yes
+ ac_fn_c_check_header_mongrel "$LINENO" "unwind.h" "ac_cv_header_unwind_h" "$ac_includes_default"
+if test "x$ac_cv_header_unwind_h" = xyes; then :
+ ac_fn_c_check_func "$LINENO" "_Unwind_Backtrace" "ac_cv_func__Unwind_Backtrace"
+if test "x$ac_cv_func__Unwind_Backtrace" = xyes; then :
+ BACKTRACE_FILE="backtrace.lo simple.lo"
+else
+
+ BACKTRACE_FILE="nounwind.lo"
+ backtrace_supported=no
+
+
+fi
+
+else
+
+ BACKTRACE_FILE="nounwind.lo"
+ backtrace_supported=no
+
+
+fi
+
+
+
+
+
+$as_echo "#define HAVE_GETIPINFO 1" >>confdefs.h
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking __sync extensions" >&5
+$as_echo_n "checking __sync extensions... " >&6; }
+if ${libbacktrace_cv_sys_sync+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test -n "${with_target_subdir}"; then
+ case "${host}" in
+ hppa*-*-hpux*)
+ libbacktrace_cv_sys_sync=no
+ ;;
+ *)
+ libbacktrace_cv_sys_sync=yes
+ ;;
+ esac
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ int i;
+int
+main ()
+{
+
+ __sync_bool_compare_and_swap(&i, i, i);
+ __sync_lock_test_and_set(&i, 1);
+ __sync_lock_release(&i);
+
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ libbacktrace_cv_sys_sync=yes
+else
+ libbacktrace_cv_sys_sync=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libbacktrace_cv_sys_sync" >&5
+$as_echo "$libbacktrace_cv_sys_sync" >&6; }
+ BACKTRACE_SUPPORTS_THREADS=0
+ if test "$libbacktrace_cv_sys_sync" = "yes"; then
+ BACKTRACE_SUPPORTS_THREADS=1
+
+$as_echo "#define HAVE_SYNC_FUNCTIONS 1" >>confdefs.h
+
+ fi
+
+
+ # Test for __atomic support.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking __atomic extensions" >&5
+$as_echo_n "checking __atomic extensions... " >&6; }
+if ${libbacktrace_cv_sys_atomic+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test -n "${with_target_subdir}"; then
+ libbacktrace_cv_sys_atomic=yes
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ int i;
+int
+main ()
+{
+
+ __atomic_load_n(&i, __ATOMIC_ACQUIRE);
+ __atomic_store_n(&i, 1, __ATOMIC_RELEASE);
+
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ libbacktrace_cv_sys_atomic=yes
+else
+ libbacktrace_cv_sys_atomic=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libbacktrace_cv_sys_atomic" >&5
+$as_echo "$libbacktrace_cv_sys_atomic" >&6; }
+ if test "$libbacktrace_cv_sys_atomic" = "yes"; then
+
+$as_echo "#define HAVE_ATOMIC_FUNCTIONS 1" >>confdefs.h
+
+ fi
+
+ # The library needs to be able to read the executable itself. Compile
+ # a file to determine the executable format. The awk script
+ # filetype.awk prints out the file type.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking output filetype" >&5
+$as_echo_n "checking output filetype... " >&6; }
+if ${libbacktrace_cv_sys_filetype+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ filetype=
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int i;
+int
+main ()
+{
+int j;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ filetype=`${AWK} -f $srcdir/3rdparty/libbacktrace/filetype.awk conftest.$ac_objext`
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "compiler failed
+See \`config.log' for more details" "$LINENO" 5; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ libbacktrace_cv_sys_filetype=$filetype
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libbacktrace_cv_sys_filetype" >&5
+$as_echo "$libbacktrace_cv_sys_filetype" >&6; }
+
+ # Match the file type to decide what files to compile.
+ LIBBACKTRACE_FORMAT_FILE=
+ backtrace_supports_data=yes
+ case "$libbacktrace_cv_sys_filetype" in
+ elf*)
+ LIBBACKTRACE_FORMAT_FILE="elf.o"
+ ;;
+ pecoff)
+ LIBBACKTRACE_FORMAT_FILE="pecoff.o"
+ backtrace_supports_data=no
+ ;;
+ xcoff*)
+ LIBBACKTRACE_FORMAT_FILE="xcoff.o"
+ backtrace_supports_data=no
+ ;;
+ macho*)
+ LIBBACKTRACE_FORMAT_FILE="macho.o"
+ backtrace_supports_data=no
+ ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not determine output file type" >&5
+$as_echo "$as_me: WARNING: could not determine output file type" >&2;}
+ LIBBACKTRACE_FORMAT_FILE="unknown.o"
+ backtrace_supported=no
+ ;;
+ esac
+
+
+ # ELF defines.
+ elfsize=
+ case "$libbacktrace_cv_sys_filetype" in
+ elf32)
+ elfsize=32
+ ;;
+ elf64)
+ elfsize=64
+ ;;
+ *)
+ elfsize=unused
+ esac
+
+cat >>confdefs.h <<_ACEOF
+#define BACKTRACE_ELF_SIZE $elfsize
+_ACEOF
+
+
+ # XCOFF defines.
+ xcoffsize=
+ case "$libbacktrace_cv_sys_filetype" in
+ xcoff32)
+ xcoffsize=32
+ ;;
+ xcoff64)
+ xcoffsize=64
+ ;;
+ *)
+ xcoffsize=unused
+ esac
+
+cat >>confdefs.h <<_ACEOF
+#define BACKTRACE_XCOFF_SIZE $xcoffsize
+_ACEOF
+
+
+ BACKTRACE_SUPPORTED=0
+ if test "$backtrace_supported" = "yes"; then
+ BACKTRACE_SUPPORTED=1
+ fi
+
+
+ BACKTRACE_SUPPORTS_DATA=0
+ if test "$backtrace_supports_data" = "yes"; then
+ BACKTRACE_SUPPORTS_DATA=1
+ fi
+
+
+ ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap"
+if test "x$ac_cv_func_mmap" = xyes; then :
+ have_mmap=yes
+else
+ have_mmap=no
+fi
+
+
+ VIEW_FILE=mmapio.lo
+ ALLOC_FILE=mmap.lo
+
+
+
+
+ BACKTRACE_USES_MALLOC=0
+ if test "$ALLOC_FILE" = "alloc.lo"; then
+ BACKTRACE_USES_MALLOC=1
+ fi
+
+
+ ac_fn_c_check_func "$LINENO" "dl_iterate_phdr" "ac_cv_func_dl_iterate_phdr"
+if test "x$ac_cv_func_dl_iterate_phdr" = xyes; then :
+ have_dl_iterate_phdr=yes
+else
+ have_dl_iterate_phdr=no
+fi
+
+ if test "$have_dl_iterate_phdr" = "yes"; then
+
+$as_echo "#define HAVE_DL_ITERATE_PHDR 1" >>confdefs.h
+
+ fi
+
+ # Check for the fcntl function.
+ if test -n "${with_target_subdir}"; then
+ case "${host}" in
+ *-*-mingw*)
+ have_fcntl=no
+ ;;
+ spu-*-*)
+ have_fcntl=no
+ ;;
+ *)
+ have_fcntl=yes
+ ;;
+ esac
+ else
+ ac_fn_c_check_func "$LINENO" "fcntl" "ac_cv_func_fcntl"
+if test "x$ac_cv_func_fcntl" = xyes; then :
+ have_fcntl=yes
+else
+ have_fcntl=no
+fi
+
+ fi
+ if test "$have_fcntl" = "yes"; then
+
+$as_echo "#define HAVE_FCNTL 1" >>confdefs.h
+
+ fi
+
+ ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strnlen" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRNLEN $ac_have_decl
+_ACEOF
+
+ for ac_func in lstat readlink
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+ ac_fn_c_check_func "$LINENO" "getexecname" "ac_cv_func_getexecname"
+if test "x$ac_cv_func_getexecname" = xyes; then :
+ have_getexecname=yes
+else
+ have_getexecname=no
+fi
+
+ if test "$have_getexecname" = "yes"; then
+
+$as_echo "#define HAVE_GETEXECNAME 1" >>confdefs.h
+
+ fi
+fi
+
+
+#
# Buildbot
#
case $enable_buildbot in
@@ -8598,11 +9535,6 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
#
# Host specific stuff
#
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host OS" >&5
-$as_echo_n "checking host OS... " >&6; }
-host_os="`uname`"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $host_os" >&5
-$as_echo "$host_os" >&6; }
fd_setsize=""
DLLEXT=".so"
case $host_os in
@@ -10418,6 +11350,7 @@ gives unlimited permission to copy, distribute and modify it."
ac_pwd='$ac_pwd'
srcdir='$srcdir'
+AWK='$AWK'
test -n "\$AWK" || AWK=awk
_ACEOF
@@ -10522,6 +11455,8 @@ do
"src/common/Makefile") CONFIG_FILES="$CONFIG_FILES src/common/Makefile" ;;
"3rdparty/mt19937ar/Makefile") CONFIG_FILES="$CONFIG_FILES 3rdparty/mt19937ar/Makefile" ;;
"3rdparty/libconfig/Makefile") CONFIG_FILES="$CONFIG_FILES 3rdparty/libconfig/Makefile" ;;
+ "3rdparty/libbacktrace/Makefile") CONFIG_FILES="$CONFIG_FILES 3rdparty/libbacktrace/Makefile" ;;
+ "3rdparty/libbacktrace/backtrace-supported.h") CONFIG_FILES="$CONFIG_FILES 3rdparty/libbacktrace/backtrace-supported.h" ;;
"src/char/Makefile") CONFIG_FILES="$CONFIG_FILES src/char/Makefile" ;;
"src/login/Makefile") CONFIG_FILES="$CONFIG_FILES src/login/Makefile" ;;
"src/map/Makefile") CONFIG_FILES="$CONFIG_FILES src/map/Makefile" ;;
diff --git a/configure.ac b/configure.ac
index 74ee37cd0..09a5ad6ad 100644
--- a/configure.ac
+++ b/configure.ac
@@ -25,7 +25,7 @@ AC_REVISION([m4_esyscmd_s([type git >/dev/null 2>&1 && git describe --always 2>/
AC_PREREQ([2.59])
AC_CONFIG_SRCDIR([src/common/cbasetypes.h])
AC_CONFIG_FILES([Makefile src/common/Makefile])
-AC_CONFIG_FILES([3rdparty/mt19937ar/Makefile 3rdparty/libconfig/Makefile])
+AC_CONFIG_FILES([3rdparty/mt19937ar/Makefile 3rdparty/libconfig/Makefile 3rdparty/libbacktrace/Makefile 3rdparty/libbacktrace/backtrace-supported.h])
AC_CONFIG_FILES([src/char/Makefile src/login/Makefile])
AC_CONFIG_FILES([src/map/Makefile src/plugins/Makefile])
AC_CONFIG_FILES([src/test/Makefile])
@@ -38,8 +38,11 @@ m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
[AC_GNU_SOURCE]
)
+AC_MSG_CHECKING([host OS])
+host_os="`uname`"
+AC_MSG_RESULT([$host_os])
+
# Root-check
-host_is="`uname`"
case $host_os in
CYGWIN*)
;;
@@ -312,6 +315,37 @@ AC_ARG_ENABLE(
)
#
+# libbacktrace
+#
+AC_ARG_ENABLE(
+ [libbacktrace],
+ AC_HELP_STRING(
+ [--enable-libbacktrace@<:@=ARG@:>@],
+ [
+ Compiles with libbacktrace. (no by default - experimental)
+ ]
+ ),
+ [
+ enable_libbacktrace="$enableval"
+ case $enableval in
+ "no");;
+ "yes");;
+ *) AC_MSG_ERROR([[invalid argument --enable-libbacktrace=$enableval... stopping]]);;
+ esac
+ ],
+ [
+ case $host_os in
+ Linux* )
+ enable_libbacktrace="yes"
+ ;;
+ *)
+ enable_libbacktrace="no"
+ ;;
+ esac
+ ]
+)
+
+#
# Buildbot
#
AC_ARG_ENABLE(
@@ -960,10 +994,17 @@ if test "$enable_sanitize" != "no" ; then
AC_CHECK_SANITIZER_FLAG(bool)
AC_CHECK_SANITIZER_FLAG(enum)
AC_CHECK_SANITIZER_FLAG(vptr)
+ AC_CHECK_SANITIZER_FLAG(address-use-after-scope)
+ AC_CHECK_SANITIZER_FLAG(pointer-overflow)
+ AC_CHECK_SANITIZER_FLAG(builtin)
+ AC_CHECK_SANITIZER_FLAG(pointer-compare)
+ AC_CHECK_SANITIZER_FLAG(pointer-subtract)
+ AC_CHECK_SANITIZER_FLAG(shift-exponent)
+ AC_CHECK_SANITIZER_FLAG(shift-base)
+ AC_CHECK_SANITIZER_FLAG(sanitize-address-use-after-scope)
fi
fi
-
AC_DEFUN([AC_CHECK_COMPILER_WFLAG],
[
AC_MSG_CHECKING([whether $CC supports -W$1])
@@ -1057,6 +1098,8 @@ AC_DEFUN([AC_CHECK_COMPILER_WNOFLAG],
]
)
+AC_CHECK_FLAG(-fsigned-char)
+
AC_CHECK_COMPILER_WNOFLAG(unused-parameter, [int foo(int bar) { return 0; }])
AC_CHECK_COMPILER_WNOFLAG(clobbered)
AC_CHECK_COMPILER_WFLAG(empty-body)
@@ -1392,6 +1435,237 @@ case $enable_debug in
esac
#
+# libbacktrace
+#
+if test "$enable_libbacktrace" = "no" ; then
+ USE_LIBBACKTRACE="no"
+else
+ CPPFLAGS="$CPPFLAGS -DHAVE_LIBBACKTRACE"
+ USE_LIBBACKTRACE="yes"
+
+ # libbacktrace checks
+ AC_CHECK_FLAG(-funwind-tables)
+
+ AC_PROG_AWK
+ case "$AWK" in
+ "")
+ AC_MSG_ERROR([Libbacktrace requires awk to build])
+ ;;
+ esac
+
+ backtrace_supported=yes
+ AC_CHECK_HEADER([unwind.h],
+ [AC_CHECK_FUNC([_Unwind_Backtrace],
+ [BACKTRACE_FILE="backtrace.lo simple.lo"],
+ [
+ BACKTRACE_FILE="nounwind.lo"
+ backtrace_supported=no
+ ]
+ )],
+ [
+ BACKTRACE_FILE="nounwind.lo"
+ backtrace_supported=no
+ ]
+ )
+ AC_SUBST(BACKTRACE_FILE)
+
+ AC_DEFINE(HAVE_GETIPINFO, 1, [Define if _Unwind_GetIPInfo is available.])
+
+ AC_CACHE_CHECK([__sync extensions],
+ [libbacktrace_cv_sys_sync],
+ [
+ if test -n "${with_target_subdir}"; then
+ case "${host}" in
+ hppa*-*-hpux*)
+ libbacktrace_cv_sys_sync=no
+ ;;
+ *)
+ libbacktrace_cv_sys_sync=yes
+ ;;
+ esac
+ else
+ AC_LINK_IFELSE(
+ [
+ AC_LANG_PROGRAM([int i;],
+ [
+ __sync_bool_compare_and_swap(&i, i, i);
+ __sync_lock_test_and_set(&i, 1);
+ __sync_lock_release(&i);
+ ]
+ )
+ ],
+ [libbacktrace_cv_sys_sync=yes],
+ [libbacktrace_cv_sys_sync=no]
+ )
+ fi
+ ]
+ )
+ BACKTRACE_SUPPORTS_THREADS=0
+ if test "$libbacktrace_cv_sys_sync" = "yes"; then
+ BACKTRACE_SUPPORTS_THREADS=1
+ AC_DEFINE([HAVE_SYNC_FUNCTIONS], 1, [Define to 1 if you have the __sync functions])
+ fi
+ AC_SUBST(BACKTRACE_SUPPORTS_THREADS)
+
+ # Test for __atomic support.
+ AC_CACHE_CHECK([__atomic extensions],
+ [libbacktrace_cv_sys_atomic],
+ [
+ if test -n "${with_target_subdir}"; then
+ libbacktrace_cv_sys_atomic=yes
+ else
+ AC_LINK_IFELSE(
+ [
+ AC_LANG_PROGRAM([int i;],
+ [
+ __atomic_load_n(&i, __ATOMIC_ACQUIRE);
+ __atomic_store_n(&i, 1, __ATOMIC_RELEASE);
+ ]
+ )
+ ],
+ [libbacktrace_cv_sys_atomic=yes],
+ [libbacktrace_cv_sys_atomic=no]
+ )
+ fi
+ ]
+ )
+ if test "$libbacktrace_cv_sys_atomic" = "yes"; then
+ AC_DEFINE([HAVE_ATOMIC_FUNCTIONS], 1, [Define to 1 if you have the __atomic functions])
+ fi
+
+ # The library needs to be able to read the executable itself. Compile
+ # a file to determine the executable format. The awk script
+ # filetype.awk prints out the file type.
+ AC_CACHE_CHECK([output filetype],
+ [libbacktrace_cv_sys_filetype],
+ [
+ filetype=
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([int i;], [int j;])],
+ [filetype=`${AWK} -f $srcdir/3rdparty/libbacktrace/filetype.awk conftest.$ac_objext`],
+ [AC_MSG_FAILURE([compiler failed])]
+ )
+ libbacktrace_cv_sys_filetype=$filetype
+ ]
+ )
+
+ # Match the file type to decide what files to compile.
+ LIBBACKTRACE_FORMAT_FILE=
+ backtrace_supports_data=yes
+ case "$libbacktrace_cv_sys_filetype" in
+ elf*)
+ LIBBACKTRACE_FORMAT_FILE="elf.o"
+ ;;
+ pecoff)
+ LIBBACKTRACE_FORMAT_FILE="pecoff.o"
+ backtrace_supports_data=no
+ ;;
+ xcoff*)
+ LIBBACKTRACE_FORMAT_FILE="xcoff.o"
+ backtrace_supports_data=no
+ ;;
+ macho*)
+ LIBBACKTRACE_FORMAT_FILE="macho.o"
+ backtrace_supports_data=no
+ ;;
+ *)
+ AC_MSG_WARN([could not determine output file type])
+ LIBBACKTRACE_FORMAT_FILE="unknown.o"
+ backtrace_supported=no
+ ;;
+ esac
+ AC_SUBST(LIBBACKTRACE_FORMAT_FILE)
+
+ # ELF defines.
+ elfsize=
+ case "$libbacktrace_cv_sys_filetype" in
+ elf32)
+ elfsize=32
+ ;;
+ elf64)
+ elfsize=64
+ ;;
+ *)
+ elfsize=unused
+ esac
+ AC_DEFINE_UNQUOTED([BACKTRACE_ELF_SIZE], [$elfsize], [ELF size: 32 or 64])
+
+ # XCOFF defines.
+ xcoffsize=
+ case "$libbacktrace_cv_sys_filetype" in
+ xcoff32)
+ xcoffsize=32
+ ;;
+ xcoff64)
+ xcoffsize=64
+ ;;
+ *)
+ xcoffsize=unused
+ esac
+ AC_DEFINE_UNQUOTED([BACKTRACE_XCOFF_SIZE], [$xcoffsize], [XCOFF size: 32 or 64])
+
+ BACKTRACE_SUPPORTED=0
+ if test "$backtrace_supported" = "yes"; then
+ BACKTRACE_SUPPORTED=1
+ fi
+ AC_SUBST(BACKTRACE_SUPPORTED)
+
+ BACKTRACE_SUPPORTS_DATA=0
+ if test "$backtrace_supports_data" = "yes"; then
+ BACKTRACE_SUPPORTS_DATA=1
+ fi
+ AC_SUBST(BACKTRACE_SUPPORTS_DATA)
+
+ AC_CHECK_FUNC(mmap, [have_mmap=yes], [have_mmap=no])
+
+ VIEW_FILE=mmapio.lo
+ ALLOC_FILE=mmap.lo
+
+ AC_SUBST(VIEW_FILE)
+ AC_SUBST(ALLOC_FILE)
+
+ BACKTRACE_USES_MALLOC=0
+ if test "$ALLOC_FILE" = "alloc.lo"; then
+ BACKTRACE_USES_MALLOC=1
+ fi
+ AC_SUBST(BACKTRACE_USES_MALLOC)
+
+ AC_CHECK_FUNC([dl_iterate_phdr], [have_dl_iterate_phdr=yes], [have_dl_iterate_phdr=no])
+ if test "$have_dl_iterate_phdr" = "yes"; then
+ AC_DEFINE(HAVE_DL_ITERATE_PHDR, 1, [Define if dl_iterate_phdr is available.])
+ fi
+
+ # Check for the fcntl function.
+ if test -n "${with_target_subdir}"; then
+ case "${host}" in
+ *-*-mingw*)
+ have_fcntl=no
+ ;;
+ spu-*-*)
+ have_fcntl=no
+ ;;
+ *)
+ have_fcntl=yes
+ ;;
+ esac
+ else
+ AC_CHECK_FUNC(fcntl, [have_fcntl=yes], [have_fcntl=no])
+ fi
+ if test "$have_fcntl" = "yes"; then
+ AC_DEFINE([HAVE_FCNTL], 1, [Define to 1 if you have the fcntl function])
+ fi
+
+ AC_CHECK_DECLS(strnlen)
+ AC_CHECK_FUNCS(lstat readlink)
+
+ AC_CHECK_FUNC(getexecname, [have_getexecname=yes], [have_getexecname=no])
+ if test "$have_getexecname" = "yes"; then
+ AC_DEFINE(HAVE_GETEXECNAME, 1, [Define if getexecname is available.])
+ fi
+fi
+AC_SUBST(USE_LIBBACKTRACE)
+
+#
# Buildbot
#
case $enable_buildbot in
@@ -1446,9 +1720,6 @@ AC_CHECK_FLAG(-fno-var-tracking)
#
# Host specific stuff
#
-AC_MSG_CHECKING([host OS])
-host_os="`uname`"
-AC_MSG_RESULT([$host_os])
fd_setsize=""
DLLEXT=".so"
case $host_os in
diff --git a/db/constants.conf b/db/constants.conf
index 6f87b2d51..700207c80 100644
--- a/db/constants.conf
+++ b/db/constants.conf
@@ -29,12 +29,24 @@
constants_db: {
/************* Entry structure (short) ************************************
- Identifier: value // (int)
+ Identifier: value // (integer literal)
************* Entry structure (full) *************************************
Identifier: {
- Value: value // (int)
+ Value: value // (integer literal)
Deprecated: true // (boolean) Defaults to false.
}
+ ************* Supported integer literals *********************************
+ decimal: 1337 // no prefix
+ hexadecimal: 0x1337 // prefix: 0x
+ octal: 0o1337 // prefix: 0o
+ binary: 0b101101 // prefix: 0b
+
+ Underscores can also be used as visual separators for digit grouping purposes:
+ 2_147_483_647
+ 0x7FFF_FFFF
+
+ Keep in mind that number literals cannot start or end with a separator and no
+ more than one separator can be used in a row (so 12_3___456 is illegal).
**************************************************************************/
comment__: "Weekdays"
@@ -426,19 +438,23 @@ constants_db: {
mf_pairship_endable: 58
mf_nostorage: 59
mf_nogstorage: 60
+ mf_nopet: 61
comment__: "Cell Properties"
- cell_walkable: 0
- cell_shootable: 1
- cell_water: 2
- cell_npc: 3
- cell_basilica: 4
- cell_landprotector: 5
- cell_novending: 6
- cell_nochat: 7
+ cell_walkable: 0
+ cell_shootable: 1
+ cell_water: 2
+ cell_npc: 3
+ cell_basilica: 4
+ cell_landprotector: 5
+ cell_novending: 6
+ cell_nochat: 7
+ cell_icewall: 8
+ cell_noicewall: 9
+ cell_noskill: 10
comment__: "Cell checks"
- //cell_gettype: 0
+ cell_gettype: 0
cell_chkwall: 1
cell_chkwater: 2
cell_chkcliff: 3
@@ -446,12 +462,15 @@ constants_db: {
cell_chkreach: 5
cell_chknopass: 6
cell_chknoreach: 7
- //cell_chkstack: 8
+ cell_chkstack: 8
cell_chknpc: 9
cell_chkbasilica: 10
cell_chklandprotector: 11
cell_chknovending: 12
cell_chknochat: 13
+ cell_chkicewall: 14
+ cell_chknoicewall: 15
+ cell_chknoskill: 16
comment__: "Bonuses / Parameter IDs"
bMaxHP: 6
@@ -1417,6 +1436,13 @@ constants_db: {
SC_RESIST_PROPERTY_WIND: 667
SC_CLIENT_ONLY_EQUIP_ARROW: 668
SC_MADOGEAR: 669
+ SC_POPECOOKIE: 670
+ SC_VITALIZE_POTION: 671
+ SC_SKF_MATK: 672
+ SC_SKF_ATK: 673
+ SC_SKF_ASPD: 674
+ SC_SKF_CAST: 675
+ SC_ALMIGHTY: 676
comment__: "Emotes"
e_gasp: 0
diff --git a/db/job_db2.txt b/db/job_db2.txt
index 646316d1a..9779d9671 100644
--- a/db/job_db2.txt
+++ b/db/job_db2.txt
@@ -13,7 +13,7 @@
// 6 = LUK increased by 1 at this job level
// Novice
-0,0,6,5,0,2,3,0,1,4,0
+0,0,0,0,0,0,0,0,0,0,0
// Swordman
1,0,1,0,0,0,3,0,0,0,5,0,0,0,1,0,0,0,3,0,0,0,5,0,0,0,6,0,0,0,2,0,0,1,0,0,5,0,3,0,1,0,3,0,6,0,2,1,0,1,1
// Magician
diff --git a/db/map_index.txt b/db/map_index.txt
index fbbf4d25a..6e77cb838 100644
--- a/db/map_index.txt
+++ b/db/map_index.txt
@@ -642,9 +642,9 @@ ve_fild04
ve_fild05
ve_fild06
ve_fild07
-poring_c01
-poring_c02
-que_ng
+//poring_c01 628
+//poring_c02 629
+que_ng 630
nameless_i
nameless_n
nameless_in
diff --git a/db/mob_db2.conf b/db/mob_db2.conf
index 8cc1a1459..ef3b631f2 100644
--- a/db/mob_db2.conf
+++ b/db/mob_db2.conf
@@ -57,9 +57,9 @@ mob_db: (
}
ViewRange: view range (int, defaults to 1)
ChaseRange: chase range (int, defaults to 1)
- Size: size (int, defaults to 1)
- Race: race (int, defaults to 0)
- Element: (type, level)
+ Size: size (string, defaults to "Size_Small")
+ Race: race (string, defaults to "RC_Formless")
+ Element: (type, level) (string/int, defaults to "Ele_Neutral"/1)
Mode: {
CanMove: true/false (bool, defaults to false)
Looter: true/false (bool, defaults to false)
diff --git a/db/mob_skill_db2.conf b/db/mob_skill_db2.conf
index 6a732ff2d..de4b014fa 100644
--- a/db/mob_skill_db2.conf
+++ b/db/mob_skill_db2.conf
@@ -36,20 +36,20 @@ mob_skill_db:(
<Skill_Constant>: {
ClearSkills: (boolean, defaults to false) allows cleaning all previous defined skills for the mob.
SkillLevel: (int, defaults to 1)
- SkillState: (int, defaults to 0)
- SkillTarget: (int, defaults to 0)
+ SkillState: (string, defaults to "MSS_ANY")
+ SkillTarget: (string, defaults to "MST_TARGET")
Rate: (int, defaults to 1)
CastTime: (int, defaults to 0)
Delay: (int, defaults to 0)
Cancelable: (boolean, defaults to false)
- CastCondition: (int, defaults to 0)
+ CastCondition: (string, defaults to "MSC_ALWAYS")
ConditionData: (int, defaults to 0)
val0: (int, defaults to 0)
val1: (int, defaults to 0)
val2: (int, defaults to 0)
val3: (int, defaults to 0)
val4: (int, defaults to 0)
- Emotion: (int, defaults to 0)
+ Emotion: (int, defaults to -1)
ChatMsgID: (int, defaults to 0)
}
}
diff --git a/db/pet_db2.conf b/db/pet_db2.conf
index d6862da32..235e41c0b 100644
--- a/db/pet_db2.conf
+++ b/db/pet_db2.conf
@@ -34,30 +34,39 @@ pet_db:(
{
// ================ Mandatory fields ==============================
Id: ID (int)
- SpriteName: "Sprite_Name" (string)
Name: "Pet Name" (string)
+ EggItem: "Egg Item Constant" (string)
// ================ Optional fields ===============================
- TamingItem: Taming Item (string, defaults to 0)
- EggItem: Egg Id (string, defaults to 0)
- AccessoryItem: Equipment Id (string, defaults to 0)
- FoodItem: Food Id (string, defaults to 0)
- FoodEffectiveness: hunger points (int, defaults to 0)
- HungerDelay: hunger time (int, defaults to 0)
+ TamingItem: "Taming Item Constant" (string, defaults to 0)
+ FoodItem: "Food Item Constant" (string, defaults to "Pet_Food" (ID=537))
+ AccessoryItem: "Equipment Item Constant" (string, defaults to 0)
+ FoodEffectiveness: hunger points (int, defaults to 80)
+ HungerDelay: hunger time (int, defaults to 60)
+ HungerDecrement: hunger points (int, defaults to 1)
Intimacy: {
- Initial: start intimacy (int, defaults to 0)
- FeedIncrement: feeding intimacy (int, defaults to 0)
- OverFeedDecrement: overfeeding intimacy (int, defaults to 0)
- OwnerDeathDecrement: owner die intimacy (int, defaults to 0)
+ Initial: start intimacy (int, defaults to 250)
+ FeedIncrement: feeding intimacy (int, defaults to 10)
+ OverFeedDecrement: overfeeding intimacy (int, defaults to 100)
+ OwnerDeathDecrement: owner die intimacy (int, defaults to 20)
+ StarvingDelay: starving time (int, defaults to 20)
+ StarvingDecrement: starving intimacy (int, defaults to 20)
}
- CaptureRate: capture rate (int, defaults to 0)
- Speed: speed (int, defaults to 0)
+ CaptureRate: capture rate (int, defaults to 1000)
+ Speed: speed (int, defaults to 150)
SpecialPerformance: true/false (boolean, defaults to false)
TalkWithEmotes: convert talk (boolean, defaults to false)
- AttackRate: attack rate (int, defaults to 0)
- DefendRate: Defence attack (int, defaults to 0)
- ChangeTargetRate: change target (int, defaults to 0)
+ AttackRate: attack rate (int, defaults to 300)
+ DefendRate: Defence attack (int, defaults to 300)
+ ChangeTargetRate: change target (int, defaults to 800)
+ AutoFeed: true/false (boolean, defaults to false)
PetScript: <" Pet Script (can also be multi-line) ">
EquipScript: <" Equip Script (can also be multi-line) ">
+ Evolve: {
+ EggID: { (string, Evolved Pet EggID)
+ Name: Amount (items required to perform evolution)
+ ...
+ }
+ }
},
**************************************************************************/
// entries in this file will override the ones in /(pre-)re/pet_db.conf
diff --git a/db/pre-re/attr_fix.txt b/db/pre-re/attr_fix.txt
index 134eec5cd..d1f59068e 100644
--- a/db/pre-re/attr_fix.txt
+++ b/db/pre-re/attr_fix.txt
@@ -1,7 +1,7 @@
// Elemental attribute damage adjustment tables
//
-// Row: target's defense element
-// Column: attacker's weapon element
+// Row: attacker's weapon element
+// Column: target's defense element
1,10 // lv1 Attribute table
//Neut Watr Erth Fire Wind Pois Holy Shdw Gho Und
diff --git a/db/pre-re/item_db.conf b/db/pre-re/item_db.conf
index 3e760b62a..c548209c8 100644
--- a/db/pre-re/item_db.conf
+++ b/db/pre-re/item_db.conf
@@ -67262,8 +67262,7 @@ item_db: (
Weight: 10
BuyingStore: true
Script: <"
- sc_start(SC_RESIST_PROPERTY_FIRE, 1200000, 20);
- sc_start(SC_RESIST_PROPERTY_WATER, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);
+ sc_start2(SC_RESIST_PROPERTY_FIRE, 1200000, 20, -15);
">
},
{
@@ -67275,8 +67274,7 @@ item_db: (
Weight: 10
BuyingStore: true
Script: <"
- sc_start(SC_RESIST_PROPERTY_WATER, 1200000, 20);
- sc_start(SC_RESIST_PROPERTY_WIND, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);
+ sc_start2(SC_RESIST_PROPERTY_WATER, 1200000, 20, -15);
">
},
{
@@ -67288,8 +67286,7 @@ item_db: (
Weight: 10
BuyingStore: true
Script: <"
- sc_start(SC_RESIST_PROPERTY_GROUND, 1200000, 20);
- sc_start(SC_RESIST_PROPERTY_FIRE, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);
+ sc_start2(SC_RESIST_PROPERTY_GROUND, 1200000, 20, -15);
">
},
{
@@ -67301,8 +67298,7 @@ item_db: (
Weight: 10
BuyingStore: true
Script: <"
- sc_start(SC_RESIST_PROPERTY_WIND, 1200000, 20);
- sc_start(SC_RESIST_PROPERTY_GROUND, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);
+ sc_start2(SC_RESIST_PROPERTY_WIND, 1200000, 20, -15);
">
},
{
@@ -68630,7 +68626,7 @@ item_db: (
Nouse: {
sitting: true
}
- Script: <" itemskill(AL_INCAGI, 10, ISF_INSTANTCAST | ISF_CASTONSELF); ">
+ Script: <" itemskill(AL_INCAGI, 10, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF); ">
},
{
Id: 12217
@@ -68651,7 +68647,7 @@ item_db: (
Nouse: {
sitting: true
}
- Script: <" itemskill(PR_ASPERSIO, 5, ISF_INSTANTCAST | ISF_CASTONSELF); ">
+ Script: <" itemskill(PR_ASPERSIO, 5, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF); ">
},
{
Id: 12218
@@ -68714,7 +68710,7 @@ item_db: (
Nouse: {
sitting: true
}
- Script: <" itemskill(BS_ADRENALINE, 5, ISF_INSTANTCAST | ISF_CASTONSELF); ">
+ Script: <" itemskill(BS_ADRENALINE, 5, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF); ">
},
{
Id: 12221
@@ -68734,7 +68730,7 @@ item_db: (
}
Script: <"
input @megaphone$;
- announce strcharinfo(PC_NAME) + ": " + @megaphone$,bc_all,0xFF0000;
+ loudhailer(@megaphone$);
end;
">
},
@@ -69503,10 +69499,7 @@ item_db: (
Type: "IT_USABLE"
Weight: 10
Script: <"
- sc_start(SC_RESIST_PROPERTY_FIRE, 300000, 20);
- sc_start(SC_RESIST_PROPERTY_WATER, 300000, 20);
- sc_start(SC_RESIST_PROPERTY_WIND, 300000, 20);
- sc_start(SC_RESIST_PROPERTY_GROUND, 300000, 20);
+ sc_start4(SC_ARMOR_RESIST, 300000, 20, 20, 20, 20);
">
},
{
@@ -69687,7 +69680,7 @@ item_db: (
}
Script: <"
percentheal(0, 5);
- itemskill(AL_INCAGI, 5, ISF_INSTANTCAST | ISF_CASTONSELF);
+ itemskill(AL_INCAGI, 5, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF);
">
},
{
@@ -70971,6 +70964,18 @@ item_db: (
Buy: 10
Weight: 10
BuyingStore: true
+ Trade: {
+ nodrop: true
+ notrade: true
+ nocart: true
+ nomail: true
+ noauction: true
+ nogstorage: true
+ }
+ Script: <"
+ specialeffect(EF_STEAL, AREA, playerattached());
+ sc_start4(SC_POPECOOKIE, 1200000, 3, 3, 3, 0);
+ ">
},
{
Id: 12380
@@ -71124,7 +71129,7 @@ item_db: (
}
Script: <"
//if(strcharinfo(PC_MAP)=="job3_rune02") {
- // itemskill RK_CRUSHSTRIKE,1;
+ // itemskill(RK_CRUSHSTRIKE, 1, ISF_CHECKCONDITIONS);
//}
">
},
@@ -71380,7 +71385,7 @@ item_db: (
{
Id: 12404
AegisName: "Acti_Potion"
- Name: "Acti Potion"
+ Name: "Activation Potion"
Type: "IT_USABLE"
Buy: 20
Weight: 10
@@ -71393,6 +71398,10 @@ item_db: (
nomail: true
noauction: true
}
+ Script: <"
+ specialeffect(EF_STEAL, AREA, playerattached());
+ sc_start4(SC_VITALIZE_POTION, 120000, 2, 2, 10, 0);
+ ">
},
{
Id: 12405
@@ -71895,51 +71904,80 @@ item_db: (
{
Id: 12459
AegisName: "F_Med_Life_Potion"
- Name: "F Med Life Potion"
+ Name: "Medium Life Potion"
Type: "IT_USABLE"
Weight: 10
+ Script: <"
+ specialeffect(EF_HEAL3, AREA, playerattached());
+ sc_start2(SC_M_LIFEPOTION, 600000, -7, 4);
+ ">
},
{
Id: 12460
AegisName: "F_Small_Life_Potion"
- Name: "F Small Life Potion"
+ Name: "Small Life Potion"
Type: "IT_USABLE"
Weight: 10
+ Script: <"
+ specialeffect(EF_HEAL3, AREA, playerattached());
+ /* Probably it should be 5% instead of 7%, but we'll follow the client side description... */
+ sc_start2(SC_S_LIFEPOTION, 600000, -7, 4);
+ ">
},
{
Id: 12461
AegisName: "F_Regeneration_Potion"
- Name: "F Regeneration Potion"
+ Name: "Regeneration Potion"
Type: "IT_USABLE"
Weight: 10
+ Script: <"
+ specialeffect(EF_LIGHTSPHERE, AREA, playerattached());
+ sc_start(SC_HEALPLUS, 1800000, 20);
+ ">
},
{
Id: 12462
AegisName: "F_B_Mdef_Potion"
- Name: "F B Mdef Potion"
+ Name: "Big Magic Defense Potion"
Type: "IT_USABLE"
Weight: 10
+ Script: <"
+ specialeffect(EF_SPELLBREAKER, AREA, playerattached());
+ sc_start(SC_PROTECT_MDEF, 180000, 3);
+ ">
},
{
Id: 12463
AegisName: "F_S_Mdef_Potion"
- Name: "F S Mdef Potion"
+ Name: "Small Magic Defense Potion"
Type: "IT_USABLE"
Weight: 10
+ Script: <"
+ specialeffect(EF_SPELLBREAKER, AREA, playerattached());
+ sc_start(SC_PROTECT_MDEF, 60000, 3);
+ ">
},
{
Id: 12464
AegisName: "F_B_Def_Potion"
- Name: "F B Def Potion"
+ Name: "Big Defense Potion"
Type: "IT_USABLE"
Weight: 10
+ Script: <"
+ specialeffect(EF_GUARD, AREA, playerattached());
+ sc_start(SC_PROTECT_DEF, 180000, 3);
+ ">
},
{
Id: 12465
AegisName: "F_S_Def_Potion"
- Name: "F S Def Potion"
+ Name: "Small Defense Potion"
Type: "IT_USABLE"
Weight: 10
+ Script: <"
+ specialeffect(EF_GUARD, AREA, playerattached());
+ sc_start(SC_PROTECT_DEF, 60000, 3);
+ ">
},
{
Id: 12466
@@ -73133,6 +73171,90 @@ item_db: (
OnRentalEndScript: <" sc_end(SC_ALL_RIDING); ">
},
{
+ Id: 12666
+ AegisName: "Thai_Perfume_MATK"
+ Name: "Thai Perfume(MATK)"
+ Type: "IT_USABLE"
+ Buy: 20
+ Weight: 10
+ Trade: {
+ nodrop: true
+ notrade: true
+ noselltonpc: true
+ nocart: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <"
+ specialeffect(EF_MAGICALATTHIT, AREA, playerattached());
+ sc_start(SC_SKF_MATK, 600000, 24);
+ ">
+},
+{
+ Id: 12667
+ AegisName: "Thai_Perfume_ATK"
+ Name: "Thai Perfume(ATK)"
+ Type: "IT_USABLE"
+ Buy: 20
+ Weight: 10
+ Trade: {
+ nodrop: true
+ notrade: true
+ noselltonpc: true
+ nocart: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <"
+ specialeffect(EF_MAGICALATTHIT, AREA, playerattached());
+ sc_start(SC_SKF_ATK, 600000, 24);
+ ">
+},
+{
+ Id: 12668
+ AegisName: "Thai_Perfume_ASPD"
+ Name: "Thai Perfume(ASPD)"
+ Type: "IT_USABLE"
+ Buy: 20
+ Weight: 10
+ Trade: {
+ nodrop: true
+ notrade: true
+ noselltonpc: true
+ nocart: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <"
+ specialeffect(EF_MAGICALATTHIT, AREA, playerattached());
+ sc_start(SC_SKF_ASPD, 600000, 3);
+ ">
+},
+{
+ Id: 12669
+ AegisName: "Thai_Perfume_CAST"
+ Name: "Thai Perfume(CAST)"
+ Type: "IT_USABLE"
+ Buy: 20
+ Weight: 10
+ Trade: {
+ nodrop: true
+ notrade: true
+ noselltonpc: true
+ nocart: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <"
+ specialeffect(EF_MAGICALATTHIT, AREA, playerattached());
+ sc_start(SC_SKF_CAST, 600000, 5);
+ ">
+},
+{
Id: 12701
AegisName: "Old_Blue_Box_F"
Name: "Old Blue Box"
@@ -73501,7 +73623,7 @@ item_db: (
sitting: true
}
Stack: [20, 1]
- Script: <" itemskill RK_CRUSHSTRIKE, 1; ">
+ Script: <" itemskill(RK_CRUSHSTRIKE, 1, ISF_CHECKCONDITIONS); ">
},
{
Id: 12727
@@ -74204,6 +74326,33 @@ item_db: (
">
},
{
+ Id: 12883
+ AegisName: "Almighty"
+ Name: "Almighty"
+ Type: "IT_USABLE"
+ Buy: 20
+ Weight: 10
+ Trade: {
+ nodrop: true
+ notrade: true
+ noselltonpc: true
+ nocart: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <"
+ specialeffect(EF_BASH3D, AREA, playerattached());
+ sc_start(SC_FOOD_STR_CASH, 1800000, 10);
+ sc_start(SC_FOOD_VIT_CASH, 1800000, 10);
+ sc_start(SC_FOOD_AGI_CASH, 1800000, 10);
+ sc_start(SC_FOOD_INT_CASH, 1800000, 10);
+ sc_start(SC_FOOD_DEX_CASH, 1800000, 10);
+ sc_start(SC_FOOD_LUK_CASH, 1800000, 10);
+ sc_start2(SC_ALMIGHTY, 1800000, 30, 30);
+ ">
+},
+{
Id: 12900
AegisName: "Battle_Manual_Box"
Name: "Battle Manual Box"
@@ -92168,7 +92317,7 @@ item_db: (
Name: "Chemical Protection Helm Scroll"
Type: "IT_USABLE"
Weight: 10
- Script: <" itemskill(AM_CP_HELM, 5); ">
+ Script: <" itemskill(AM_CP_HELM, 5, ISF_CHECKCONDITIONS); ">
},
{
Id: 14518
@@ -92176,7 +92325,7 @@ item_db: (
Name: "Chemical Protection Shield Scrol"
Type: "IT_USABLE"
Weight: 10
- Script: <" itemskill(AM_CP_SHIELD, 5); ">
+ Script: <" itemskill(AM_CP_SHIELD, 5, ISF_CHECKCONDITIONS); ">
},
{
Id: 14519
@@ -92184,7 +92333,7 @@ item_db: (
Name: "Chemical Protection Armor Scroll"
Type: "IT_USABLE"
Weight: 10
- Script: <" itemskill(AM_CP_ARMOR, 5); ">
+ Script: <" itemskill(AM_CP_ARMOR, 5, ISF_CHECKCONDITIONS); ">
},
{
Id: 14520
@@ -92192,7 +92341,7 @@ item_db: (
Name: "Chemical Protection Weapon Scroll"
Type: "IT_USABLE"
Weight: 10
- Script: <" itemskill(AM_CP_WEAPON, 5); ">
+ Script: <" itemskill(AM_CP_WEAPON, 5, ISF_CHECKCONDITIONS); ">
},
{
Id: 14521
@@ -93104,7 +93253,7 @@ item_db: (
noselltonpc: true
nogstorage: true
}
- Script: <" itemskill(CASH_INCAGI, 10, ISF_INSTANTCAST | ISF_CASTONSELF); ">
+ Script: <" itemskill(CASH_INCAGI, 10, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF); ">
},
{
Id: 14590
@@ -93968,6 +94117,24 @@ item_db: (
},
*/
{
+ Id: 16254
+ AegisName: "Energizing_Potion_Box"
+ Name: "Activation Potion Box"
+ Type: "IT_CASH"
+ Buy: 20
+ Weight: 10
+ Trade: {
+ nodrop: true
+ notrade: true
+ noselltonpc: true
+ nocart: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <" getitem(Acti_Potion, 5); ">
+},
+{
Id: 16257
AegisName: "Buddah_Scroll"
Name: "Buddah Scroll"
@@ -94436,6 +94603,23 @@ item_db: (
Script: <" getitem(Clothing_Dye_Coupon2, 1); ">
},
{
+ Id: 17224
+ AegisName: "Almighty_Box"
+ Name: "Almighty Box"
+ Type: "IT_CASH"
+ Weight: 10
+ Trade: {
+ nodrop: true
+ notrade: true
+ noselltonpc: true
+ nocart: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <" getitem(Almighty, 10); ">
+},
+{
Id: 17336
AegisName: "Jeremy_Beauty_Coupon_Box"
Name: "Jeremy's Beauty Coupon Box"
@@ -98615,6 +98799,11 @@ item_db: (
Name: "Ein_1HMAGGER"
},
{
+ Id: 28900
+ AegisName: "Praetorian_Shield"
+ Name: "Praetorian Shield"
+},
+{
Id: 28922
AegisName: "Herald_Of_GOD_IL"
Name: "Herald_Of_GOD_IL"
diff --git a/db/pre-re/mob_db.conf b/db/pre-re/mob_db.conf
index 78e255f36..eb0cf663b 100644
--- a/db/pre-re/mob_db.conf
+++ b/db/pre-re/mob_db.conf
@@ -57,9 +57,9 @@ mob_db: (
}
ViewRange: view range (int, defaults to 1)
ChaseRange: chase range (int, defaults to 1)
- Size: size (string, defaults to "Size_Medium")
+ Size: size (string, defaults to "Size_Small")
Race: race (string, defaults to "RC_Formless")
- Element: (type, level)
+ Element: (type, level) (string/int, defaults to "Ele_Neutral"/1)
Mode: {
CanMove: true/false (bool, defaults to false)
Looter: true/false (bool, defaults to false)
@@ -50153,4 +50153,50 @@ mob_db: (
DamageMotion: 480
MvpExp: 0
},
+{
+ Id: 2248
+ SpriteName: "GOLDPORING"
+ Name: "Golden Poring"
+ Lv: 1
+ Hp: 15
+ Sp: 1
+ Exp: 0
+ JExp: 0
+ AttackRange: 0
+ Attack: [0, 0]
+ Def: 127
+ Mdef: 5
+ Stats: {
+ Str: 1
+ Agi: 1
+ Vit: 1
+ Int: 1
+ Dex: 999
+ Luk: 1
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Medium"
+ Race: "RC_Plant"
+ Element: ("Ele_Water", 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ }
+ MoveSpeed: 400
+ AttackDelay: 1872
+ AttackMotion: 672
+ DamageMotion: 480
+ MvpExp: 0
+// Drops: {
+// Blue_Card_C: 4000
+// BlueCard_2: 4000
+// BlueCard_0: 4000
+// BlueCard_1: 4000
+// BlueCard_W: 4000
+// BlueCard_R: 4000
+// RWC_Cele_Fire: 10000
+// RWC_Cele_Fire2: 10000
+// }
+},
)
diff --git a/db/pre-re/mob_skill_db.conf b/db/pre-re/mob_skill_db.conf
index 11af05e98..b6e3af07f 100644
--- a/db/pre-re/mob_skill_db.conf
+++ b/db/pre-re/mob_skill_db.conf
@@ -36,20 +36,20 @@ mob_skill_db:(
<Skill_Constant>: {
ClearSkills: (boolean, defaults to false) allows cleaning all previous defined skills for the mob.
SkillLevel: (int, defaults to 1)
- SkillState: (int, defaults to 0)
- SkillTarget: (int, defaults to 0)
+ SkillState: (string, defaults to "MSS_ANY")
+ SkillTarget: (string, defaults to "MST_TARGET")
Rate: (int, defaults to 1)
CastTime: (int, defaults to 0)
Delay: (int, defaults to 0)
Cancelable: (boolean, defaults to false)
- CastCondition: (int, defaults to 0)
+ CastCondition: (string, defaults to "MSC_ALWAYS")
ConditionData: (int, defaults to 0)
val0: (int, defaults to 0)
val1: (int, defaults to 0)
val2: (int, defaults to 0)
val3: (int, defaults to 0)
val4: (int, defaults to 0)
- Emotion: (int, defaults to 0)
+ Emotion: (int, defaults to -1)
ChatMsgID: (int, defaults to 0)
}
}
diff --git a/db/pre-re/pet_db.conf b/db/pre-re/pet_db.conf
index 112ce54eb..5c3949572 100644
--- a/db/pre-re/pet_db.conf
+++ b/db/pre-re/pet_db.conf
@@ -34,1518 +34,1037 @@ pet_db:(
{
// ================ Mandatory fields ==============================
Id: ID (int)
- SpriteName: "Sprite_Name" (string)
Name: "Pet Name" (string)
+ EggItem: "Egg Item Constant" (string)
// ================ Optional fields ===============================
- TamingItem: Taming Item (string, defaults to 0)
- EggItem: Egg Id (string, defaults to 0)
- AccessoryItem: Equipment Id (string, defaults to 0)
- FoodItem: Food Id (string, defaults to 0)
- FoodEffectiveness: hunger points (int, defaults to 0)
- HungerDelay: hunger time (int, defaults to 0)
+ TamingItem: "Taming Item Constant" (string, defaults to 0)
+ FoodItem: "Food Item Constant" (string, defaults to "Pet_Food" (ID=537))
+ AccessoryItem: "Equipment Item Constant" (string, defaults to 0)
+ FoodEffectiveness: hunger points (int, defaults to 80)
+ HungerDelay: hunger time (int, defaults to 60)
+ HungerDecrement: hunger points (int, defaults to 1)
Intimacy: {
- Initial: start intimacy (int, defaults to 0)
- FeedIncrement: feeding intimacy (int, defaults to 0)
- OverFeedDecrement: overfeeding intimacy (int, defaults to 0)
- OwnerDeathDecrement: owner die intimacy (int, defaults to 0)
+ Initial: start intimacy (int, defaults to 250)
+ FeedIncrement: feeding intimacy (int, defaults to 10)
+ OverFeedDecrement: overfeeding intimacy (int, defaults to 100)
+ OwnerDeathDecrement: owner die intimacy (int, defaults to 20)
+ StarvingDelay: starving time (int, defaults to 20)
+ StarvingDecrement: starving intimacy (int, defaults to 20)
}
- CaptureRate: capture rate (int, defaults to 0)
- Speed: speed (int, defaults to 0)
+ CaptureRate: capture rate (int, defaults to 1000)
+ Speed: speed (int, defaults to 150)
SpecialPerformance: true/false (boolean, defaults to false)
TalkWithEmotes: convert talk (boolean, defaults to false)
- AttackRate: attack rate (int, defaults to 0)
- DefendRate: Defence attack (int, defaults to 0)
- ChangeTargetRate: change target (int, defaults to 0)
+ AttackRate: attack rate (int, defaults to 300)
+ DefendRate: Defence attack (int, defaults to 300)
+ ChangeTargetRate: change target (int, defaults to 800)
+ AutoFeed: true/false (boolean, defaults to false)
+ PetScript: <" Pet Script (can also be multi-line) ">
+ EquipScript: <" Equip Script (can also be multi-line) ">
Evolve: {
- EggID: { (string, Evolved Pet EggID)
- Name: Amount (items required to perform evolution)
+ EggID: { (string, Evolved Pet EggID)
+ Name: Amount (items required to perform evolution)
...
}
}
- AutoFeed: true/false (boolean, defaults to false)
- PetScript: <" Pet Script (can also be multi-line) ">
- EquipScript: <" Equip Script (can also be multi-line) ">
},
**************************************************************************/
{
Id: 1002
- SpriteName: "PORING"
Name: "Poring"
TamingItem: "Unripe_Apple"
EggItem: "Poring_Egg"
AccessoryItem: "Backpack"
FoodItem: "Apple_Juice"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 2000
- Speed: 150
SpecialPerformance: true
AttackRate: 350
DefendRate: 400
- ChangeTargetRate: 800
PetScript: <" petloot(10); ">
EquipScript: <"
- bonus(bLuk, 2);
- bonus(bCritical, 1);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bLuk, 2);
+ bonus(bCritical, 1);
+ }
">
},
{
Id: 1011
- SpriteName: "CHONCHON"
Name: "ChonChon"
TamingItem: "Rotten_Fish"
EggItem: "Chonchon_Egg"
AccessoryItem: "Monster_Oxygen_Mask"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 1500
- Speed: 150
SpecialPerformance: true
AttackRate: 500
DefendRate: 500
ChangeTargetRate: 250
PetScript: <" petskillbonus(bAgi, 4, 10, 50); ">
EquipScript: <"
- bonus(bAgi, 1);
- bonus(bFlee, 2);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bAgi, 1);
+ bonus(bFlee, 2);
+ }
">
},
{
Id: 1014
- SpriteName: "SPORE"
Name: "Spore"
TamingItem: "Dew_Laden_Moss"
EggItem: "Spore_Egg"
AccessoryItem: "Bark_Shorts"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 1500
- Speed: 150
AttackRate: 350
DefendRate: 500
ChangeTargetRate: 500
PetScript: <" petrecovery(SC_POISON, 60); ">
EquipScript: <"
- bonus(bHit, 5);
- bonus(bAtk, -2);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bHit, 5);
+ bonus(bAtk, -2);
+ }
">
},
{
Id: 1019
- SpriteName: "PECOPECO"
Name: "PecoPeco"
TamingItem: "Fatty_Chubby_Earthworm"
EggItem: "PecoPeco_Egg"
AccessoryItem: "Battered_Pot"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 1000
- Speed: 150
SpecialPerformance: true
AttackRate: 400
DefendRate: 500
- ChangeTargetRate: 800
PetScript: <" petskillbonus(bSpeedRate, 25, 20, 20); ">
EquipScript: <"
- bonus(bMaxHP, 150);
- bonus(bMaxSP, -10);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bMaxHP, 150);
+ bonus(bMaxSP, -10);
+ }
">
},
{
Id: 1023
- SpriteName: "ORK_WARRIOR"
Name: "Orc Warrior"
TamingItem: "Horror_Of_Tribe"
EggItem: "Orc_Warrior_Egg"
AccessoryItem: "Wild_Flower"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
SpecialPerformance: true
AttackRate: 600
DefendRate: 200
ChangeTargetRate: 300
PetScript: <" petskillattack("NPC_PIERCINGATT", 100, 1, 0, 10); ">
EquipScript: <"
- bonus(bAtk, 10);
- bonus(bDef, -3);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bAtk, 10);
+ bonus(bDef, -3);
+ }
">
},
{
Id: 1026
- SpriteName: "MUNAK"
Name: "Munak"
TamingItem: "No_Recipient"
EggItem: "Munak_Egg"
AccessoryItem: "Punisher"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
- AttackRate: 300
DefendRate: 750
ChangeTargetRate: 300
PetScript: <" petskillattack("NPC_DARKNESSATTACK", 444, 1, 0, 10); ">
EquipScript: <"
- bonus(bInt, 1);
- bonus(bDef, 1);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bInt, 1);
+ bonus(bDef, 1);
+ }
">
},
{
Id: 1029
- SpriteName: "ISIS"
Name: "Isis"
TamingItem: "Armlet_Of_Obedience"
EggItem: "Isis_Egg"
AccessoryItem: "Queens_Hair_Ornament"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 500
- Speed: 150
AttackRate: 650
DefendRate: 450
ChangeTargetRate: 150
PetScript: <" petskillsupport("PR_MAGNIFICAT", 2, 60, 50, 50); ">
EquipScript: <"
- bonus(bMatkRate, -1);
- bonus(bAtkRate, 1);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bMatkRate, -1);
+ bonus(bAtkRate, 1);
+ }
">
},
{
Id: 1031
- SpriteName: "POPORING"
Name: "Poporing"
TamingItem: "Bitter_Herb"
EggItem: "Poporing_Egg"
AccessoryItem: "Backpack"
FoodItem: "Green_Herb"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 1000
- Speed: 150
SpecialPerformance: true
- AttackRate: 300
DefendRate: 500
ChangeTargetRate: 400
PetScript: <" petloot(15); ">
EquipScript: <"
- bonus(bLuk, 2);
- bonus2(bSubEle, Ele_Poison, 10);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bLuk, 2);
+ bonus2(bSubEle, Ele_Poison, 10);
+ }
">
},
{
Id: 1035
- SpriteName: "HUNTER_FLY"
Name: "Hunter Fly"
TamingItem: "Monster_Juice"
EggItem: "Hunter_Fly_Egg"
AccessoryItem: "Monster_Oxygen_Mask"
FoodItem: "Red_Gemstone"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 500
- Speed: 150
SpecialPerformance: true
AttackRate: 500
DefendRate: 500
ChangeTargetRate: 200
PetScript: <" petskillattack("NPC_WINDATTACK", 888, 2, 0, 10); ">
EquipScript: <"
- bonus(bFlee, -5);
- bonus(bFlee2, 2);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bFlee, -5);
+ bonus(bFlee2, 2);
+ }
">
},
{
Id: 1042
- SpriteName: "STEEL_CHONCHON"
Name: "Steel ChonChon"
TamingItem: "Lusty_Iron"
EggItem: "Steel_Chonchon_Egg"
AccessoryItem: "Monster_Oxygen_Mask"
FoodItem: "Iron_Ore"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 1000
- Speed: 150
SpecialPerformance: true
AttackRate: 500
DefendRate: 500
ChangeTargetRate: 200
PetScript: <" petskillbonus(bAgiVit, 4, 20, 40); ">
EquipScript: <"
- bonus(bFlee, 6);
- bonus(bAgi, -1);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bFlee, 6);
+ bonus(bAgi, -1);
+ }
">
},
{
Id: 1049
- SpriteName: "PICKY"
Name: "Picky"
TamingItem: "Earthworm_The_Dude"
EggItem: "Picky_Egg"
AccessoryItem: "Tiny_Egg_Shell"
FoodItem: "Red_Herb"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 40
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 2000
- Speed: 150
SpecialPerformance: true
AttackRate: 500
DefendRate: 600
ChangeTargetRate: 50
PetScript: <" petskillbonus(bStr, 3, 10, 50); ">
EquipScript: <"
- bonus(bStr, 1);
- bonus(bAtk, 5);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bStr, 1);
+ bonus(bAtk, 5);
+ }
">
},
{
Id: 1052
- SpriteName: "ROCKER"
Name: "Rocker"
TamingItem: "Singing_Flower"
EggItem: "Rocker_Egg"
AccessoryItem: "Rocker_Glasses"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 1500
- Speed: 150
AttackRate: 350
DefendRate: 350
ChangeTargetRate: 600
PetScript: <" petskillbonus(bAllStats, 1, 10, 50); ">
EquipScript: <"
- bonus(bHPrecovRate, 5);
- bonus(bMaxHP, 25);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bHPrecovRate, 5);
+ bonus(bMaxHP, 25);
+ }
">
},
{
Id: 1056
- SpriteName: "SMOKIE"
Name: "Smokie"
TamingItem: "Baked_Yam"
EggItem: "Smokie_Egg"
AccessoryItem: "Red_Muffler"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 1000
- Speed: 150
SpecialPerformance: true
AttackRate: 600
DefendRate: 600
ChangeTargetRate: 100
PetScript: <" petskillbonus(bPerfectHide, 1, 3600, 0); ">
EquipScript: <"
- bonus(bAgi, 1);
- bonus(bFlee2, 1);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bAgi, 1);
+ bonus(bFlee2, 1);
+ }
">
},
{
Id: 1057
- SpriteName: "YOYO"
Name: "Yoyo"
TamingItem: "Tropical_Banana"
EggItem: "Yoyo_Egg"
AccessoryItem: "Monkey_Circlet"
FoodItem: "Banana_Juice"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 1000
- Speed: 150
SpecialPerformance: true
- AttackRate: 300
- DefendRate: 800
ChangeTargetRate: 400
PetScript: <" petloot(20); ">
EquipScript: <"
- bonus(bCritical, 3);
- bonus(bLuk, -1);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bCritical, 3);
+ bonus(bLuk, -1);
+ }
">
},
{
Id: 1063
- SpriteName: "LUNATIC"
Name: "Lunatic"
TamingItem: "Rainbow_Carrot"
EggItem: "Lunatic_Egg"
AccessoryItem: "Silk_Ribbon"
FoodItem: "Carrot_Juice"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 40
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 1500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
ChangeTargetRate: 1000
PetScript: <" petskillbonus(bLuk, 3, 10, 50); ">
EquipScript: <"
- bonus(bCritical, 2);
- bonus(bAtk, 2);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bCritical, 2);
+ bonus(bAtk, 2);
+ }
">
},
{
Id: 1077
- SpriteName: "POISON_SPORE"
Name: "Poison Spore"
TamingItem: "Deadly_Noxious_Herb"
EggItem: "Poison_Spore_Egg"
AccessoryItem: "Bark_Shorts"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 1000
- Speed: 150
AttackRate: 600
DefendRate: 200
ChangeTargetRate: 400
PetScript: <" petskillattack("NPC_POISON", 20, 0, 0, 10); ">
EquipScript: <"
- bonus(bStr, 1);
- bonus(bInt, 1);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bStr, 1);
+ bonus(bInt, 1);
+ }
">
},
{
Id: 1101
- SpriteName: "BAPHOMET_"
Name: "Baphomet Jr."
TamingItem: "Book_Of_Devil"
EggItem: "Bapho_Jr_Egg"
AccessoryItem: "Skull_Helm"
FoodItem: "Honey"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 200
- Speed: 150
AttackRate: 1000
DefendRate: 100
ChangeTargetRate: 200
PetScript: <" petskillattack("NPC_DARKNESSATTACK", 1776, 4, 0, 5); ">
EquipScript: <"
- bonus(bDef, 1);
- bonus(bMdef, 1);
- bonus2(bResEff, Eff_Stun, -100);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bDef, 1);
+ bonus(bMdef, 1);
+ bonus2(bResEff, Eff_Stun, -100);
+ }
">
},
{
Id: 1107
- SpriteName: "DESERT_WOLF_B"
Name: "Baby Desert Wolf"
TamingItem: "Well_Dried_Bone"
EggItem: "Baby_Desert_Wolf_Egg"
AccessoryItem: "Transparent_Headgear"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 40
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 1000
- Speed: 150
AttackRate: 400
DefendRate: 400
ChangeTargetRate: 400
PetScript: <" petskillattack("SM_PROVOKE", 1, 0, 0, 5);">
EquipScript: <"
- bonus(bInt, 1);
- bonus(bMaxSP, 50);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bInt, 1);
+ bonus(bMaxSP, 50);
+ }
">
},
{
Id: 1109
- SpriteName: "DEVIRUCHI"
Name: "Deviruchi"
TamingItem: "Contracts_In_Shadow"
EggItem: "Deviruchi_Egg"
AccessoryItem: "Pacifier"
FoodItem: "Shoot"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 500
- Speed: 150
- AttackRate: 800
DefendRate: 200
ChangeTargetRate: 100
PetScript: <" petskillbonus(bAgiDexStr, 6, 20, 40); ">
EquipScript: <"
- bonus(bMatkRate, 1);
- bonus(bAtkRate, 1);
- bonus(bMaxHPrate, -3);
- bonus(bMaxSPrate, -3);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bMatkRate, 1);
+ bonus(bAtkRate, 1);
+ bonus(bMaxHPrate, -3);
+ bonus(bMaxSPrate, -3);
+ }
">
},
{
Id: 1110
- SpriteName: "DOKEBI"
Name: "Dokebi"
TamingItem: "Old_Broom"
EggItem: "Dokkaebi_Egg"
AccessoryItem: "Wig"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("BS_HAMMERFALL", 1, 0, 0, 10); ">
EquipScript: <"
- bonus(bMatkRate, 1);
- bonus(bAtkRate, -1);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bMatkRate, 1);
+ bonus(bAtkRate, -1);
+ }
">
},
{
Id: 1113
- SpriteName: "DROPS"
Name: "Drops"
TamingItem: "Orange_Juice"
EggItem: "Drops_Egg"
AccessoryItem: "Backpack"
FoodItem: "Yellow_Herb"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 40
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 1500
- Speed: 150
SpecialPerformance: true
- AttackRate: 300
DefendRate: 400
ChangeTargetRate: 500
PetScript: <" petloot(10); ">
EquipScript: <"
- bonus(bHit, 3);
- bonus(bAtk, 3);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bHit, 3);
+ bonus(bAtk, 3);
+ }
">
},
{
Id: 1155
- SpriteName: "PETIT"
Name: "Petite"
TamingItem: "Shining_Stone"
EggItem: "Green_Petite_Egg"
AccessoryItem: "Stellar_Hairpin"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
- AttackRate: 800
DefendRate: 400
ChangeTargetRate: 100
PetScript: <" petskillattack("WZ_HEAVENDRIVE", 500, 1, 0, 10); ">
EquipScript: <"
- bonus(bDef, -2);
- bonus(bMdef, -2);
- bonus(bAspdRate, 1);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bDef, -2);
+ bonus(bMdef, -2);
+ bonus(bAspdRate, 1);
+ }
">
},
{
Id: 1167
- SpriteName: "SAVAGE_BABE"
Name: "Savage Babe"
TamingItem: "Sweet_Milk"
EggItem: "Savage_Bebe_Egg"
AccessoryItem: "Green_Lace"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 40
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 1500
- Speed: 150
AttackRate: 500
DefendRate: 500
ChangeTargetRate: 200
PetScript: <" petskillbonus(bVit, 4, 10, 50); ">
EquipScript: <"
- bonus(bVit, 1);
- bonus(bMaxHP, 50);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bVit, 1);
+ bonus(bMaxHP, 50);
+ }
">
},
{
Id: 1170
- SpriteName: "SOHEE"
Name: "Sohee"
TamingItem: "Silver_Knife_Of_Chaste"
EggItem: "Sohee_Egg"
AccessoryItem: "Golden_Bell"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 500
- Speed: 150
AttackRate: 100
DefendRate: 1000
ChangeTargetRate: 200
PetScript: <" petskillsupport(AL_HEAL, 10, 60, 33, 100); ">
EquipScript: <"
- bonus(bStr, 1);
- bonus(bDex, 1);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bStr, 1);
+ bonus(bDex, 1);
+ }
">
},
{
Id: 1188
- SpriteName: "BON_GUN"
Name: "Bon Gun"
TamingItem: "Heart_Of_Her"
EggItem: "Bongun_Egg"
AccessoryItem: "Sword_Of_Grave_Keeper"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
SpecialPerformance: true
AttackRate: 600
DefendRate: 200
ChangeTargetRate: 400
PetScript: <" petskillattack("NPC_DARKNESSATTACK", 555, 1, 1, 1); ">
EquipScript: <"
- bonus(bVit, 1);
- bonus2(bResEff, Eff_Stun, 100);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bVit, 1);
+ bonus2(bResEff, Eff_Stun, 100);
+ }
">
},
{
Id: 1200
- SpriteName: "ZHERLTHSH"
Name: "Zealotus"
TamingItem: "Prohibition_Red_Candle"
EggItem: "Zherlthsh_Egg"
FoodItem: "Immortal_Heart"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 300
- Speed: 150
AttackRate: 1000
DefendRate: 100
ChangeTargetRate: 500
PetScript: <" petskillattack("AS_SONICBLOW", 1, 0, 0, 3); ">
EquipScript: <"
- bonus2(bAddRace, RC_DemiPlayer, 2);
- bonus2(bMagicAddRace, RC_DemiPlayer, 2);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus2(bAddRace, RC_DemiPlayer, 2);
+ bonus2(bMagicAddRace, RC_DemiPlayer, 2);
+ }
">
},
{
Id: 1245
- SpriteName: "GOBLINE_XMAS"
Name: "Christmas Goblin"
TamingItem: "Sweet_Candy_Striper"
EggItem: "Santa_Goblin_Egg"
FoodItem: "Scell"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 2000
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("MG_SIGHT", 5, 0, 5, 5); ">
EquipScript: <"
- bonus(bMaxHP, 30);
- bonus2(bSubEle, Ele_Water, 1);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bMaxHP, 30);
+ bonus2(bSubEle, Ele_Water, 1);
+ }
">
},
{
Id: 1275
- SpriteName: "ALICE"
Name: "Alice"
TamingItem: "Sway_Apron"
EggItem: "Alice_Egg"
FoodItem: "White_Potion"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 800
- Speed: 150
AttackRate: 100
DefendRate: 1000
ChangeTargetRate: 200
PetScript: <" petskillsupport("AL_HEAL", 5, 60, 25, 100); ">
EquipScript: <"
- bonus(bMdef, 1);
- bonus2(bSubRace, RC_DemiPlayer, 1);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bMdef, 1);
+ bonus2(bSubRace, RC_DemiPlayer, 1);
+ }
">
},
// New Pets
{
Id: 1122
- SpriteName: "GOBLIN_1"
Name: "Goblin"
TamingItem: "Knife_Goblin_Ring"
EggItem: "Knife_Goblin_Egg"
FoodItem: "Green_Apple"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 800
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("NPC_WINDATTACK", 5, 0, 5, 5); ">
},
{
Id: 1123
- SpriteName: "GOBLIN_2"
Name: "Goblin"
TamingItem: "Flail_Goblin_Ring"
EggItem: "Flail_Goblin_Egg"
FoodItem: "Green_Apple"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 800
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("NPC_FIREATTACK", 5, 0, 5, 5); ">
},
{
Id: 1125
- SpriteName: "GOBLIN_4"
Name: "Goblin"
TamingItem: "Hammer_Goblin_Ring"
EggItem: "Hammer_Goblin_Egg"
FoodItem: "Green_Apple"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 800
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("NPC_GROUNDATTACK", 5, 0, 5, 5); ">
},
{
Id: 1208
- SpriteName: "WANDER_MAN"
Name: "Wanderer"
TamingItem: "Skull_Of_Vagabond"
EggItem: "Wanderer_Egg"
FoodItem: "Spirit_Liquor"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 800
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("NPC_UNDEADATTACK", 5, 0, 5, 5); ">
},
{
Id: 1382
- SpriteName: "DIABOLIC"
Name: "Diabolic"
TamingItem: "Red_Burning_Stone"
EggItem: "Diabolic_Egg"
FoodItem: "Meat_Veg_Skewer"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
- CaptureRate: 800
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("WZ_METEOR", 2, 0, 5, 5); ">
},
{
Id: 1385
- SpriteName: "DELETER_"
Name: "Deleter"
TamingItem: "Holy_Marble"
EggItem: "Red_Deleter_Egg"
FoodItem: "Whole_Barbecue"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 800
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("SM_MAGNUM", 5, 0, 5, 5); ">
},
{
Id: 1879
- SpriteName: "ECLIPSE_P"
Name: "Spring Rabbit"
EggItem: "Spring_Rabbit_Egg"
FoodItem: "Bok_Choy"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 2000
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("TF_THROWSTONE", 1, 0, 5, 5); ">
},
// Episode 12
{
Id: 1963
- SpriteName: "P_CHUNG_E"
Name: "New Year Doll"
EggItem: "New_Year_Doll_Egg"
FoodItem: "Mojji"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 800
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("CR_SHIELDCHARGE", 5, 0, 5, 5); ">
},
// Episode 13
{
Id: 1815
- SpriteName: "EVENT_RICECAKE"
Name: "Rice Cake"
EggItem: "Rice_Cake_Egg"
FoodItem: "Green_Herb"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 2000
- Speed: 150
SpecialPerformance: true
AttackRate: 500
DefendRate: 500
ChangeTargetRate: 200
PetScript: <" petskillsupport("CR_DEFENDER", 3, 240, 50, 100); ">
EquipScript: <"
- bonus2(bSubEle, Ele_Neutral, 1);
- bonus(bMaxHPrate, -1);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus2(bSubEle, Ele_Neutral, 1);
+ bonus(bMaxHPrate, -1);
+ }
">
},
{
Id: 2210
- SpriteName: "XMAS_LUNATIC"
Name: "Christmas Snow Rabbit"
EggItem: "Snow_Rabbit_Egg"
FoodItem: "Candy"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
- Speed: 150
SpecialPerformance: true
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus2(bExpAddRace, RC_All, 5); ">
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL)
+ bonus2(bExpAddRace, RC_All, 5);
+ ">
},
// Episode 13.2
{
Id: 1040
- SpriteName: "GOLEM"
Name: "Golem"
TamingItem: "Magical_Lithography"
EggItem: "Golem_Egg"
AccessoryItem: "Windup_Spring"
FoodItem: "Mystic_Stone"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus(bMaxHP, 100);
- bonus(bFlee, -5);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bMaxHP, 100);
+ bonus(bFlee, -5);
+ }
">
},
{
Id: 1143
- SpriteName: "MARIONETTE"
Name: "Marionette"
TamingItem: "Delicious_Shaved_Ice"
EggItem: "Marionette_Egg"
AccessoryItem: "Star_Hairband"
FoodItem: "Small_Snow_Flower"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus(bSPrecovRate, 3); ">
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL)
+ bonus(bSPrecovRate, 3);
+ ">
},
{
Id: 1148
- SpriteName: "MEDUSA"
Name: "Medusa"
TamingItem: "Splendid_Mirror"
EggItem: "Medusa_Egg"
AccessoryItem: "Queens_Coronet"
FoodItem: "Apple_Pudding"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus(bVit, 1);
- bonus2(bResEff, Eff_Stone, 500);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bVit, 1);
+ bonus2(bResEff, Eff_Stone, 500);
+ }
">
},
{
Id: 1179
- SpriteName: "WHISPER"
Name: "Whisper"
TamingItem: "Fit_Pipe"
EggItem: "Whisper_Egg"
AccessoryItem: "Spirit_Chain_"
FoodItem: "Damp_Darkness"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus(bFlee, 7);
- bonus(bDef, -3);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bFlee, 7);
+ bonus(bDef, -3);
+ }
">
},
{
Id: 1299
- SpriteName: "GOBLIN_LEADER"
Name: "Goblin Leader"
TamingItem: "Staff_Of_Leader"
EggItem: "Goblin_Leader_Egg"
AccessoryItem: "Nice_Badge"
FoodItem: "Big_Cell"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 50
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus2(bAddRace, RC_DemiPlayer, 3); ">
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL)
+ bonus2(bAddRace, RC_DemiPlayer, 3);
+ ">
},
{
Id: 1370
- SpriteName: "SUCCUBUS"
Name: "Succubus"
TamingItem: "Boys_Naivety"
EggItem: "Succubus_Egg"
AccessoryItem: "Black_Butterfly_Mask"
FoodItem: "Vital_Flower_"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus2(bHPDrainRate, 50, 5); ">
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL)
+ bonus2(bHPDrainRate, 50, 5);
+ ">
},
{
Id: 1374
- SpriteName: "INCUBUS"
Name: "Incubus"
TamingItem: "Grils_Naivety"
EggItem: "Incubus_Egg"
AccessoryItem: "Ball_Mask"
FoodItem: "Vital_Flower"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 50
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus(bMaxSPrate, 3); ">
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL)
+ bonus(bMaxSPrate, 3);
+ ">
},
{
Id: 1379
- SpriteName: "NIGHTMARE_TERROR"
Name: "Nightmare Terror"
TamingItem: "Hell_Contract"
EggItem: "Nightmare_Terror_Egg"
AccessoryItem: "Hell_Horn"
FoodItem: "Fresh_Plant"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus2(bResEff, Eff_Sleep, 10000); ">
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL)
+ bonus2(bResEff, Eff_Sleep, 10000);
+ ">
},
{
Id: 1401
- SpriteName: "SHINOBI"
Name: "Shinobi"
TamingItem: "Kuloren"
EggItem: "Shinobi_Egg"
AccessoryItem: "Wine_On_Sleeve"
FoodItem: "Grilled_Rice_Cake"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus(bAgi, 2); ">
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL)
+ bonus(bAgi, 2);
+ ">
},
{
Id: 1404
- SpriteName: "MIYABI_NINGYO"
Name: "Miyabi Doll"
TamingItem: "Gril_Doll"
EggItem: "Miyabi_Ningyo_Egg"
AccessoryItem: "Summer_Fan"
FoodItem: "Well_Ripened_Berry"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 15
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus(bInt, 1);
- bonus(bCastrate, -3);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bInt, 1);
+ bonus(bCastrate, -3);
+ }
">
},
{
Id: 1416
- SpriteName: "WICKED_NYMPH"
Name: "Evil Nymph"
TamingItem: "Charming_Lotus"
EggItem: "Wicked_Nymph_Egg"
AccessoryItem: "Jade_Trinket"
FoodItem: "Morning_Dew"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 15
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus(bMaxSP, 30);
- bonus(bSPrecovRate, 5);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bMaxSP, 30);
+ bonus(bSPrecovRate, 5);
+ }
">
},
{
Id: 1495
- SpriteName: "STONE_SHOOTER"
Name: "Stone Shooter"
TamingItem: "Oilpalm_Coconut"
EggItem: "Stone_Shooter_Egg"
AccessoryItem: "Apro_Hair"
FoodItem: "Plant_Neutrient"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus2(bSubEle, Ele_Fire, 3); ">
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL)
+ bonus2(bSubEle, Ele_Fire, 3);
+ ">
},
{
Id: 1504
- SpriteName: "DULLAHAN"
Name: "Dullahan"
TamingItem: "Luxury_Whisky_Bottle"
EggItem: "Dullahan_Egg"
AccessoryItem: "Death_Coil"
FoodItem: "Sunset_On_The_Rock"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus(bCritAtkRate, 5); ">
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL)
+ bonus(bCritAtkRate, 5);
+ ">
},
{
Id: 1505
- SpriteName: "LOLI_RURI"
Name: "Loli Ruri"
TamingItem: "Very_Red_Juice"
EggItem: "Loli_Ruri_Egg"
AccessoryItem: "Fashionable_Glasses"
FoodItem: "Pumpkin_Pie_"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 15
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus(bMaxHPrate, 3);
- bonus3(bAutoSpellWhenHit, "AL_HEAL", 1, 50);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bMaxHPrate, 3);
+ bonus3(bAutoSpellWhenHit, "AL_HEAL", 1, 50);
+ }
">
},
{
Id: 1513
- SpriteName: "CIVIL_SERVANT"
Name: "Mao Guai"
TamingItem: "Fan_Of_Wind"
EggItem: "Civil_Servant_Egg"
AccessoryItem: "Golden_Earing"
FoodItem: "Flavored_Alcohol"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus(bMaxSP, 10); ">
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL)
+ bonus(bMaxSP, 10);
+ ">
},
{
Id: 1519
- SpriteName: "CHUNG_E"
Name: "Green Maiden"
TamingItem: "Tantanmen"
EggItem: "Chung_E_Egg"
FoodItem: "Bun_"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 2000
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("CR_SHIELDCHARGE", 5, 0, 5, 5); ">
EquipScript: <"
- bonus(bDef, 1);
- bonus2(bSubRace, RC_DemiPlayer, 1);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus(bDef, 1);
+ bonus2(bSubRace, RC_DemiPlayer, 1);
+ }
">
},
{
Id: 1586
- SpriteName: "LEAF_CAT"
Name: "Leaf Cat"
TamingItem: "Very_Soft_Plant"
EggItem: "Leaf_Cat_Egg"
AccessoryItem: "Green_Lucky_Bag"
FoodItem: "Fish_With_Blue_Back"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus2(bSubRace, RC_Brute, 3);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL)
+ bonus2(bSubRace, RC_Brute, 3);
">
},
{
Id: 1630
- SpriteName: "BACSOJIN_"
Name: "White Lady"
TamingItem: "Shiny_Wing_Gown"
EggItem: "Bacsojin_Egg"
AccessoryItem: "Round_Hair_Ornament"
FoodItem: "Traditional_Cookie"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 2000
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
},
{
Id: 1837
- SpriteName: "IMP"
Name: "Fire Imp"
TamingItem: "Flaming_Ice"
EggItem: "Imp_Egg"
AccessoryItem: "Horn_Protector"
FoodItem: "Flame_Gemstone"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus2(bSubEle, Ele_Fire, 2);
- bonus2(bAddEle, Ele_Fire, 2);
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus2(bSubEle, Ele_Fire, 2);
+ bonus2(bAddEle, Ele_Fire, 2);
+ }
">
},
// Episode 13.2 Brasilis
{
Id: 2057
- SpriteName: "E_CRAMP"
Name: "Strange Cramp"
TamingItem: "Leaf_Cat_Ball"
EggItem: "Mystic_Leaf_Cat_Ball"
CaptureRate: 50
AttackRate: 350
DefendRate: 400
- ChangeTargetRate: 800
},
{
Id: 2081
- SpriteName: "E_HYDRA"
Name: "Strange Hydra"
TamingItem: "Leaf_Cat_Ball"
EggItem: "Mystic_Leaf_Cat_Ball"
CaptureRate: 50
AttackRate: 350
DefendRate: 400
- ChangeTargetRate: 800
},
)
diff --git a/db/pre-re/skill_db.conf b/db/pre-re/skill_db.conf
index 4cd451e7f..21fb933f4 100644
--- a/db/pre-re/skill_db.conf
+++ b/db/pre-re/skill_db.conf
@@ -43,7 +43,7 @@
Description: "Skill Description" (string) (optional but recommended)
Range: Skill Range (int) (optional, defaults to 0) (can be grouped by Levels)
Note: Range < 5 is considered Melee range.
- Hit: Hit Type (int) (optional, default "BDT_NORMAL")
+ Hit: Hit Type (int) (optional, default "BDT_NORMAL") (can be grouped by Levels)
Types - "BDT_SKILL", "BDT_MULTIHIT" or "BDT_NORMAL"
SkillType: { (bool, defaults to "Passive")
Passive: true/false (boolean, defaults to false)
@@ -78,7 +78,7 @@
HiddenTrap: true/false (boolean, defaults to false)
IsCombo: true/false (boolean, defaults to false)
}
- AttackType: "Attack Type" (string, defaults to "None")
+ AttackType: "Attack Type" (string, defaults to "None") (can be grouped by Levels)
Types: "None", "Weapon", "Magic" or "Misc"
Element: "Element Type" (string) (Optional field - Default "Ele_Neutral")
(can be grouped by Levels)
@@ -87,7 +87,7 @@
"Ele_Weapon" - Uses weapon's element.
"Ele_Endowed" - Uses Endowed element.
"Ele_Random" - Uses random element.
- DamageType: { (bool, default to "NoDamage")
+ DamageType: { (bool, default to "NK_NONE")
NoDamage: true/false No damage skill
SplashArea: true/false Has splash area (requires source modification)
SplitDamage: true/false Damage should be split among targets (requires 'SplashArea' in order to work)
@@ -103,8 +103,8 @@
Note: when positive, damage is increased by hits,
negative values just show number of hits without
increasing total damage.
- InterruptCast: Cast Interruption (bool, defaults to false)
- CastDefRate: Cast Defense Reduction (int, defaults to 0)
+ InterruptCast: Cast Interruption (bool, defaults to false) (can be grouped by Levels)
+ CastDefRate: Cast Defense Reduction (int, defaults to 0) (can be grouped by Levels)
SkillInstances: Skill instances (int, defaults to 0) (can be grouped by Levels)
Notes: max amount of skill instances to place on the ground when
player_land_skill_limit/monster_land_skill_limit is enabled. For skills
@@ -140,6 +140,8 @@
SPRateCost: SP % Cost (int, defaults to 0) (can be grouped by Levels)
Note: If positive, it is a percent of your current sp,
otherwise it is a percent of your max sp.
+ MaxHPTrigger: Max HP % trigger (int, defaults to 0) (can be grouped by Levels)
+ MaxSPTrigger: Max SP % trigger (int, defaults to 0) (can be grouped by Levels)
ZenyCost: Zeny Cost (int, defaults to 0) (can be grouped by Levels)
WeaponTypes: { (bool or string, defaults to "All")
NoWeapon: true/false (boolean, defaults to false)
@@ -215,7 +217,12 @@
ItemID or Aegis_Name : Amount (int, defaults to 0) (can be grouped by Levels)
Item example: "ID717" or "Blue_Gemstone".
Notes: Items with amount 0 will not be consumed.
- Amount can also be grouped by levels.
+ Any: true/false (boolean, defaults to false) (can be grouped by Levels)
+ }
+ Equip: {
+ ItemID or Aegis_Name : Amount (int, defaults to 1) (can be grouped by Levels)
+ Item example: "ID1103" or "Sword__".
+ Any: true/false (boolean, defaults to false) (can be grouped by Levels)
}
}
Unit: {
@@ -223,16 +230,22 @@
Layout: Unit Layout (int, defaults to 0) (can be grouped by Levels)
Range: Unit Range (int, defaults to 0) (can be grouped by Levels)
Interval: Unit Interval (int, defaults to 0) (can be grouped by Levels)
- Target: "Unit Target" (string, defaults to "None")
+ Target: "Unit Target" (string, defaults to "None") (can be grouped by Levels)
Types:
All - affects everyone
NotEnemy - affects anyone who isn't an enemy
- Friend - affects party, guildmates and neutral players
+ NotParty - affects anyone who isn't a party member
+ NotGuild - affects anyone who isn't a guild member or guild ally
+ Friend - same as NotEnemy
Party - affects party only
- Guild - affects guild only
- Ally - affects party and guildmates only
- Sameguild - affects guild but not allies
+ Guild - affects guild members and guild allies
+ Ally - affects party members, guild members and guild allies
+ Sameguild - affects guild members but not guild allies
Enemy - affects enemies only
+ Self - affects only yourself
+ GuildAlly - affects guild allies but not guild members
+ Neutral - affects anyone who isn't a party member, guild member,
+ guild ally, enemy and not yourself
None - affects nobody
Flag: {
UF_DEFNOTENEMY: true/false (boolean, defaults to false)
@@ -2850,7 +2863,13 @@ skill_db: (
Requirements: {
SPCost: 75
Items: {
- Blue_Gemstone: 1
+ Blue_Gemstone: {
+ Lv6: 1
+ Lv7: 1
+ Lv8: 1
+ Lv9: 1
+ Lv10: 1
+ }
}
}
Unit: {
@@ -6739,16 +6758,21 @@ skill_db: (
Requirements: {
SPCost: 1
Items: {
- Red_Potion: 1
- Orange_Potion: 1
- Yellow_Potion: 1
- White_Potion: 1
- Blue_Potion: 1
- Fruit_Of_Mastela: 1
- Royal_Jelly: 1
- Seed_Of_Yggdrasil: 1
- Yggdrasilberry: 1
- Berserk_Potion: 1
+ Red_Potion: {
+ Lv1: 1
+ }
+ Orange_Potion: {
+ Lv2: 1
+ }
+ Yellow_Potion: {
+ Lv3: 1
+ }
+ White_Potion: {
+ Lv4: 1
+ }
+ Blue_Potion: {
+ Lv5: 1
+ }
}
}
},
@@ -11322,7 +11346,7 @@ skill_db: (
}
AttackType: "Weapon"
Element: "Ele_Weapon"
- SplashRange: 2
+ SplashRange: 1
InterruptCast: true
SkillInstances: 13
CastTime: 2000
@@ -14309,16 +14333,22 @@ skill_db: (
Requirements: {
SPCost: 30
Items: {
- Red_Slim_Potion: 1
- Red_Slim_Potion: 1
- Red_Slim_Potion: 1
- Red_Slim_Potion: 1
- Red_Slim_Potion: 1
- Yellow_Slim_Potion: 1
- Yellow_Slim_Potion: 1
- Yellow_Slim_Potion: 1
- Yellow_Slim_Potion: 1
- White_Slim_Potion: 1
+ Red_Slim_Potion: {
+ Lv1: 1
+ Lv2: 1
+ Lv3: 1
+ Lv4: 1
+ Lv5: 1
+ }
+ Yellow_Slim_Potion: {
+ Lv6: 1
+ Lv7: 1
+ Lv8: 1
+ Lv9: 1
+ }
+ White_Slim_Potion: {
+ Lv10: 1
+ }
}
}
},
@@ -14807,8 +14837,12 @@ skill_db: (
Requirements: {
SPCost: 10
Items: {
- Mushroom_Spore: 1
- Stem: 1
+ Mushroom_Spore: {
+ Lv1: 1
+ }
+ Stem: {
+ Lv2: 1
+ }
}
}
},
@@ -17694,6 +17728,9 @@ skill_db: (
Lv10: 240000
}
CoolDown: 0
+ Requirements: {
+ HPCost: 15
+ }
},
{
Id: 691
@@ -18628,6 +18665,31 @@ skill_db: (
CoolDown: 0
Requirements: {
SPCost: 1
+ WeaponTypes: {
+ Daggers: true
+ 1HSwords: true
+ 2HSwords: true
+ 1HSpears: true
+ 2HSpears: true
+ 1HAxes: true
+ 2HAxes: true
+ Maces: true
+ 2HMaces: true
+ Staves: true
+ Bows: true
+ Knuckles: true
+ Instruments: true
+ Whips: true
+ Books: true
+ Katars: true
+ Revolvers: true
+ Rifles: true
+ GatlingGuns: true
+ Shotguns: true
+ GrenadeLaunchers: true
+ FuumaShurikens: true
+ 2HStaves: true
+ }
}
},
{
@@ -22106,8 +22168,12 @@ skill_db: (
Requirements: {
SPCost: 50
State: "MadoGear"
- Items: {
- Pilebuncker: 0
+ Equip: {
+ Pilebuncker: 1
+ Pilebuncker_S: 1
+ Pilebuncker_P: 1
+ Pilebuncker_T: 1
+ Any: true
}
}
},
@@ -22432,9 +22498,11 @@ skill_db: (
SPCost: 25
State: "MadoGear"
Items: {
- Hovering_Booster: 0
Magic_Gear_Fuel: 1
}
+ Equip: {
+ Hovering_Booster: 1
+ }
}
},
{
@@ -22561,10 +22629,18 @@ skill_db: (
SPCost: 100
State: "MadoGear"
Items: {
- Scarlet_Pts: 1
- Lime_Green_Pts: 1
- Yellow_Wish_Pts: 1
- Indigo_Pts: 1
+ Scarlet_Pts: {
+ Lv1: 1
+ }
+ Lime_Green_Pts: {
+ Lv2: 1
+ }
+ Yellow_Wish_Pts: {
+ Lv3: 1
+ }
+ Indigo_Pts: {
+ Lv4: 1
+ }
Magic_Gear_Fuel: 2
Shape_Shifter: 0
}
@@ -22870,6 +22946,17 @@ skill_db: (
}
State: "MadoGear"
Items: {
+ RepairA: {
+ Lv1: 1
+ Lv2: 1
+ }
+ RepairB: {
+ Lv3: 1
+ Lv4: 1
+ }
+ RepairC: {
+ Lv5: 1
+ }
Repair_Kit: 0
}
}
@@ -27559,7 +27646,7 @@ skill_db: (
Lv7: 20
Lv8: 22
Lv9: 24
- Lv10: 26
+ Lv10: 25
}
CastTime: 1000
AfterCastActDelay: 1000
@@ -27614,7 +27701,7 @@ skill_db: (
Lv7: 20
Lv8: 22
Lv9: 24
- Lv10: 26
+ Lv10: 25
}
CastTime: 1000
AfterCastActDelay: 1000
@@ -28479,9 +28566,13 @@ skill_db: (
Lv10: 550
}
Items: {
- Boody_Red: 3
- Boody_Red: 6
- Flame_Heart: 1
+ Boody_Red: {
+ Lv1: 3
+ Lv2: 6
+ }
+ Flame_Heart: {
+ Lv3: 1
+ }
}
}
},
@@ -28538,9 +28629,13 @@ skill_db: (
Lv10: 550
}
Items: {
- Crystal_Blue: 3
- Crystal_Blue: 6
- Mistic_Frozen: 1
+ Crystal_Blue: {
+ Lv1: 3
+ Lv2: 6
+ }
+ Mistic_Frozen: {
+ Lv3: 1
+ }
}
}
},
@@ -28597,9 +28692,13 @@ skill_db: (
Lv10: 550
}
Items: {
- Wind_Of_Verdure: 3
- Wind_Of_Verdure: 6
- Rough_Wind: 1
+ Wind_Of_Verdure: {
+ Lv1: 3
+ Lv2: 6
+ }
+ Rough_Wind: {
+ Lv3: 1
+ }
}
}
},
@@ -28656,9 +28755,13 @@ skill_db: (
Lv10: 550
}
Items: {
- Yellow_Live: 3
- Yellow_Live: 6
- Great_Nature: 1
+ Yellow_Live: {
+ Lv1: 3
+ Lv2: 6
+ }
+ Great_Nature: {
+ Lv3: 1
+ }
}
}
},
@@ -28772,9 +28875,11 @@ skill_db: (
Lv10: 94
}
Items: {
- Scarlet_Pts: 1
- Scarlet_Pts: 2
- Scarlet_Pts: 3
+ Scarlet_Pts: {
+ Lv1: 1
+ Lv2: 2
+ Lv3: 3
+ }
}
}
Unit: {
@@ -28821,9 +28926,11 @@ skill_db: (
Lv10: 94
}
Items: {
- Indigo_Pts: 1
- Indigo_Pts: 2
- Indigo_Pts: 3
+ Indigo_Pts: {
+ Lv1: 1
+ Lv2: 2
+ Lv3: 3
+ }
}
}
Unit: {
@@ -28870,9 +28977,11 @@ skill_db: (
Lv10: 94
}
Items: {
- Yellow_Wish_Pts: 1
- Yellow_Wish_Pts: 2
- Yellow_Wish_Pts: 3
+ Yellow_Wish_Pts: {
+ Lv1: 1
+ Lv2: 2
+ Lv3: 3
+ }
}
}
Unit: {
@@ -28919,9 +29028,11 @@ skill_db: (
Lv10: 94
}
Items: {
- Lime_Green_Pts: 1
- Lime_Green_Pts: 2
- Lime_Green_Pts: 3
+ Lime_Green_Pts: {
+ Lv1: 1
+ Lv2: 2
+ Lv3: 3
+ }
}
}
Unit: {
@@ -29512,11 +29623,21 @@ skill_db: (
Lv10: 75
}
Items: {
- Oil_Bottle: 1
- Explosive_Powder: 1
- Smoke_Powder: 1
- Tear_Gas: 1
- Acid_Bottle: 1
+ Oil_Bottle: {
+ Lv1: 1
+ }
+ Explosive_Powder: {
+ Lv2: 1
+ }
+ Smoke_Powder: {
+ Lv3: 1
+ }
+ Tear_Gas: {
+ Lv4: 1
+ }
+ Acid_Bottle: {
+ Lv5: 1
+ }
}
}
},
@@ -32574,7 +32695,6 @@ skill_db: (
InterruptCast: true
CastTime: 1000
AfterCastActDelay: 1000
- FixedCastTime: 0
Requirements: {
SPCost: 10
}
@@ -32595,7 +32715,6 @@ skill_db: (
AfterCastActDelay: 1000
SkillData1: -1
CoolDown: 15000
- FixedCastTime: 0
Requirements: {
SPCost: 30
}
@@ -32631,7 +32750,6 @@ skill_db: (
Lv9: 1
Lv10: 1
}
- FixedCastTime: 0
Requirements: {
SPCost: {
Lv1: 20
@@ -32663,7 +32781,6 @@ skill_db: (
AfterCastActDelay: 1000
SkillData1: 6000
CoolDown: 15000
- FixedCastTime: 0
Requirements: {
SPCost: 10
}
@@ -32707,7 +32824,6 @@ skill_db: (
Lv9: 18000
Lv10: 20000
}
- FixedCastTime: 0
Requirements: {
SPCost: {
Lv1: 30
@@ -32759,7 +32875,6 @@ skill_db: (
CastTime: 2500
AfterCastActDelay: 1000
SkillData1: 10000
- FixedCastTime: 0
Requirements: {
SPCost: {
Lv1: 40
@@ -32807,7 +32922,6 @@ skill_db: (
Lv4: 6000
Lv5: 7000
}
- FixedCastTime: 0
Requirements: {
SPCost: {
Lv1: 40
@@ -32881,7 +32995,6 @@ skill_db: (
Lv5: 6000
}
- FixedCastTime: 0
Requirements: {
SPCost: {
Lv1: 20
@@ -32933,7 +33046,6 @@ skill_db: (
Lv10: 25000
}
CoolDown: 3000
- FixedCastTime: 0
Requirements: {
SPCost: {
Lv1: 10
@@ -32974,7 +33086,6 @@ skill_db: (
}
SkillInstances: 1
AfterCastActDelay: 1000
- FixedCastTime: 0
Requirements: {
SPCost: 1
}
@@ -33003,7 +33114,6 @@ skill_db: (
AfterCastActDelay: 1000
SkillData1: 9000
SkillData2: 1000
- FixedCastTime: 0
Requirements: {
SPCost: {
Lv1: 10
@@ -33035,7 +33145,6 @@ skill_db: (
InterruptCast: true
CastTime: 2500
AfterCastActDelay: 1000
- FixedCastTime: 0
Requirements: {
SPCost: {
Lv1: 10
@@ -33065,7 +33174,6 @@ skill_db: (
NumberOfHits: -5
InterruptCast: true
AfterCastActDelay: 1000
- FixedCastTime: 0
Requirements: {
SPCost: 1
}
@@ -33098,7 +33206,6 @@ skill_db: (
Lv10: 150000
}
CoolDown: 10000
- FixedCastTime: 0
Requirements: {
SPCost: {
Lv1: 12
@@ -33158,7 +33265,6 @@ skill_db: (
AfterCastActDelay: 1000
SkillData1: 1000
CoolDown: 8000
- FixedCastTime: 0
Requirements: {
SPCost: {
Lv1: 15
@@ -33209,7 +33315,6 @@ skill_db: (
Lv9: 24000
Lv10: 26000
}
- FixedCastTime: 0
Requirements: {
SPCost: {
Lv1: 20
@@ -33242,7 +33347,6 @@ skill_db: (
AfterCastActDelay: 1000
SkillData1: 30000
CoolDown: 20000
- FixedCastTime: 0
Requirements: {
SPCost: {
Lv1: 20
@@ -33287,7 +33391,6 @@ skill_db: (
Lv10: 330000
}
CoolDown: 10000
- FixedCastTime: 0
Requirements: {
SPCost: {
Lv1: 44
@@ -33325,7 +33428,6 @@ skill_db: (
AfterCastActDelay: 1000
SkillData1: 120000
CoolDown: 7000
- FixedCastTime: 0
Requirements: {
SPCost: {
Lv1: 22
diff --git a/db/re/attr_fix.txt b/db/re/attr_fix.txt
index 96d6b37d1..79c55aeca 100644
--- a/db/re/attr_fix.txt
+++ b/db/re/attr_fix.txt
@@ -1,7 +1,7 @@
// Elemental attribute damage adjustment tables
//
-// Row: target's defense element
-// Column: attacker's weapon element
+// Row: attacker's weapon element
+// Column: target's defense element
1,10 // lv1 Attribute table
//Neut Watr Erth Fire Wind Pois Holy Shdw Gho Und
diff --git a/db/re/item_combo_db.conf b/db/re/item_combo_db.conf
index 31630546a..668b4bac0 100644
--- a/db/re/item_combo_db.conf
+++ b/db/re/item_combo_db.conf
@@ -3221,4 +3221,12 @@ combo_db: (
bonus2 bVariableCastrate, "WL_JACKFROST", -.@r;
">
},
+{
+ Items: ["Rigid_Nightmare_Terror_Card", "Nightmare_Terror_Card"]
+ Script: <" bonus(bAtkRate, 10); ">
+},
+{
+ Items: ["Rigid_Nightmare_Terror_Card", "Nightmare_Card"]
+ Script: <" bonus(bMaxSPrate, 10); ">
+},
)
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index 86bfe9f90..c653fcf0b 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -70646,6 +70646,8 @@ item_db: (
Id: 6221
AegisName: "Mystic_Leaf_Cat_Ball"
Name: "Mystic Hydra Ball"
+ Type: "IT_PETEGG"
+ Buy: 20
},
{
Id: 6222
@@ -74426,6 +74428,18 @@ item_db: (
Weight: 10
},
{
+ Id: 6669
+ AegisName: "Emerald_Leaf"
+ Name: "Emerald Leaf"
+ Weight: 10
+},
+{
+ Id: 6670
+ AegisName: "Log_"
+ Name: "Tree Log"
+ Weight: 10
+},
+{
Id: 6671
AegisName: "Geffen_Magic_Coin"
Name: "Geffen Magic Tournament Coin"
@@ -74540,6 +74554,30 @@ item_db: (
Weight: 10
},
{
+ Id: 6762
+ AegisName: "Banana_Can"
+ Name: "Banana Can"
+ Weight: 10
+},
+{
+ Id: 6763
+ AegisName: "Spicy_Rice_Cake"
+ Name: "Spicy Rice Cake"
+ Weight: 10
+},
+{
+ Id: 6764
+ AegisName: "Hot_Dog"
+ Name: "Hot Dog"
+ Weight: 10
+},
+{
+ Id: 6765
+ AegisName: "Ferris_Wheel_Biscuit"
+ Name: "Ferris Wheel Biscuit"
+ Weight: 10
+},
+{
Id: 6804
AegisName: "ORGANIC_PUMPKIN"
Name: "Organic Pumpkin"
@@ -83636,6 +83674,48 @@ item_db: (
Buy: 20
},
{
+ Id: 9063
+ AegisName: "Woodie_Egg"
+ Name: "Woodie Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9064
+ AegisName: "Elephant_Egg"
+ Name: "Elephant Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9065
+ AegisName: "Gorilla_Egg"
+ Name: "Gorilla Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9066
+ AegisName: "Lion_Egg"
+ Name: "Lion Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9067
+ AegisName: "Rhino_Egg"
+ Name: "Rhino Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9068
+ AegisName: "Blue_Unicorn_Egg"
+ Name: "Blue Unicorn Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
Id: 9069
AegisName: "Mastering_Egg"
Name: "Mastering Egg"
@@ -83657,6 +83737,55 @@ item_db: (
Buy: 20
},
{
+ Id: 9074
+ AegisName: "Rubylit_Egg"
+ Name: "Rubylit Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9075
+ AegisName: "Sapphilit_Egg"
+ Name: "Sapphilit Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9076
+ AegisName: "Emelit_Egg"
+ Name: "Emelit Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9077
+ AegisName: "Topalit_Egg"
+ Name: "Topalit Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9078
+ AegisName: "Amelit_Egg"
+ Name: "Amelit Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9079
+ AegisName: "Mythlit_Egg"
+ Name: "Mythlit Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9080
+ AegisName: "Tamadora_Egg"
+ Name: "Tamadora Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
Id: 9087
AegisName: "High_Orc_Egg"
Name: "High Orc Egg"
@@ -83844,6 +83973,76 @@ item_db: (
Name: "Ein_Ddbox"
},
{
+ Id: 9115
+ AegisName: "Bacsojin2_Egg_"
+ Name: "Bacsojin Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9116
+ AegisName: "Rigid_Nightmare_Terror_Egg"
+ Name: "Rigid Nightmare Terror Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9117
+ AegisName: "Contaminated_Wanderer_Egg"
+ Name: "Contaminated Wanderer Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9118
+ AegisName: "Aliot_Egg"
+ Name: "Aliot Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9119
+ AegisName: "Alicel_Egg"
+ Name: "Alicel Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9120
+ AegisName: "Aliza_Egg"
+ Name: "Aliza Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9121
+ AegisName: "Orc_Hero_Egg_"
+ Name: "Orc Hero Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9122
+ AegisName: "Gloom_Under_Night_Egg"
+ Name: "Gloom Under Night Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9123
+ AegisName: "Child_Admin_Beta_Egg"
+ Name: "Child Admin Beta Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
+ Id: 9124
+ AegisName: "Child_Admin_Alpha_Egg"
+ Name: "Child Admin Alpha Egg"
+ Type: "IT_PETEGG"
+ Buy: 20
+},
+{
Id: 9523
AegisName: "Metal_Rifine_Ticket"
Name: "Metal_Rifine_Ticket"
@@ -84139,9 +84338,32 @@ item_db: (
Buy: 20
},
{
+ Id: 10040
+ AegisName: "Red_Bell_Necklace"
+ Name: "Red Bell Necklace"
+ Type: "IT_PETARMOR"
+ Buy: 20
+},
+{
Id: 10042
AegisName: "Dark_Mane"
Name: "Dark_Mane"
+ Type: "IT_PETARMOR"
+ Buy: 20
+},
+{
+ Id: 10043
+ AegisName: "Little_Headdress_Beta"
+ Name: "Little Headdress Beta"
+ Type: "IT_PETARMOR"
+ Buy: 20
+},
+{
+ Id: 10044
+ AegisName: "Little_Headdress_Alpha"
+ Name: "Little Headdress Alpha"
+ Type: "IT_PETARMOR"
+ Buy: 20
},
//== Misc "Etc" Books ======================================
@@ -85340,6 +85562,14 @@ item_db: (
Script: <" itemheal rand(10,40),0; ">
},
{
+ Id: 11605
+ AegisName: "Cookie_Bat"
+ Name: "Cookie Bat"
+ Type: "IT_HEALING"
+ Weight: 50
+ Script: <" itemheal(rand(50, 100), 0); ">
+},
+{
Id: 11607
AegisName: "Crepe"
Name: "Crepe"
@@ -85375,6 +85605,13 @@ item_db: (
Name: "Sweet_Potato_"
},
{
+ Id: 11616
+ AegisName: "Yummy_Meat"
+ Name: "Yummy Meat"
+ Type: "IT_HEALING"
+ Weight: 50
+},
+{
Id: 11620
AegisName: "Bearopy"
Name: "Bearopy"
@@ -86901,8 +87138,7 @@ item_db: (
Weight: 10
BuyingStore: true
Script: <"
- sc_start(SC_RESIST_PROPERTY_FIRE, 1200000, 20);
- sc_start(SC_RESIST_PROPERTY_WATER, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);
+ sc_start2(SC_RESIST_PROPERTY_FIRE, 1200000, 20, -15);
">
},
{
@@ -86914,8 +87150,7 @@ item_db: (
Weight: 10
BuyingStore: true
Script: <"
- sc_start(SC_RESIST_PROPERTY_WATER, 1200000, 20);
- sc_start(SC_RESIST_PROPERTY_WIND, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);
+ sc_start2(SC_RESIST_PROPERTY_WATER, 1200000, 20, -15);
">
},
{
@@ -86927,8 +87162,7 @@ item_db: (
Weight: 10
BuyingStore: true
Script: <"
- sc_start(SC_RESIST_PROPERTY_GROUND, 1200000, 20);
- sc_start(SC_RESIST_PROPERTY_FIRE, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);
+ sc_start2(SC_RESIST_PROPERTY_GROUND, 1200000, 20, -15);
">
},
{
@@ -86940,8 +87174,7 @@ item_db: (
Weight: 10
BuyingStore: true
Script: <"
- sc_start(SC_RESIST_PROPERTY_WIND, 1200000, 20);
- sc_start(SC_RESIST_PROPERTY_GROUND, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);
+ sc_start2(SC_RESIST_PROPERTY_WIND, 1200000, 20, -15);
">
},
{
@@ -88273,7 +88506,7 @@ item_db: (
Nouse: {
sitting: true
}
- Script: <" itemskill(AL_INCAGI, 10, ISF_INSTANTCAST | ISF_CASTONSELF); ">
+ Script: <" itemskill(AL_INCAGI, 10, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF); ">
},
{
Id: 12217
@@ -88294,7 +88527,7 @@ item_db: (
Nouse: {
sitting: true
}
- Script: <" itemskill(PR_ASPERSIO, 5, ISF_INSTANTCAST | ISF_CASTONSELF); ">
+ Script: <" itemskill(PR_ASPERSIO, 5, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF); ">
},
{
Id: 12218
@@ -88357,7 +88590,7 @@ item_db: (
Nouse: {
sitting: true
}
- Script: <" itemskill(BS_ADRENALINE, 5, ISF_INSTANTCAST | ISF_CASTONSELF); ">
+ Script: <" itemskill(BS_ADRENALINE, 5, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF); ">
},
{
Id: 12221
@@ -88377,7 +88610,7 @@ item_db: (
}
Script: <"
input @megaphone$;
- announce strcharinfo(PC_NAME) + ": " + @megaphone$,bc_all,0xFF0000;
+ loudhailer(@megaphone$);
end;
">
},
@@ -89165,10 +89398,7 @@ item_db: (
Type: "IT_USABLE"
Weight: 10
Script: <"
- sc_start(SC_RESIST_PROPERTY_FIRE, 300000, 20);
- sc_start(SC_RESIST_PROPERTY_WATER, 300000, 20);
- sc_start(SC_RESIST_PROPERTY_WIND, 300000, 20);
- sc_start(SC_RESIST_PROPERTY_GROUND, 300000, 20);
+ sc_start4(SC_ARMOR_RESIST, 300000, 20, 20, 20, 20);
">
},
{
@@ -89349,7 +89579,7 @@ item_db: (
}
Script: <"
percentheal(0, 5);
- itemskill(AL_INCAGI, 5, ISF_INSTANTCAST | ISF_CASTONSELF);
+ itemskill(AL_INCAGI, 5, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF);
">
},
{
@@ -90584,6 +90814,18 @@ item_db: (
Buy: 10
Weight: 10
BuyingStore: true
+ Trade: {
+ nodrop: true
+ notrade: true
+ nocart: true
+ nomail: true
+ noauction: true
+ nogstorage: true
+ }
+ Script: <"
+ specialeffect(EF_STEAL, AREA, playerattached());
+ sc_start4(SC_POPECOOKIE, 1200000, 3, 3, 3, 0);
+ ">
},
{
Id: 12380
@@ -90735,7 +90977,7 @@ item_db: (
}
Script: <"
if(strcharinfo(PC_MAP)=="job3_rune02") {
- itemskill RK_CRUSHSTRIKE,1;
+ itemskill(RK_CRUSHSTRIKE, 1, ISF_CHECKCONDITIONS);
}
">
},
@@ -91001,6 +91243,10 @@ item_db: (
nomail: true
noauction: true
}
+ Script: <"
+ specialeffect(EF_STEAL, AREA, playerattached());
+ sc_start4(SC_VITALIZE_POTION, 120000, 2, 2, 10, 0);
+ ">
},
{
Id: 12405
@@ -91531,6 +91777,10 @@ item_db: (
Name: "Medium Life Potion"
Type: "IT_USABLE"
Weight: 10
+ Script: <"
+ specialeffect(EF_HEAL3, AREA, playerattached());
+ sc_start2(SC_M_LIFEPOTION, 600000, -7, 4);
+ ">
},
{
Id: 12460
@@ -91538,6 +91788,11 @@ item_db: (
Name: "Small Life Potion"
Type: "IT_USABLE"
Weight: 10
+ Script: <"
+ specialeffect(EF_HEAL3, AREA, playerattached());
+ /* Probably it should be 5% instead of 7%, but we'll follow the client side description... */
+ sc_start2(SC_S_LIFEPOTION, 600000, -7, 4);
+ ">
},
{
Id: 12461
@@ -91545,6 +91800,10 @@ item_db: (
Name: "Regeneration Potion"
Type: "IT_USABLE"
Weight: 10
+ Script: <"
+ specialeffect(EF_LIGHTSPHERE, AREA, playerattached());
+ sc_start(SC_HEALPLUS, 1800000, 20);
+ ">
},
{
Id: 12462
@@ -91552,6 +91811,10 @@ item_db: (
Name: "Big Magic Defense Potion"
Type: "IT_USABLE"
Weight: 10
+ Script: <"
+ specialeffect(EF_SPELLBREAKER, AREA, playerattached());
+ sc_start(SC_PROTECT_MDEF, 180000, 3);
+ ">
},
{
Id: 12463
@@ -91559,6 +91822,10 @@ item_db: (
Name: "Small Magic Defense Potion"
Type: "IT_USABLE"
Weight: 10
+ Script: <"
+ specialeffect(EF_SPELLBREAKER, AREA, playerattached());
+ sc_start(SC_PROTECT_MDEF, 60000, 3);
+ ">
},
{
Id: 12464
@@ -91566,6 +91833,10 @@ item_db: (
Name: "Big Defense Potion"
Type: "IT_USABLE"
Weight: 10
+ Script: <"
+ specialeffect(EF_GUARD, AREA, playerattached());
+ sc_start(SC_PROTECT_DEF, 180000, 3);
+ ">
},
{
Id: 12465
@@ -91573,6 +91844,10 @@ item_db: (
Name: "Small Defense Potion"
Type: "IT_USABLE"
Weight: 10
+ Script: <"
+ specialeffect(EF_GUARD, AREA, playerattached());
+ sc_start(SC_PROTECT_DEF, 60000, 3);
+ ">
},
{
Id: 12466
@@ -94059,33 +94334,85 @@ item_db: (
Id: 12666
AegisName: "Thai_Perfume_MATK"
Name: "Thai Perfume(MATK)"
- Type: "IT_DELAYCONSUME"
+ Type: "IT_USABLE"
Buy: 20
Weight: 10
+ Trade: {
+ nodrop: true
+ notrade: true
+ noselltonpc: true
+ nocart: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <"
+ specialeffect(EF_MAGICALATTHIT, AREA, playerattached());
+ sc_start(SC_SKF_MATK, 600000, 24);
+ ">
},
{
Id: 12667
AegisName: "Thai_Perfume_ATK"
Name: "Thai Perfume(ATK)"
- Type: "IT_DELAYCONSUME"
+ Type: "IT_USABLE"
Buy: 20
Weight: 10
+ Trade: {
+ nodrop: true
+ notrade: true
+ noselltonpc: true
+ nocart: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <"
+ specialeffect(EF_MAGICALATTHIT, AREA, playerattached());
+ sc_start(SC_SKF_ATK, 600000, 24);
+ ">
},
{
Id: 12668
AegisName: "Thai_Perfume_ASPD"
Name: "Thai Perfume(ASPD)"
- Type: "IT_DELAYCONSUME"
+ Type: "IT_USABLE"
Buy: 20
Weight: 10
+ Trade: {
+ nodrop: true
+ notrade: true
+ noselltonpc: true
+ nocart: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <"
+ specialeffect(EF_MAGICALATTHIT, AREA, playerattached());
+ sc_start(SC_SKF_ASPD, 600000, 3);
+ ">
},
{
Id: 12669
AegisName: "Thai_Perfume_CAST"
Name: "Thai Perfume(CAST)"
- Type: "IT_DELAYCONSUME"
+ Type: "IT_USABLE"
Buy: 20
Weight: 10
+ Trade: {
+ nodrop: true
+ notrade: true
+ noselltonpc: true
+ nocart: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <"
+ specialeffect(EF_MAGICALATTHIT, AREA, playerattached());
+ sc_start(SC_SKF_CAST, 600000, 5);
+ ">
},
{
Id: 12670
@@ -94758,7 +95085,7 @@ item_db: (
sitting: true
}
Stack: [60, 1]
- Script: <" itemskill RK_CRUSHSTRIKE, 1; ">
+ Script: <" itemskill(RK_CRUSHSTRIKE, 1, ISF_CHECKCONDITIONS); ">
},
{
Id: 12727
@@ -96000,6 +96327,33 @@ item_db: (
Script: <" autobonus "{ heal -3000,0; bonus2 bResEff,Eff_Blind,10000; }",10,0,0,SI_GVG_BLIND; ">
},
{
+ Id: 12883
+ AegisName: "Almighty"
+ Name: "Almighty"
+ Type: "IT_USABLE"
+ Buy: 20
+ Weight: 10
+ Trade: {
+ nodrop: true
+ notrade: true
+ noselltonpc: true
+ nocart: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <"
+ specialeffect(EF_BASH3D, AREA, playerattached());
+ sc_start(SC_FOOD_STR_CASH, 1800000, 10);
+ sc_start(SC_FOOD_VIT_CASH, 1800000, 10);
+ sc_start(SC_FOOD_AGI_CASH, 1800000, 10);
+ sc_start(SC_FOOD_INT_CASH, 1800000, 10);
+ sc_start(SC_FOOD_DEX_CASH, 1800000, 10);
+ sc_start(SC_FOOD_LUK_CASH, 1800000, 10);
+ sc_start2(SC_ALMIGHTY, 1800000, 30, 30);
+ ">
+},
+{
Id: 12884
AegisName: "C_Center_Potion"
Name: "Infinite Concentration Potion"
@@ -121679,7 +122033,7 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" itemskill(AM_CP_HELM, 5); ">
+ Script: <" itemskill(AM_CP_HELM, 5, ISF_CHECKCONDITIONS); ">
},
{
Id: 14518
@@ -121696,7 +122050,7 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" itemskill(AM_CP_SHIELD, 5); ">
+ Script: <" itemskill(AM_CP_SHIELD, 5, ISF_CHECKCONDITIONS); ">
},
{
Id: 14519
@@ -121713,7 +122067,7 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" itemskill(AM_CP_ARMOR, 5); ">
+ Script: <" itemskill(AM_CP_ARMOR, 5, ISF_CHECKCONDITIONS); ">
},
{
Id: 14520
@@ -121730,7 +122084,7 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" itemskill(AM_CP_WEAPON, 5); ">
+ Script: <" itemskill(AM_CP_WEAPON, 5, ISF_CHECKCONDITIONS); ">
},
{
Id: 14521
@@ -123049,7 +123403,7 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" itemskill(CASH_INCAGI, 10, ISF_INSTANTCAST | ISF_CASTONSELF); ">
+ Script: <" itemskill(CASH_INCAGI, 10, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF); ">
},
{
Id: 14590
@@ -127035,6 +127389,7 @@ item_db: (
Name: "Activation Potion Box"
Type: "IT_CASH"
Buy: 20
+ Weight: 10
Trade: {
nodrop: true
notrade: true
@@ -127044,6 +127399,7 @@ item_db: (
nomail: true
noauction: true
}
+ Script: <" getitem(Acti_Potion, 5); ">
},
{
Id: 16257
@@ -130552,6 +130908,23 @@ item_db: (
Script: <" packageitem(); ">
},
{
+ Id: 17224
+ AegisName: "Almighty_Box"
+ Name: "Almighty Box"
+ Type: "IT_CASH"
+ Weight: 10
+ Trade: {
+ nodrop: true
+ notrade: true
+ noselltonpc: true
+ nocart: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <" getitem(Almighty, 10); ">
+},
+{
Id: 17226
AegisName: "C_Center_Potion_Box"
Name: "Infinite Concentration Potion Box"
@@ -148655,6 +149028,36 @@ item_db: (
Script: <" Zeny += rand(500, 550); ">
},
{
+ Id: 23187
+ AegisName: "Sap_Jelly"
+ Name: "Sap Jelly"
+ Type: "IT_USABLE"
+ Nouse: {
+ sitting: true
+ }
+ Script: <" pet(NINE_TAIL); ">
+},
+{
+ Id: 23188
+ AegisName: "Unprocessed_Parts"
+ Name: "Unprocessed Parts"
+ Type: "IT_USABLE"
+ Nouse: {
+ sitting: true
+ }
+ Script: <" pet(GREMLIN); ">
+},
+{
+ Id: 23189
+ AegisName: "SmallDoll_Needle"
+ Name: "Small Doll Needle"
+ Type: "IT_USABLE"
+ Nouse: {
+ sitting: true
+ }
+ Script: <" pet(TEDDY_BEAR); ">
+},
+{
Id: 23242
AegisName: "Fried_Chicken"
Name: "Fried_Chicken"
@@ -153602,6 +154005,24 @@ item_db: (
Weight: 1200
},
{
+ Id: 25231
+ AegisName: "Suspicious_Bottle"
+ Name: "Suspicious Bottle"
+ Weight: 10
+},
+{
+ Id: 25232
+ AegisName: "Cheap_Lubricant"
+ Name: "Cheap Lubricant"
+ Weight: 10
+},
+{
+ Id: 25233
+ AegisName: "Cotton_Tufts"
+ Name: "Cotton Tufts"
+ Weight: 10
+},
+{
Id: 25258
AegisName: "BrokenArrow"
Name: "BrokenArrow"
@@ -153647,6 +154068,12 @@ item_db: (
Name: "Mightysoul_Essence"
},
{
+ Id: 25377
+ AegisName: "Luxurious_Pet_Food"
+ Name: "Luxurious Pet Food"
+ Weight: 1
+},
+{
Id: 25390
AegisName: "Captured_Savage"
Name: "Captured_Savage"
@@ -154442,6 +154869,29 @@ item_db: (
bonus2(bSkillAtk, RL_HAMMER_OF_GOD, getrefine() >= 10 ? 60 : 30);
">
},
+{
+ Id: 27352
+ AegisName: "Rigid_Nightmare_Terror_Card"
+ Name: "Rigid Nightmare Terror Card"
+ Type: "IT_CARD"
+ Buy: 20
+ Weight: 10
+ Loc: "EQP_SHOES"
+ Script: <" bonus(bMaxSPrate, 5); ">
+},
+{
+ Id: 27361
+ AegisName: "Contaminated_Wanderer_Card"
+ Name: "Contaminated Wanderer Card"
+ Type: "IT_CARD"
+ Buy: 20
+ Weight: 10
+ Loc: "EQP_WEAPON"
+ Script: <"
+ bonus2(bAddSize,Size_Medium, 30);
+ bonus2(bAddSize,Size_Large, 30);
+ ">
+},
//== New Katars ============================================
{
@@ -156311,6 +156761,19 @@ item_db: (
Name: "Shinee_Opal"
},
{
+ Id: 31022
+ AegisName: "Abandoned_Teddy_Bear_Card"
+ Name: "Abandoned Teddy Bear Card"
+ Type: "IT_CARD"
+ Buy: 20
+ Weight: 10
+ Loc: "EQP_SHOES"
+ Script: <"
+ bonus(bMaxSPrate, 20);
+ bonus2(bAddEff2, Eff_Curse, 20);
+ ">
+},
+{
Id: 31172
AegisName: "Roast_Memory"
Name: "Roast_Memory"
@@ -157776,6 +158239,12 @@ item_db: (
Name: "ArchbishopStone_Robe2"
},
{
+ Id: 1000103
+ AegisName: "Barmil_Ticket"
+ Name: "Barmil Ticket"
+ Weight: 10
+},
+{
Id: 1000213
AegisName: "WarlockStone_Robe2"
Name: "WarlockStone_Robe2"
@@ -157835,4 +158304,10 @@ item_db: (
AegisName: "AssacrossStone_Bottom2"
Name: "AssacrossStone_Bottom2"
},
+{
+ Id: 1000227
+ AegisName: "Cloud_Cotton"
+ Name: "Cloud Cotton"
+ Weight: 10
+},
)
diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf
index 492b75a04..b80008028 100644
--- a/db/re/mob_db.conf
+++ b/db/re/mob_db.conf
@@ -57,9 +57,9 @@ mob_db: (
}
ViewRange: view range (int, defaults to 1)
ChaseRange: chase range (int, defaults to 1)
- Size: size (string, defaults to "Size_Medium")
+ Size: size (string, defaults to "Size_Small")
Race: race (string, defaults to "RC_Formless")
- Element: (type, level)
+ Element: (type, level) (string/int, defaults to "Ele_Neutral"/1)
Mode: {
CanMove: true/false (bool, defaults to false)
Looter: true/false (bool, defaults to false)
@@ -4816,7 +4816,7 @@ mob_db: (
Drops: {
Runstone_Ancient: 10
Healing_Staff: 10
- White_Wing_Suits: 100
+ White_Wing_Suits: 50
Oridecon: 105
Sacred_Masque: 4365
Mitten_Of_Presbyter: 1
@@ -75437,7 +75437,7 @@ mob_db: (
Drops: {
Sprint_Ring: 2
Bradium: 1
- Black_Wing_Suits: 9000
+ Black_Wing_Suits: 25
Honey: 300
Wind_Of_Verdure: 160
Royal_Jelly: 200
@@ -83701,7 +83701,46 @@ mob_db: (
DamageMotion: 360
},
//2962,E_DEVILING
-//2963,WOODIE
+{
+ Id: 2963
+ SpriteName: "WOODIE"
+ Name: "Woodie"
+ Hp: 60
+ Exp: 18
+ JExp: 10
+ Attack: [13, 3]
+ Def: 2
+ Mdef: 5
+ Stats: {
+ Str: 6
+ Agi: 1
+ Vit: 1
+ Dex: 6
+ Luk: 5
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Race: "RC_Plant"
+ Element: ("Ele_Water", 1)
+ Mode: {
+ CanMove: true
+ Looter: true
+ CanAttack: true
+ }
+ MoveSpeed: 400
+ AttackDelay: 1872
+ AttackMotion: 672
+ DamageMotion: 480
+ Drops: {
+ Solid_Twig: 2000
+ Resin: 2000
+ Log: 2000
+ Wooden_Block: 2000
+ Oridecon_Stone: 200
+ Log_: 5000
+ Woodie_Card: 300
+ }
+},
//2964,EXP_1000
//2965,TW_APOCALIPS_H
//2966,TW_B_EREMES
@@ -83733,7 +83772,53 @@ mob_db: (
//2992,XM_LUDE
//2993,XM_HYLOZOIST
//2994,XM_MARIONETTE
-//2995,XM_TEDDY_BEAR
+{
+ Id: 2995
+ SpriteName: "XM_TEDDY_BEAR"
+ Name: "Abandoned Teddy Bear"
+ Lv: 148
+ Hp: 180000
+ Exp: 6666
+ JExp: 7332
+ Attack: [1347, 577]
+ Def: 106
+ Mdef: 44
+ Stats: {
+ Str: 44
+ Agi: 166
+ Vit: 44
+ Int: 44
+ Dex: 166
+ Luk: 44
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Small"
+ Race: "RC_Demon"
+ Element: ("Ele_Undead", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CastSensorIdle: true
+ CanAttack: true
+ Detector: true
+ CastSensorChase: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 150
+ AttackDelay: 512
+ AttackMotion: 780
+ DamageMotion: 504
+ Drops: {
+ Screw: 1900
+ Oridecon_Hammer: 150
+ Str_Dish09: 100
+ Runstone_Quality: 1000
+ Runstone_Rare: 100
+ Abandoned_Teddy_Bear_Card: 1
+ }
+},
{
Id: 2996
SpriteName: "XM_CELINE_KIMI"
@@ -84009,6 +84094,142 @@ mob_db: (
//3154,RECON_ROBOT
//3155,REPAIR_ROBOT
//3156,EXPLORATION_ROVER
+{
+ Id: 3162
+ SpriteName: "ELEPHANT"
+ Name: "Elephant"
+ Lv: 48
+ Hp: 1080
+ Exp: 184
+ JExp: 207
+ Attack: [184, 48]
+ Def: 70
+ Mdef: 30
+ Stats: {
+ Str: 40
+ Agi: 45
+ Vit: 32
+ Int: 19
+ Dex: 42
+ Luk: 20
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Small"
+ Race: "RC_Brute"
+ Element: ("Ele_Fire", 1)
+ Mode: {
+ CanMove: true
+ Looter: true
+ CanAttack: true
+ }
+ MoveSpeed: 150
+ AttackDelay: 1028
+ AttackMotion: 528
+ DamageMotion: 360
+},
+{
+ Id: 3163
+ SpriteName: "GORILLA"
+ Name: "Gorilla"
+ Lv: 48
+ Hp: 1080
+ Exp: 184
+ JExp: 207
+ Attack: [184, 48]
+ Def: 70
+ Mdef: 30
+ Stats: {
+ Str: 40
+ Agi: 45
+ Vit: 32
+ Int: 19
+ Dex: 42
+ Luk: 20
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Small"
+ Race: "RC_Brute"
+ Element: ("Ele_Fire", 1)
+ Mode: {
+ CanMove: true
+ Looter: true
+ CanAttack: true
+ }
+ MoveSpeed: 190
+ AttackDelay: 1028
+ AttackMotion: 528
+ DamageMotion: 360
+},
+{
+ Id: 3164
+ SpriteName: "LION"
+ Name: "Lion"
+ Lv: 48
+ Hp: 1080
+ Exp: 184
+ JExp: 207
+ Attack: [184, 48]
+ Def: 70
+ Mdef: 30
+ Stats: {
+ Str: 40
+ Agi: 45
+ Vit: 32
+ Int: 19
+ Dex: 42
+ Luk: 20
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Small"
+ Race: "RC_Brute"
+ Element: ("Ele_Fire", 1)
+ Mode: {
+ CanMove: true
+ Looter: true
+ CanAttack: true
+ }
+ MoveSpeed: 150
+ AttackDelay: 1028
+ AttackMotion: 528
+ DamageMotion: 360
+},
+{
+ Id: 3165
+ SpriteName: "RHINO"
+ Name: "Rhino"
+ Lv: 48
+ Hp: 1080
+ Exp: 184
+ JExp: 207
+ Attack: [184, 48]
+ Def: 70
+ Mdef: 30
+ Stats: {
+ Str: 40
+ Agi: 45
+ Vit: 32
+ Int: 19
+ Dex: 42
+ Luk: 20
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Small"
+ Race: "RC_Brute"
+ Element: ("Ele_Fire", 1)
+ Mode: {
+ CanMove: true
+ Looter: true
+ CanAttack: true
+ }
+ MoveSpeed: 150
+ AttackDelay: 1028
+ AttackMotion: 528
+ DamageMotion: 360
+},
//3166,M_E_DEVILING
{
Id: 3169
@@ -84387,7 +84608,38 @@ mob_db: (
DamageMotion: 480
MvpExp: 0
},*/
-
+{
+ Id: 3261
+ SpriteName: "BLUE_UNICORN"
+ Name: "Blue Unicorn"
+ Lv: 30
+ Hp: 20
+ Exp: 99
+ JExp: 112
+ Attack: [106, 29]
+ Def: 36
+ Mdef: 17
+ Stats: {
+ Str: 17
+ Agi: 26
+ Vit: 20
+ Int: 18
+ Dex: 36
+ Luk: 5
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Race: "RC_Plant"
+ Element: ("Ele_Poison", 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ }
+ MoveSpeed: 300
+ AttackDelay: 1672
+ AttackMotion: 672
+ DamageMotion: 480
+},
//3295,G_MOBSTER
//3296,HIDDEN_TEST
//3297,PAD_LEVIATHAN
@@ -84398,7 +84650,11 @@ mob_db: (
//3303,PAD_HELHEIM
//3304,PAD_MUSPELHEIM
//3305,PAD_ZAEROG
-//3306,PAD_TAMADORA
+{/* jRO exclusive pet. No stats required. */
+ Id: 3306
+ SpriteName: "PAD_TAMADORA"
+ Name: "Tamadora"
+},
//3307,PAD_TAMADORABABY
//3308,ROC_EMPELIUM
//3309,ROC_OBJ_A
@@ -84409,11 +84665,31 @@ mob_db: (
//3314,SMOKIE_THIEF
//3315,PAD_KINGGOLD
//3316,PAD_KINGMETAL
-//3317,PAD_RUBYLIT
-//3318,PAD_SAPPHILIT
-//3319,PAD_EMELIT
-//3320,PAD_TOPALIT
-//3321,PAD_AMELIT
+{/* jRO exclusive pet. No stats required. */
+ Id: 3317
+ SpriteName: "PAD_RUBYLIT"
+ Name: "Rubylit"
+},
+{/* jRO exclusive pet. No stats required. */
+ Id: 3318
+ SpriteName: "PAD_SAPPHILIT"
+ Name: "Sapphilit"
+},
+{/* jRO exclusive pet. No stats required. */
+ Id: 3319
+ SpriteName: "PAD_EMELIT"
+ Name: "Emelit"
+},
+{/* jRO exclusive pet. No stats required. */
+ Id: 3320
+ SpriteName: "PAD_TOPALIT"
+ Name: "Topalit"
+},
+{/* jRO exclusive pet. No stats required. */
+ Id: 3321
+ SpriteName: "PAD_AMELIT"
+ Name: "Amelit"
+},
//3322,PAD_METAL_DRAGON
//3323,PAD_M_FLAME_KNIGHT
//3324,PAD_M_ICE_KNIGHT
@@ -84441,7 +84717,11 @@ mob_db: (
//3346,PAD_SIREN_H
//3347,PAD_LILITH_H
//3348,PAD_HERA_H
-//3349,PAD_MYTHLIT
+{/* jRO exclusive pet. No stats required. */
+ Id: 3349
+ SpriteName: "PAD_MYTHLIT"
+ Name: "Mythlit"
+},
//3350,PAD_TYRRA
//3351,PAD_TYRANNOS
//3352,PAD_PLESSIE
@@ -84530,4 +84810,602 @@ mob_db: (
Captured_Soul: 4000
}
},
+{
+ Id: 3495
+ SpriteName: "DR_EGGRING"
+ Name: "Eggring"
+ Hp: 50
+ Exp: 50
+ JExp: 35
+ Attack: [7, 1]
+ Def: 2
+ Mdef: 4
+ Stats: {
+ Str: 6
+ Agi: 1
+ Vit: 1
+ Dex: 6
+ Luk: 4
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Race: "RC_Plant"
+ Element: ("Ele_Earth", 1)
+ Mode: {
+ CanMove: true
+ Looter: true
+ CanAttack: true
+ }
+ MoveSpeed: 400
+ AttackDelay: 1872
+ AttackMotion: 672
+ DamageMotion: 480
+ Drops: {
+ Jellopy: 7000
+ Apple: 1000
+ Sticky_Mucus: 400
+ Phracon: 30
+ Wing_Of_Fly: 500
+ Apple: 150
+ Apple: 20
+ Eggring_Card: 20
+ }
+},
+{
+ Id: 3496
+ SpriteName: "DR_LUNATIC"
+ Name: "Leaf Lunatic"
+ Lv: 3
+ Hp: 44
+ Exp: 50
+ JExp: 35
+ Attack: [12, 1]
+ Def: 16
+ Stats: {
+ Str: 9
+ Agi: 1
+ Vit: 2
+ Dex: 7
+ Luk: 4
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Small"
+ Race: "RC_Brute"
+ Element: ("Ele_Neutral", 3)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ }
+ MoveSpeed: 200
+ AttackDelay: 1456
+ AttackMotion: 456
+ DamageMotion: 336
+ Drops: {
+ Clover: 7000
+ Feather: 3000
+ Pierrot_Nose: 4
+ Apple: 1000
+ Wing_Of_Fly: 500
+ Carrot: 3000
+ Phracon: 30
+ Leaf_Lunatic_Card: 10
+ }
+},
+{
+ Id: 3636
+ SpriteName: "LITTLE_ISIS"
+ Name: "Little Isis"
+ Lv: 59
+ Hp: 2092
+ Exp: 279
+ JExp: 298
+ Attack: [278, 81]
+ Def: 83
+ Mdef: 5
+ Stats: {
+ Str: 58
+ Agi: 43
+ Vit: 22
+ Int: 5
+ Dex: 43
+ Luk: 15
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Large"
+ Race: "RC_Demon"
+ Element: ("Ele_Dark", 1)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CastSensorIdle: true
+ CanAttack: true
+ Detector: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 200
+ AttackDelay: 1384
+ AttackMotion: 768
+ DamageMotion: 336
+},
+{
+ Id: 3669
+ SpriteName: "DIABOLIC2"
+ Name: "Diabolic2"
+ Lv: 104
+ Hp: 10572
+ Exp: 1086
+ JExp: 1073
+ Attack: [772, 283]
+ Def: 68
+ Mdef: 61
+ Stats: {
+ Str: 103
+ Agi: 80
+ Vit: 53
+ Int: 65
+ Dex: 94
+ Luk: 25
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Small"
+ Race: "RC_Demon"
+ Element: ("Ele_Dark", 2)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Detector: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 150
+ AttackDelay: 1080
+ AttackMotion: 780
+ DamageMotion: 180
+},
+{
+ Id: 3670
+ SpriteName: "DELETER_2"
+ Name: "Deleter 2"
+ Lv: 105
+ Hp: 10000
+ Exp: 1049
+ JExp: 1038
+ Attack: [733, 265]
+ Def: 114
+ Mdef: 53
+ Stats: {
+ Str: 98
+ Agi: 72
+ Vit: 65
+ Int: 49
+ Dex: 68
+ Luk: 71
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Race: "RC_Dragon"
+ Element: ("Ele_Fire", 2)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ Assist: true
+ CanAttack: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 175
+ AttackDelay: 1024
+ AttackMotion: 624
+ DamageMotion: 336
+},
+{
+ Id: 3731
+ SpriteName: "SCATLETON"
+ Name: "Scatleton"
+ Lv: 14
+ Hp: 140
+ Attack: [50, 13]
+ Def: 13
+ Stats: {
+ Str: 10
+ Agi: 12
+ Vit: 8
+ Int: 5
+ Dex: 17
+ Luk: 7
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Small"
+ Race: "RC_Demon"
+ Element: ("Ele_Dark", 1)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ }
+ MoveSpeed: 300
+ AttackDelay: 1600
+ AttackMotion: 900
+ DamageMotion: 240
+},
+{
+ Id: 3790
+ SpriteName: "SWEETS_DROPS"
+ Name: "Sweets Drops"
+ Lv: 1
+ Hp: 20
+ Exp: 27
+ JExp: 20
+ Attack: [12, 1]
+ Def: 16
+ Stats: {
+ Str: 1
+ Agi: 1
+ Vit: 1
+ Int: 1
+ Dex: 1
+ Luk: 1
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Race: "RC_Plant"
+ Element: ("Ele_Fire", 1)
+ Mode: {
+ CanMove: true
+ Looter: true
+ CanAttack: true
+ }
+ MoveSpeed: 440
+ AttackDelay: 1372
+ AttackMotion: 672
+ DamageMotion: 480
+},
+{
+ Id: 3971
+ SpriteName: "SKELION"
+ Name: "Skelion"
+ Lv: 150
+ Hp: 13000
+ Exp: 594
+ JExp: 669
+ Attack: [222, 56]
+ Def: 88
+ Mdef: 16
+ Stats: {
+ Str: 25
+ Agi: 16
+ Vit: 12
+ Int: 45
+ Dex: 33
+ Luk: 29
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Small"
+ Race: "RC_Formless"
+ Element: ("Ele_Neutral", 1)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ Boss: true
+ CanAttack: true
+ }
+ MoveSpeed: 150
+ AttackDelay: 960
+ AttackMotion: 864
+ DamageMotion: 0
+},
+{
+ Id: 20373
+ SpriteName: "NIGHTMARE_TERROR_H"
+ Name: "Rigid Nightmare Terror"
+ Lv: 179
+ Hp: 1523377
+ Exp: 138489
+ JExp: 96942
+ Attack: [1709, 725]
+ Def: 242
+ Mdef: 75
+ Stats: {
+ Str: 81
+ Agi: 149
+ Vit: 21
+ Int: 186
+ Dex: 129
+ Luk: 61
+ }
+ ViewRange: 12
+ ChaseRange: 10
+ Size: "Size_Large"
+ Race: "RC_Demon"
+ Element: ("Ele_Dark", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Detector: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 165
+ AttackDelay: 1216
+ AttackMotion: 816
+ DamageMotion: 432
+ Drops: {
+ Rigid_Nightmare_Terror_Card: 10
+ }
+},
+{
+ Id: 20420
+ SpriteName: "WANDER_MAN_H"
+ Name: "Corrupted Wanderer"
+ Lv: 187
+ Hp: 2387582
+ Exp: 170542
+ JExp: 119379
+ Attack: [3654, 1645]
+ Def: 289
+ Mdef: 102
+ Stats: {
+ Str: 176
+ Agi: 121
+ Vit: 34
+ Int: 67
+ Dex: 139
+ Luk: 77
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Race: "RC_Demon"
+ Element: ("Ele_Wind", 2)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CanAttack: true
+ Detector: true
+ Angry: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 100
+ AttackDelay: 672
+ AttackMotion: 500
+ DamageMotion: 192
+ Drops: {
+ Contaminated_Wanderer_Card: 10
+ }
+},
+{
+ Id: 20423
+ SpriteName: "BACSOJIN2"
+ Name: "Bacsojin"
+ Lv: 97
+ Hp: 720500
+ Sp: 1
+ Exp: 801792
+ JExp: 542880
+ AttackRange: 3
+ Attack: [1414, 2036]
+ Def: 210
+ Mdef: 178
+ Stats: {
+ Str: 118
+ Agi: 244
+ Vit: 98
+ Int: 126
+ Dex: 246
+ Luk: 102
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Large"
+ Race: "RC_DemiHuman"
+ Element: ("Ele_Wind", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CastSensorIdle: true
+ Boss: true
+ CanAttack: true
+ Detector: true
+ CastSensorChase: true
+ ChangeChase: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 130
+ AttackDelay: 576
+ AttackMotion: 960
+ DamageMotion: 480
+},
+{
+ Id: 20424
+ SpriteName: "MOONLIGHT2"
+ Name: "Moonlight Flower"
+ Lv: 79
+ Hp: 324000
+ Sp: 1
+ Exp: 367488
+ JExp: 271440
+ AttackRange: 1
+ Attack: [2232, 1251]
+ Def: 254
+ Mdef: 81
+ Stats: {
+ Str: 86
+ Agi: 102
+ Vit: 93
+ Int: 82
+ Dex: 157
+ Luk: 120
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Medium"
+ Race: "RC_Demon"
+ Element: ("Ele_Fire", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CastSensorIdle: true
+ Boss: true
+ CanAttack: true
+ Detector: true
+ CastSensorChase: true
+ ChangeChase: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 150
+ AttackDelay: 1276
+ AttackMotion: 576
+ DamageMotion: 288
+},
+{
+ Id: 20425
+ SpriteName: "PHREEONI2"
+ Name: "Phreeoni"
+ Lv: 71
+ Hp: 300000
+ Sp: 1
+ Exp: 127600
+ JExp: 180000
+ AttackRange: 1
+ Attack: [693, 967]
+ Def: 269
+ Mdef: 98
+ Stats: {
+ Str: 88
+ Agi: 70
+ Vit: 112
+ Int: 87
+ Dex: 122
+ Luk: 71
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Large"
+ Race: "RC_Brute"
+ Element: ("Ele_Neutral", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CastSensorIdle: true
+ Boss: true
+ CanAttack: true
+ Detector: true
+ CastSensorChase: true
+ ChangeChase: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 200
+ AttackDelay: 1020
+ AttackMotion: 1020
+ DamageMotion: 288
+},
+{
+ Id: 20571
+ SpriteName: "ORK_HERO2"
+ Name: "Orc Hero"
+ Lv: 50
+ Hp: 362000
+ Sp: 1
+ Exp: 106920
+ JExp: 97200
+ AttackRange: 1
+ Attack: [662, 441]
+ Def: 197
+ Mdef: 70
+ Stats: {
+ Str: 97
+ Agi: 82
+ Vit: 107
+ Int: 71
+ Dex: 144
+ Luk: 43
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Large"
+ Race: "RC_DemiHuman"
+ Element: ("Ele_Earth", 2)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CastSensorIdle: true
+ Boss: true
+ CanAttack: true
+ Detector: true
+ CastSensorChase: true
+ ChangeChase: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 150
+ AttackDelay: 1678
+ AttackMotion: 780
+ DamageMotion: 648
+},
+{
+ Id: 20619
+ SpriteName: "GLOOMUNDERNIGHT2"
+ Name: "Gloom Under Night"
+ Lv: 139
+ Hp: 3005000
+ Sp: 1
+ Exp: 2808000
+ JExp: 1800000
+ AttackRange: 3
+ Attack: [6592, 2785]
+ Def: 479
+ Mdef: 262
+ Stats: {
+ Str: 191
+ Agi: 223
+ Vit: 187
+ Int: 155
+ Dex: 362
+ Luk: 163
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Large"
+ Race: "RC_Formless"
+ Element: ("Ele_Ghost", 3)
+ Mode: {
+ CanMove: true
+ Aggressive: true
+ CastSensorIdle: true
+ Boss: true
+ CanAttack: true
+ Detector: true
+ CastSensorChase: true
+ ChangeChase: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 200
+ AttackDelay: 1344
+ AttackMotion: 2880
+ DamageMotion: 576
+},
+{/** Needs info. No data found. Using dummy data for now to enable pet. **/
+ Id: 20696
+ SpriteName: "EP17_2_CHILD_ADMIN1"
+ Name: "Child Admin Beta"
+},
+{/** Needs info. No data found. Using dummy data for now to enable pet. **/
+ Id: 20697
+ SpriteName: "EP17_2_CHILD_ADMIN2"
+ Name: "Child Admin Alpha"
+},
)
diff --git a/db/re/mob_skill_db.conf b/db/re/mob_skill_db.conf
index 624970c5f..b7f1164da 100644
--- a/db/re/mob_skill_db.conf
+++ b/db/re/mob_skill_db.conf
@@ -36,20 +36,20 @@ mob_skill_db:(
<Skill_Constant>: {
ClearSkills: (boolean, defaults to false) allows cleaning all previous defined skills for the mob.
SkillLevel: (int, defaults to 1)
- SkillState: (int, defaults to 0)
- SkillTarget: (int, defaults to 0)
+ SkillState: (string, defaults to "MSS_ANY")
+ SkillTarget: (string, defaults to "MST_TARGET")
Rate: (int, defaults to 1)
CastTime: (int, defaults to 0)
Delay: (int, defaults to 0)
Cancelable: (boolean, defaults to false)
- CastCondition: (int, defaults to 0)
+ CastCondition: (string, defaults to "MSC_ALWAYS")
ConditionData: (int, defaults to 0)
val0: (int, defaults to 0)
val1: (int, defaults to 0)
val2: (int, defaults to 0)
val3: (int, defaults to 0)
val4: (int, defaults to 0)
- Emotion: (int, defaults to 0)
+ Emotion: (int, defaults to -1)
ChatMsgID: (int, defaults to 0)
}
}
@@ -100586,6 +100586,71 @@ mob_skill_db:(
CastCondition: "MSC_ALWAYS"
}
}
+ WOODIE: {
+ AL_HEAL: {
+ SkillState: "MSS_BERSERK"
+ SkillLevel: 9
+ Rate: 10000
+ CastTime: 500
+ Delay: 5000
+ SkillTarget: "MST_SELF"
+ }
+ NPC_FIREATTACK: {
+ SkillState: "MSS_BERSERK"
+ SkillLevel: 3
+ Rate: 2000
+ CastTime: 500
+ Delay: 5000
+ SkillTarget: "MST_TARGET"
+ }
+ NPC_GROUNDATTACK: {
+ SkillState: "MSS_BERSERK"
+ SkillLevel: 3
+ Rate: 2000
+ CastTime: 500
+ Delay: 5000
+ SkillTarget: "MST_TARGET"
+ }
+ }
+ XM_TEDDY_BEAR: {
+ NPC_CURSEATTACK: {
+ SkillState: "MSS_BERSERK"
+ SkillLevel: 4
+ Rate: 500
+ Delay: 5000
+ SkillTarget: "MST_SELF"
+ }
+ NPC_CURSEATTACK: {
+ SkillState: "MSS_FOLLOW"
+ SkillLevel: 4
+ Rate: 500
+ Delay: 5000
+ SkillTarget: "MST_SELF"
+ }
+ NPC_CRITICALSLASH: {
+ SkillState: "MSS_BERSERK"
+ SkillLevel: 1
+ Rate: 500
+ Delay: 5000
+ SkillTarget: "MST_TARGET"
+ }
+ SA_DISPELL: {
+ SkillState: "MSS_BERSERK"
+ SkillLevel: 1
+ Rate: 50
+ CastTime: 1000
+ Delay: 15000
+ SkillTarget: "MST_TARGET"
+ }
+ BS_HAMMERFALL: {
+ SkillState: "MSS_BERSERK"
+ SkillLevel: 5
+ Rate: 500
+ CastTime: 1000
+ Delay: 5000
+ SkillTarget: "MST_TARGET"
+ }
+ }
TIMEHOLDER: {
NPC_AGIUP: {
SkillState: "MSS_BERSERK"
diff --git a/db/re/pet_db.conf b/db/re/pet_db.conf
index fc4496125..f31131653 100644
--- a/db/re/pet_db.conf
+++ b/db/re/pet_db.conf
@@ -34,65 +34,66 @@ pet_db:(
{
// ================ Mandatory fields ==============================
Id: ID (int)
- SpriteName: "Sprite_Name" (string)
Name: "Pet Name" (string)
+ EggItem: "Egg Item Constant" (string)
// ================ Optional fields ===============================
- TamingItem: Taming Item (string, defaults to 0)
- EggItem: Egg Id (string, defaults to 0)
- AccessoryItem: Equipment Id (string, defaults to 0)
- FoodItem: Food Id (string, defaults to 0)
- FoodEffectiveness: hunger points (int, defaults to 0)
- HungerDelay: hunger time (int, defaults to 0)
+ TamingItem: "Taming Item Constant" (string, defaults to 0)
+ FoodItem: "Food Item Constant" (string, defaults to "Pet_Food" (ID=537))
+ AccessoryItem: "Equipment Item Constant" (string, defaults to 0)
+ FoodEffectiveness: hunger points (int, defaults to 80)
+ HungerDelay: hunger time (int, defaults to 60)
+ HungerDecrement: hunger points (int, defaults to 1)
Intimacy: {
- Initial: start intimacy (int, defaults to 0)
- FeedIncrement: feeding intimacy (int, defaults to 0)
- OverFeedDecrement: overfeeding intimacy (int, defaults to 0)
- OwnerDeathDecrement: owner die intimacy (int, defaults to 0)
- }
- CaptureRate: capture rate (int, defaults to 0)
- Speed: speed (int, defaults to 0)
+ Initial: start intimacy (int, defaults to 250)
+ FeedIncrement: feeding intimacy (int, defaults to 10)
+ OverFeedDecrement: overfeeding intimacy (int, defaults to 100)
+ OwnerDeathDecrement: owner die intimacy (int, defaults to 20)
+ StarvingDelay: starving time (int, defaults to 20)
+ StarvingDecrement: starving intimacy (int, defaults to 20)
+ }
+ CaptureRate: capture rate (int, defaults to 1000)
+ Speed: speed (int, defaults to 150)
SpecialPerformance: true/false (boolean, defaults to false)
TalkWithEmotes: convert talk (boolean, defaults to false)
- AttackRate: attack rate (int, defaults to 0)
- DefendRate: Defence attack (int, defaults to 0)
- ChangeTargetRate: change target (int, defaults to 0)
+ AttackRate: attack rate (int, defaults to 300)
+ DefendRate: Defence attack (int, defaults to 300)
+ ChangeTargetRate: change target (int, defaults to 800)
+ AutoFeed: true/false (boolean, defaults to false)
+ PetScript: <" Pet Script (can also be multi-line) ">
+ EquipScript: <" Equip Script (can also be multi-line) ">
Evolve: {
- EggID: { (string, Evolved Pet EggID)
- Name: Amount (items required to perform evolution)
+ EggID: { (string, Evolved Pet EggID)
+ Name: Amount (items required to perform evolution)
...
}
}
- AutoFeed: true/false (boolean, defaults to false)
- PetScript: <" Pet Script (can also be multi-line) ">
- EquipScript: <" Equip Script (can also be multi-line) ">
},
**************************************************************************/
{
Id: 1002
- SpriteName: "PORING"
Name: "Poring"
- TamingItem: "Unripe_Apple"
EggItem: "Poring_Egg"
- AccessoryItem: "Backpack"
+ TamingItem: "Unripe_Apple"
FoodItem: "Apple_Juice"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Backpack"
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 2000
- Speed: 150
SpecialPerformance: true
AttackRate: 350
DefendRate: 400
- ChangeTargetRate: 800
PetScript: <" petloot(10); ">
EquipScript: <"
- bonus(bLuk, 2);
- bonus(bCritical, 1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bLuk, 3);
+ bonus(bCritical, 1);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bLuk, 2);
+ bonus(bCritical, 1);
+ }
">
Evolve: {
Mastering_Egg: {
@@ -103,85 +104,74 @@ pet_db:(
},
{
Id: 1011
- SpriteName: "CHONCHON"
Name: "ChonChon"
- TamingItem: "Rotten_Fish"
EggItem: "Chonchon_Egg"
+ TamingItem: "Rotten_Fish"
AccessoryItem: "Monster_Oxygen_Mask"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 6
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 1500
- Speed: 150
SpecialPerformance: true
AttackRate: 500
DefendRate: 500
ChangeTargetRate: 250
PetScript: <" petskillbonus(bAgi, 4, 10, 50); ">
EquipScript: <"
- bonus(bAgi, 1);
- bonus(bFlee, 2);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bAgi, 2);
+ bonus(bFlee, 3);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bAgi, 1);
+ bonus(bFlee, 2);
+ }
">
},
{
Id: 1014
- SpriteName: "SPORE"
Name: "Spore"
- TamingItem: "Dew_Laden_Moss"
EggItem: "Spore_Egg"
+ TamingItem: "Dew_Laden_Moss"
AccessoryItem: "Bark_Shorts"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 1500
- Speed: 150
AttackRate: 350
DefendRate: 500
ChangeTargetRate: 500
PetScript: <" petrecovery(SC_POISON, 60); ">
EquipScript: <"
- bonus(bHit, 5);
- bonus(bAtk, -2);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bHit, 8);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bHit, 5);
">
},
{
Id: 1019
- SpriteName: "PECOPECO"
Name: "PecoPeco"
- TamingItem: "Fatty_Chubby_Earthworm"
EggItem: "PecoPeco_Egg"
+ TamingItem: "Fatty_Chubby_Earthworm"
AccessoryItem: "Battered_Pot"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 4
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 1000
- Speed: 150
SpecialPerformance: true
AttackRate: 400
DefendRate: 500
- ChangeTargetRate: 800
PetScript: <" petskillbonus(bSpeedRate, 25, 20, 20); ">
EquipScript: <"
- bonus(bMaxHP, 150);
- bonus(bMaxSP, -10);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bMaxHP, 200);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bMaxHP, 150);
">
Evolve: {
Grand_Peco_Peco_Egg: {
@@ -195,30 +185,26 @@ pet_db:(
},
{
Id: 1023
- SpriteName: "ORK_WARRIOR"
Name: "Orc Warrior"
- TamingItem: "Horror_Of_Tribe"
EggItem: "Orc_Warrior_Egg"
+ TamingItem: "Horror_Of_Tribe"
AccessoryItem: "Wild_Flower"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 5
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
SpecialPerformance: true
AttackRate: 600
DefendRate: 200
ChangeTargetRate: 300
PetScript: <" petskillattack("NPC_PIERCINGATT", 100, 1, 0, 10); ">
EquipScript: <"
- bonus(bAtk, 10);
- bonus(bDef, -3);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bAtk, 15);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bAtk, 10);
">
Evolve: {
High_Orc_Egg: {
@@ -232,56 +218,47 @@ pet_db:(
},
{
Id: 1026
- SpriteName: "MUNAK"
Name: "Munak"
- TamingItem: "No_Recipient"
EggItem: "Munak_Egg"
+ TamingItem: "No_Recipient"
AccessoryItem: "Punisher"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
- AttackRate: 300
DefendRate: 750
ChangeTargetRate: 300
PetScript: <" petskillattack("NPC_DARKNESSATTACK", 444, 1, 0, 10); ">
EquipScript: <"
- bonus(bInt, 1);
- bonus(bDef, 1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bInt, 2);
+ bonus(bDef, 2);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bInt, 1);
+ bonus(bDef, 1);
+ }
">
},
{
Id: 1029
- SpriteName: "ISIS"
Name: "Isis"
- TamingItem: "Armlet_Of_Obedience"
EggItem: "Isis_Egg"
+ TamingItem: "Armlet_Of_Obedience"
AccessoryItem: "Queens_Hair_Ornament"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
+ HungerDecrement: 3
CaptureRate: 500
- Speed: 150
AttackRate: 650
DefendRate: 450
ChangeTargetRate: 150
PetScript: <" petskillsupport("PR_MAGNIFICAT", 2, 60, 50, 50); ">
EquipScript: <"
- bonus(bMatkRate, -1);
- bonus(bAtkRate, 1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bAtkRate, 2);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bAtkRate, 1);
">
Evolve: {
Little_Isis_Egg: {
@@ -294,141 +271,127 @@ pet_db:(
},
{
Id: 1031
- SpriteName: "POPORING"
Name: "Poporing"
- TamingItem: "Bitter_Herb"
EggItem: "Poporing_Egg"
- AccessoryItem: "Backpack"
+ TamingItem: "Bitter_Herb"
FoodItem: "Green_Herb"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Backpack"
+ HungerDecrement: 5
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 1000
- Speed: 150
SpecialPerformance: true
- AttackRate: 300
DefendRate: 500
ChangeTargetRate: 400
PetScript: <" petloot(15); ">
EquipScript: <"
- bonus(bLuk, 2);
- bonus2(bSubEle, Ele_Poison, 10);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bLuk, 3);
+ bonus2(bSubEle, Ele_Poison, 15);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bLuk, 2);
+ bonus2(bSubEle, Ele_Poison, 10);
+ }
">
},
{
Id: 1035
- SpriteName: "HUNTER_FLY"
Name: "Hunter Fly"
- TamingItem: "Monster_Juice"
EggItem: "Hunter_Fly_Egg"
- AccessoryItem: "Monster_Oxygen_Mask"
+ TamingItem: "Monster_Juice"
FoodItem: "Red_Gemstone"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
+ AccessoryItem: "Monster_Oxygen_Mask"
+ HungerDecrement: 5
CaptureRate: 500
- Speed: 150
SpecialPerformance: true
AttackRate: 500
DefendRate: 500
ChangeTargetRate: 200
PetScript: <" petskillattack("NPC_WINDATTACK", 888, 2, 0, 10); ">
EquipScript: <"
- bonus(bFlee, -5);
- bonus(bFlee2, 2);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bFlee2, 2);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bHit, 1);
">
},
{
Id: 1042
- SpriteName: "STEEL_CHONCHON"
Name: "Steel ChonChon"
- TamingItem: "Lusty_Iron"
EggItem: "Steel_Chonchon_Egg"
- AccessoryItem: "Monster_Oxygen_Mask"
+ TamingItem: "Lusty_Iron"
FoodItem: "Iron_Ore"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Monster_Oxygen_Mask"
+ HungerDecrement: 5
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 1000
- Speed: 150
SpecialPerformance: true
AttackRate: 500
DefendRate: 500
ChangeTargetRate: 200
PetScript: <" petskillbonus(bAgiVit, 4, 20, 40); ">
EquipScript: <"
- bonus(bFlee, 6);
- bonus(bAgi, -1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bFlee, 9);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bFlee, 6);
">
},
{
Id: 1049
- SpriteName: "PICKY"
Name: "Picky"
- TamingItem: "Earthworm_The_Dude"
EggItem: "Picky_Egg"
- AccessoryItem: "Tiny_Egg_Shell"
+ TamingItem: "Earthworm_The_Dude"
FoodItem: "Red_Herb"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Tiny_Egg_Shell"
+ HungerDecrement: 4
Intimacy: {
- Initial: 250
FeedIncrement: 40
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 2000
- Speed: 150
SpecialPerformance: true
AttackRate: 500
DefendRate: 600
ChangeTargetRate: 50
PetScript: <" petskillbonus(bStr, 3, 10, 50); ">
EquipScript: <"
- bonus(bStr, 1);
- bonus(bAtk, 5);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bStr, 2);
+ bonus(bAtk, 8);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bStr, 1);
+ bonus(bAtk, 5);
+ }
">
},
{
Id: 1052
- SpriteName: "ROCKER"
Name: "Rocker"
- TamingItem: "Singing_Flower"
EggItem: "Rocker_Egg"
+ TamingItem: "Singing_Flower"
AccessoryItem: "Rocker_Glasses"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 1500
- Speed: 150
AttackRate: 350
DefendRate: 350
ChangeTargetRate: 600
PetScript: <" petskillbonus(bAllStats, 1, 10, 50); ">
EquipScript: <"
- bonus(bHPrecovRate, 5);
- bonus(bMaxHP, 25);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bHPrecovRate, 8);
+ bonus(bMaxHP, 38);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bHPrecovRate, 5);
+ bonus(bMaxHP, 25);
+ }
">
Evolve: {
Metaller_Egg: {
@@ -441,58 +404,51 @@ pet_db:(
},
{
Id: 1056
- SpriteName: "SMOKIE"
Name: "Smokie"
- TamingItem: "Baked_Yam"
EggItem: "Smokie_Egg"
+ TamingItem: "Baked_Yam"
AccessoryItem: "Red_Muffler"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 4
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 1000
- Speed: 150
SpecialPerformance: true
AttackRate: 600
DefendRate: 600
ChangeTargetRate: 100
PetScript: <" petskillbonus(bPerfectHide, 1, 3600, 0); ">
EquipScript: <"
- bonus(bAgi, 1);
- bonus(bFlee2, 1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bAgi, 2);
+ bonus(bFlee2, 1);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bAgi, 1);
+ bonus(bFlee2, 1);
+ }
">
},
{
Id: 1057
- SpriteName: "YOYO"
Name: "Yoyo"
- TamingItem: "Tropical_Banana"
EggItem: "Yoyo_Egg"
- AccessoryItem: "Monkey_Circlet"
+ TamingItem: "Tropical_Banana"
FoodItem: "Banana_Juice"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Monkey_Circlet"
+ HungerDecrement: 5
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 1000
- Speed: 150
SpecialPerformance: true
- AttackRate: 300
DefendRate: 800
ChangeTargetRate: 400
PetScript: <" petloot(20); ">
EquipScript: <"
- bonus(bCritical, 3);
- bonus(bLuk, -1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bCritical, 5);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bCritical, 3);
">
Evolve: {
Choco_Egg: {
@@ -505,29 +461,27 @@ pet_db:(
},
{
Id: 1063
- SpriteName: "LUNATIC"
Name: "Lunatic"
- TamingItem: "Rainbow_Carrot"
EggItem: "Lunatic_Egg"
- AccessoryItem: "Silk_Ribbon"
+ TamingItem: "Rainbow_Carrot"
FoodItem: "Carrot_Juice"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Silk_Ribbon"
+ HungerDecrement: 4
Intimacy: {
- Initial: 250
FeedIncrement: 40
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 1500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
ChangeTargetRate: 1000
PetScript: <" petskillbonus(bLuk, 3, 10, 50); ">
EquipScript: <"
- bonus(bCritical, 2);
- bonus(bAtk, 2);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bCritical, 3);
+ bonus(bAtk, 3);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bCritical, 2);
+ bonus(bAtk, 2);
+ }
">
Evolve: {
Leaf_Lunatic_Egg: {
@@ -540,113 +494,103 @@ pet_db:(
},
{
Id: 1077
- SpriteName: "POISON_SPORE"
Name: "Poison Spore"
- TamingItem: "Deadly_Noxious_Herb"
EggItem: "Poison_Spore_Egg"
+ TamingItem: "Deadly_Noxious_Herb"
AccessoryItem: "Bark_Shorts"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 1000
- Speed: 150
AttackRate: 600
DefendRate: 200
ChangeTargetRate: 400
PetScript: <" petskillattack("NPC_POISON", 20, 0, 0, 10); ">
EquipScript: <"
- bonus(bStr, 1);
- bonus(bInt, 1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bStr, 2);
+ bonus(bInt, 2);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bStr, 1);
+ bonus(bInt, 1);
+ }
">
},
{
Id: 1101
- SpriteName: "BAPHOMET_"
Name: "Baphomet Jr."
- TamingItem: "Book_Of_Devil"
EggItem: "Bapho_Jr_Egg"
- AccessoryItem: "Skull_Helm"
+ TamingItem: "Book_Of_Devil"
FoodItem: "Honey"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
+ AccessoryItem: "Skull_Helm"
+ HungerDecrement: 2
CaptureRate: 200
- Speed: 150
AttackRate: 1000
DefendRate: 100
ChangeTargetRate: 200
PetScript: <" petskillattack("NPC_DARKNESSATTACK", 1776, 4, 0, 5); ">
EquipScript: <"
- bonus(bDef, 1);
- bonus(bMdef, 1);
- bonus2(bResEff, Eff_Stun, -100);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bDef, 2);
+ bonus(bMdef, 2);
+ bonus2(bResEff, Eff_Stun, 200);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bDef, 1);
+ bonus(bMdef, 1);
+ bonus2(bResEff, Eff_Stun, 100);
+ }
">
},
{
Id: 1107
- SpriteName: "DESERT_WOLF_B"
Name: "Baby Desert Wolf"
- TamingItem: "Well_Dried_Bone"
EggItem: "Baby_Desert_Wolf_Egg"
+ TamingItem: "Well_Dried_Bone"
AccessoryItem: "Transparent_Headgear"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 6
Intimacy: {
- Initial: 250
FeedIncrement: 40
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 1000
- Speed: 150
AttackRate: 400
DefendRate: 400
ChangeTargetRate: 400
PetScript: <" petskillattack("SM_PROVOKE", 1, 0, 0, 5);">
EquipScript: <"
- bonus(bInt, 1);
- bonus(bMaxSP, 50);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bInt, 2);
+ bonus(bMaxSP, 75);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bInt, 1);
+ bonus(bMaxSP, 50);
+ }
">
},
{
Id: 1109
- SpriteName: "DEVIRUCHI"
Name: "Deviruchi"
- TamingItem: "Contracts_In_Shadow"
EggItem: "Deviruchi_Egg"
- AccessoryItem: "Pacifier"
+ TamingItem: "Contracts_In_Shadow"
FoodItem: "Shoot"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
+ AccessoryItem: "Pacifier"
+ HungerDecrement: 2
CaptureRate: 500
- Speed: 150
AttackRate: 800
DefendRate: 200
ChangeTargetRate: 100
PetScript: <" petskillbonus(bAgiDexStr, 6, 20, 40); ">
EquipScript: <"
- bonus(bMatkRate, 1);
- bonus(bAtkRate, 1);
- bonus(bMaxHPrate, -3);
- bonus(bMaxSPrate, -3);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bAtkRate, 1);
+ bonus(bMatkRate, 1);
+ }
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bMaxHPrate, 1);
+ bonus(bMaxSPrate, 1);
+ }
">
Evolve: {
Diabolic_Egg_: {
@@ -659,29 +603,22 @@ pet_db:(
},
{
Id: 1110
- SpriteName: "DOKEBI"
Name: "Dokebi"
- TamingItem: "Old_Broom"
EggItem: "Dokkaebi_Egg"
+ TamingItem: "Old_Broom"
AccessoryItem: "Wig"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 4
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("BS_HAMMERFALL", 1, 0, 0, 10); ">
EquipScript: <"
- bonus(bMatkRate, 1);
- bonus(bAtkRate, -1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bMatkRate, 2);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bMatkRate, 1);
">
Evolve: {
Am_Mut_Egg: {
@@ -694,30 +631,29 @@ pet_db:(
},
{
Id: 1113
- SpriteName: "DROPS"
Name: "Drops"
- TamingItem: "Orange_Juice"
EggItem: "Drops_Egg"
- AccessoryItem: "Backpack"
+ TamingItem: "Orange_Juice"
FoodItem: "Yellow_Herb"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Backpack"
+ HungerDecrement: 4
Intimacy: {
- Initial: 250
FeedIncrement: 40
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 1500
- Speed: 150
SpecialPerformance: true
- AttackRate: 300
DefendRate: 400
ChangeTargetRate: 500
PetScript: <" petloot(10); ">
EquipScript: <"
- bonus(bHit, 3);
- bonus(bAtk, 3);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bHit, 5);
+ bonus(bAtk, 5);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bHit, 3);
+ bonus(bAtk, 3);
+ }
">
Evolve: {
Eggring_Egg: {
@@ -726,42 +662,35 @@ pet_db:(
Apple_Juice: 3
Eggring_Card: 1
}
-/*
Sweet_Drops_Egg: {
- 25290: 500
+ Sweets_Coin: 500
Candy: 50
Candy_Striper: 50
Drops_Card: 1
}
-*/
}
},
{
Id: 1155
- SpriteName: "PETIT"
Name: "Petite"
- TamingItem: "Shining_Stone"
EggItem: "Green_Petite_Egg"
+ TamingItem: "Shining_Stone"
AccessoryItem: "Stellar_Hairpin"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 4
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
AttackRate: 800
DefendRate: 400
ChangeTargetRate: 100
PetScript: <" petskillattack("WZ_HEAVENDRIVE", 500, 1, 0, 10); ">
EquipScript: <"
- bonus(bDef, -2);
- bonus(bMdef, -2);
- bonus(bAspdRate, 1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bAspdRate, 1);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bAgi, 1);
">
Evolve: {
Earth_Deleter_Egg: {
@@ -774,29 +703,28 @@ pet_db:(
},
{
Id: 1167
- SpriteName: "SAVAGE_BABE"
Name: "Savage Babe"
- TamingItem: "Sweet_Milk"
EggItem: "Savage_Bebe_Egg"
+ TamingItem: "Sweet_Milk"
AccessoryItem: "Green_Lace"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 7
Intimacy: {
- Initial: 250
FeedIncrement: 40
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 1500
- Speed: 150
AttackRate: 500
DefendRate: 500
ChangeTargetRate: 200
PetScript: <" petskillbonus(bVit, 4, 10, 50); ">
EquipScript: <"
- bonus(bVit, 1);
- bonus(bMaxHP, 50);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bVit, 2);
+ bonus(bMaxHP, 75);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bVit, 1);
+ bonus(bMaxHP, 50);
+ }
">
Evolve: {
Savage_Egg: {
@@ -809,57 +737,52 @@ pet_db:(
},
{
Id: 1170
- SpriteName: "SOHEE"
Name: "Sohee"
- TamingItem: "Silver_Knife_Of_Chaste"
EggItem: "Sohee_Egg"
+ TamingItem: "Silver_Knife_Of_Chaste"
AccessoryItem: "Golden_Bell"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
+ HungerDecrement: 3
CaptureRate: 500
- Speed: 150
AttackRate: 100
DefendRate: 1000
ChangeTargetRate: 200
PetScript: <" petskillsupport(AL_HEAL, 10, 60, 33, 100); ">
EquipScript: <"
- bonus(bStr, 1);
- bonus(bDex, 1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bStr, 2);
+ bonus(bDex, 2);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bStr, 1);
+ bonus(bDex, 1);
+ }
">
},
{
Id: 1188
- SpriteName: "BON_GUN"
Name: "Bon Gun"
- TamingItem: "Heart_Of_Her"
EggItem: "Bongun_Egg"
+ TamingItem: "Heart_Of_Her"
AccessoryItem: "Sword_Of_Grave_Keeper"
- FoodItem: "Pet_Food"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 4
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 500
- Speed: 150
SpecialPerformance: true
AttackRate: 600
DefendRate: 200
ChangeTargetRate: 400
PetScript: <" petskillattack("NPC_DARKNESSATTACK", 555, 1, 1, 1); ">
EquipScript: <"
- bonus(bVit, 1);
- bonus2(bResEff, Eff_Stun, 100);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bVit, 2);
+ bonus2(bResEff, Eff_Stun, 200);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bVit, 1);
+ bonus2(bResEff, Eff_Stun, 100);
+ }
">
Evolve: {
Hyegun_Egg: {
@@ -872,906 +795,743 @@ pet_db:(
},
{
Id: 1200
- SpriteName: "ZHERLTHSH"
Name: "Zealotus"
- TamingItem: "Prohibition_Red_Candle"
EggItem: "Zherlthsh_Egg"
+ TamingItem: "Prohibition_Red_Candle"
FoodItem: "Immortal_Heart"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
+ HungerDecrement: 7
CaptureRate: 300
- Speed: 150
AttackRate: 1000
DefendRate: 100
ChangeTargetRate: 500
PetScript: <" petskillattack("AS_SONICBLOW", 1, 0, 0, 3); ">
EquipScript: <"
- bonus2(bAddRace, RC_DemiPlayer, 2);
- bonus2(bMagicAddRace, RC_DemiPlayer, 2);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus2(bAddRace, RC_DemiPlayer, 3);
+ bonus2(bMagicAddRace, RC_DemiPlayer, 3);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus2(bAddRace, RC_DemiPlayer, 2);
+ bonus2(bMagicAddRace, RC_DemiPlayer, 2);
+ }
">
},
{
Id: 1245
- SpriteName: "GOBLINE_XMAS"
Name: "Christmas Goblin"
- TamingItem: "Sweet_Candy_Striper"
EggItem: "Santa_Goblin_Egg"
+ TamingItem: "Sweet_Candy_Striper"
FoodItem: "Scell"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 2000
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("MG_SIGHT", 5, 0, 5, 5); ">
EquipScript: <"
- bonus(bMaxHP, 30);
- bonus2(bSubEle, Ele_Water, 1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bMaxHP, 45);
+ bonus2(bSubEle, Ele_Water, 2);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bMaxHP, 30);
+ bonus2(bSubEle, Ele_Water, 1);
+ }
">
},
{
Id: 1275
- SpriteName: "ALICE"
Name: "Alice"
- TamingItem: "Sway_Apron"
EggItem: "Alice_Egg"
+ TamingItem: "Sway_Apron"
FoodItem: "White_Potion"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 2
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 800
- Speed: 150
AttackRate: 100
DefendRate: 1000
ChangeTargetRate: 200
PetScript: <" petskillsupport("AL_HEAL", 5, 60, 25, 100); ">
EquipScript: <"
- bonus(bMdef, 1);
- bonus2(bAddRaceTolerance, RC_DemiPlayer, 1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bMdef, 2);
+ bonus2(bAddRaceTolerance, RC_DemiPlayer, 2);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bMdef, 1);
+ bonus2(bAddRaceTolerance, RC_DemiPlayer, 1);
+ }
">
+ Evolve: {
+ Aliza_Egg: {
+ Alices_Apron: 500
+ Green_Herb: 200
+ Elunium: 30
+ Alice_Card: 1
+ }
+ }
},
// New Pets
{
Id: 1122
- SpriteName: "GOBLIN_1"
Name: "Goblin"
- TamingItem: "Knife_Goblin_Ring"
EggItem: "Knife_Goblin_Egg"
+ TamingItem: "Knife_Goblin_Ring"
FoodItem: "Green_Apple"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 800
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("NPC_WINDATTACK", 5, 0, 5, 5); ">
},
{
Id: 1123
- SpriteName: "GOBLIN_2"
Name: "Goblin"
- TamingItem: "Flail_Goblin_Ring"
EggItem: "Flail_Goblin_Egg"
+ TamingItem: "Flail_Goblin_Ring"
FoodItem: "Green_Apple"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 800
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("NPC_FIREATTACK", 5, 0, 5, 5); ">
},
{
Id: 1125
- SpriteName: "GOBLIN_4"
Name: "Goblin"
- TamingItem: "Hammer_Goblin_Ring"
EggItem: "Hammer_Goblin_Egg"
+ TamingItem: "Hammer_Goblin_Ring"
FoodItem: "Green_Apple"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 800
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("NPC_GROUNDATTACK", 5, 0, 5, 5); ">
},
{
Id: 1208
- SpriteName: "WANDER_MAN"
Name: "Wanderer"
- TamingItem: "Skull_Of_Vagabond"
EggItem: "Wanderer_Egg"
+ TamingItem: "Skull_Of_Vagabond"
FoodItem: "Spirit_Liquor"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 2
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 800
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("NPC_UNDEADATTACK", 5, 0, 5, 5); ">
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bAgi, 4);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bAgi, 3);
+ ">
+ Evolve: {
+ Contaminated_Wanderer_Egg: {
+ Skull: 500
+ Sacred_Marks: 50
+ Transparent_Cloth: 100
+ Wander_Man_Card: 1
+ }
+ }
},
{
Id: 1382
- SpriteName: "DIABOLIC"
Name: "Diabolic"
- TamingItem: "Red_Burning_Stone"
EggItem: "Diabolic_Egg"
+ TamingItem: "Red_Burning_Stone"
FoodItem: "Meat_Veg_Skewer"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
+ HungerDecrement: 2
CaptureRate: 800
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("WZ_METEOR", 2, 0, 5, 5); ">
},
{
Id: 1385
- SpriteName: "DELETER_"
Name: "Deleter"
- TamingItem: "Holy_Marble"
EggItem: "Red_Deleter_Egg"
+ TamingItem: "Holy_Marble"
FoodItem: "Whole_Barbecue"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 4
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 800
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("SM_MAGNUM", 5, 0, 5, 5); ">
},
{
Id: 1879
- SpriteName: "ECLIPSE_P"
Name: "Spring Rabbit"
EggItem: "Spring_Rabbit_Egg"
FoodItem: "Bok_Choy"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 2000
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("TF_THROWSTONE", 1, 0, 5, 5); ">
},
// Episode 12
{
Id: 1963
- SpriteName: "P_CHUNG_E"
Name: "New Year Doll"
EggItem: "New_Year_Doll_Egg"
FoodItem: "Mojji"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 30
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 800
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("CR_SHIELDCHARGE", 5, 0, 5, 5); ">
},
// Episode 13
{
Id: 1815
- SpriteName: "EVENT_RICECAKE"
Name: "Rice Cake"
EggItem: "Rice_Cake_Egg"
FoodItem: "Green_Herb"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 2000
- Speed: 150
SpecialPerformance: true
AttackRate: 500
DefendRate: 500
ChangeTargetRate: 200
PetScript: <" petskillsupport("CR_DEFENDER", 3, 240, 50, 100); ">
EquipScript: <"
- bonus2(bSubEle, Ele_Neutral, 1);
- bonus(bMaxHPrate, -1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus2(bSubEle, Ele_Neutral, 2);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus2(bSubEle, Ele_Neutral, 1);
">
},
{
Id: 2210
- SpriteName: "XMAS_LUNATIC"
Name: "Christmas Snow Rabbit"
EggItem: "Snow_Rabbit_Egg"
FoodItem: "Candy"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
- Speed: 150
+ HungerDecrement: 3
SpecialPerformance: true
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus2(bExpAddRace, RC_All, 5); ">
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_CORDIAL)
+ bonus2(bExpAddRace, RC_All, 5);
+ ">
},
// Episode 13.2
{
Id: 1040
- SpriteName: "GOLEM"
Name: "Golem"
- TamingItem: "Magical_Lithography"
EggItem: "Golem_Egg"
- AccessoryItem: "Windup_Spring"
+ TamingItem: "Magical_Lithography"
FoodItem: "Mystic_Stone"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Windup_Spring"
+ HungerDecrement: 7
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus(bMaxHP, 100);
- bonus(bFlee, -5);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bMaxHP, 150);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bMaxHP, 100);
">
},
{
Id: 1143
- SpriteName: "MARIONETTE"
Name: "Marionette"
- TamingItem: "Delicious_Shaved_Ice"
EggItem: "Marionette_Egg"
- AccessoryItem: "Star_Hairband"
+ TamingItem: "Delicious_Shaved_Ice"
FoodItem: "Small_Snow_Flower"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
- CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus(bSPrecovRate, 3); ">
+ AccessoryItem: "Star_Hairband"
+ HungerDecrement: 3
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ autobonus("{ bonus2(bSubEle, Ele_Neutral, 20); heal(100, 0); }", 10, 5000, BF_SHORT|BF_NORMAL);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ autobonus("{ bonus2(bSubEle, Ele_Neutral, 20); heal(100, 0); }", 10, 3000, BF_SHORT|BF_NORMAL);
+ ">
},
{
Id: 1148
- SpriteName: "MEDUSA"
Name: "Medusa"
- TamingItem: "Splendid_Mirror"
EggItem: "Medusa_Egg"
- AccessoryItem: "Queens_Coronet"
+ TamingItem: "Splendid_Mirror"
FoodItem: "Apple_Pudding"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
- CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
+ AccessoryItem: "Queens_Coronet"
+ HungerDecrement: 3
EquipScript: <"
- bonus(bVit, 1);
- bonus2(bResEff, Eff_Stone, 500);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bVit, 2);
+ bonus2(bResEff, Eff_Stone, 800);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bVit, 1);
+ bonus2(bResEff, Eff_Stone, 500);
+ }
">
},
{
Id: 1179
- SpriteName: "WHISPER"
Name: "Whisper"
- TamingItem: "Fit_Pipe"
EggItem: "Whisper_Egg"
- AccessoryItem: "Spirit_Chain_"
+ TamingItem: "Fit_Pipe"
FoodItem: "Damp_Darkness"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Spirit_Chain_"
+ HungerDecrement: 7
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus(bFlee, 7);
- bonus(bDef, -3);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bFlee, 10);
+ skill("TF_HIDING", 1);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bFlee, 7);
+ skill("TF_HIDING", 1);
+ }
">
},
{
Id: 1299
- SpriteName: "GOBLIN_LEADER"
Name: "Goblin Leader"
- TamingItem: "Staff_Of_Leader"
EggItem: "Goblin_Leader_Egg"
- AccessoryItem: "Nice_Badge"
+ TamingItem: "Staff_Of_Leader"
FoodItem: "Big_Cell"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
- CaptureRate: 50
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus2(bAddRace, RC_DemiPlayer, 3); ">
+ AccessoryItem: "Nice_Badge"
+ HungerDecrement: 7
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus2(bAddRace, RC_DemiPlayer, 5);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus2(bAddRace, RC_DemiPlayer, 3);
+ ">
},
{
Id: 1370
- SpriteName: "SUCCUBUS"
Name: "Succubus"
- TamingItem: "Boys_Naivety"
EggItem: "Succubus_Egg"
- AccessoryItem: "Black_Butterfly_Mask"
+ TamingItem: "Boys_Naivety"
FoodItem: "Vital_Flower_"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
- CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus2(bHPDrainRate, 50, 5); ">
+ AccessoryItem: "Black_Butterfly_Mask"
+ HungerDecrement: 3
+ CaptureRate: 300
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus2(bHPDrainRate, 20, 5);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bMaxHPrate, 1);
+ ">
},
{
Id: 1374
- SpriteName: "INCUBUS"
Name: "Incubus"
- TamingItem: "Grils_Naivety"
EggItem: "Incubus_Egg"
- AccessoryItem: "Ball_Mask"
+ TamingItem: "Grils_Naivety"
FoodItem: "Vital_Flower"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
- CaptureRate: 50
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus(bMaxSPrate, 3); ">
+ AccessoryItem: "Ball_Mask"
+ HungerDecrement: 3
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bMaxSPrate, 5);
+ bonus2(bSPDrainRate, 30, 1);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bMaxSPrate, 3);
+ bonus2(bSPDrainRate, 20, 1);
+ }
+ ">
},
{
Id: 1379
- SpriteName: "NIGHTMARE_TERROR"
Name: "Nightmare Terror"
- TamingItem: "Hell_Contract"
EggItem: "Nightmare_Terror_Egg"
- AccessoryItem: "Hell_Horn"
+ TamingItem: "Hell_Contract"
FoodItem: "Fresh_Plant"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
+ AccessoryItem: "Hell_Horn"
+ HungerDecrement: 3
+ CaptureRate: 300
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus2(bResEff, Eff_Sleep, 10000);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bInt, 1);
+ ">
+ Evolve: {
+ Rigid_Nightmare_Terror_Egg: {
+ Burning_Horse_Shoe: 500
+ Blue_Herb: 100
+ Shell: 100
+ Nightmare_Terror_Card: 1
+ }
}
- CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus2(bResEff, Eff_Sleep, 10000); ">
},
{
Id: 1401
- SpriteName: "SHINOBI"
Name: "Shinobi"
- TamingItem: "Kuloren"
EggItem: "Shinobi_Egg"
- AccessoryItem: "Wine_On_Sleeve"
+ TamingItem: "Kuloren"
FoodItem: "Grilled_Rice_Cake"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Wine_On_Sleeve"
+ HungerDecrement: 7
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus(bAgi, 2); ">
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bAgi, 3);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bAgi, 2);
+ ">
},
{
Id: 1404
- SpriteName: "MIYABI_NINGYO"
Name: "Miyabi Doll"
- TamingItem: "Gril_Doll"
EggItem: "Miyabi_Ningyo_Egg"
- AccessoryItem: "Summer_Fan"
+ TamingItem: "Gril_Doll"
FoodItem: "Well_Ripened_Berry"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Summer_Fan"
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 15
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus(bInt, 1);
- bonus(bCastrate, -3);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bInt, 2);
+ bonus(bVariableCastrate, -5);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bInt, 1);
+ bonus(bVariableCastrate, -3);
+ }
">
},
{
Id: 1416
- SpriteName: "WICKED_NYMPH"
Name: "Evil Nymph"
- TamingItem: "Charming_Lotus"
EggItem: "Wicked_Nymph_Egg"
- AccessoryItem: "Jade_Trinket"
+ TamingItem: "Charming_Lotus"
FoodItem: "Morning_Dew"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Jade_Trinket"
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 15
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus(bMaxSP, 30);
- bonus(bSPrecovRate, 5);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bMaxSP, 45);
+ bonus(bSPrecovRate, 8);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bMaxSP, 30);
+ bonus(bSPrecovRate, 5);
+ }
">
+ Evolve: {
+ Bacsojin2_Egg_: {
+ Mightysoul_Essence: 30
+ Civil_Servant_Card: 10
+ Li_Me_Mang_Ryang_Card: 10
+ Dancing_Dragon_Card: 10
+ }
+ }
},
{
Id: 1495
- SpriteName: "STONE_SHOOTER"
Name: "Stone Shooter"
- TamingItem: "Oilpalm_Coconut"
EggItem: "Stone_Shooter_Egg"
- AccessoryItem: "Apro_Hair"
+ TamingItem: "Oilpalm_Coconut"
FoodItem: "Plant_Neutrient"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Apro_Hair"
+ HungerDecrement: 7
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus2(bSubEle, Ele_Fire, 3); ">
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus2(bSubEle, Ele_Fire, 5);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus2(bSubEle, Ele_Fire, 3);
+ ">
},
{
Id: 1504
- SpriteName: "DULLAHAN"
Name: "Dullahan"
- TamingItem: "Luxury_Whisky_Bottle"
EggItem: "Dullahan_Egg"
- AccessoryItem: "Death_Coil"
+ TamingItem: "Luxury_Whisky_Bottle"
FoodItem: "Sunset_On_The_Rock"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
- CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus(bCritAtkRate, 5); ">
+ AccessoryItem: "Death_Coil"
+ HungerDecrement: 3
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bCritAtkRate, 8);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bCritAtkRate, 5);
+ ">
},
{
Id: 1505
- SpriteName: "LOLI_RURI"
Name: "Loli Ruri"
- TamingItem: "Very_Red_Juice"
EggItem: "Loli_Ruri_Egg"
- AccessoryItem: "Fashionable_Glasses"
+ TamingItem: "Very_Red_Juice"
FoodItem: "Pumpkin_Pie_"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Fashionable_Glasses"
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 15
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus(bMaxHPrate, 3);
- bonus3(bAutoSpellWhenHit, "AL_HEAL", 1, 50);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bMaxHPrate, 3);
+ bonus3(bAutoSpellWhenHit, "AL_HEAL", 2, 10);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bMaxHPrate, 3);
+ bonus3(bAutoSpellWhenHit, "AL_HEAL", 1, 10);
+ }
">
},
{
Id: 1513
- SpriteName: "CIVIL_SERVANT"
Name: "Mao Guai"
- TamingItem: "Fan_Of_Wind"
EggItem: "Civil_Servant_Egg"
- AccessoryItem: "Golden_Earing"
+ TamingItem: "Fan_Of_Wind"
FoodItem: "Flavored_Alcohol"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
- CaptureRate: 500
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
- EquipScript: <" bonus(bMaxSP, 10); ">
+ AccessoryItem: "Golden_Earing"
+ HungerDecrement: 3
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bMaxSP, 15);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bMaxSP, 10);
+ ">
},
{
Id: 1519
- SpriteName: "CHUNG_E"
Name: "Green Maiden"
- TamingItem: "Tantanmen"
EggItem: "Chung_E_Egg"
+ TamingItem: "Tantanmen"
FoodItem: "Bun_"
- FoodEffectiveness: 80
- HungerDelay: 60
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 2000
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
PetScript: <" petskillattack("CR_SHIELDCHARGE", 5, 0, 5, 5); ">
EquipScript: <"
- bonus(bDef, 1);
- bonus2(bAddRaceTolerance, RC_DemiPlayer, 1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bDef, 2);
+ bonus2(bAddRaceTolerance, RC_DemiPlayer, 2);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bDef, 1);
+ bonus2(bAddRaceTolerance, RC_DemiPlayer, 1);
+ }
">
},
{
Id: 1586
- SpriteName: "LEAF_CAT"
Name: "Leaf Cat"
- TamingItem: "Very_Soft_Plant"
EggItem: "Leaf_Cat_Egg"
- AccessoryItem: "Green_Lucky_Bag"
+ TamingItem: "Very_Soft_Plant"
FoodItem: "Fish_With_Blue_Back"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Green_Lucky_Bag"
+ HungerDecrement: 7
Intimacy: {
- Initial: 250
FeedIncrement: 20
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
- CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus2(bAddRaceTolerance, RC_Brute, 3);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus2(bAddRaceTolerance, RC_Brute, 5);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus2(bAddRaceTolerance, RC_Brute, 3);
">
},
{
Id: 1630
- SpriteName: "BACSOJIN_"
Name: "White Lady"
- TamingItem: "Shiny_Wing_Gown"
EggItem: "Bacsojin_Egg"
- AccessoryItem: "Round_Hair_Ornament"
+ TamingItem: "Shiny_Wing_Gown"
FoodItem: "Traditional_Cookie"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
- CaptureRate: 2000
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
+ AccessoryItem: "Round_Hair_Ornament"
+ HungerDecrement: 7
+ CaptureRate: 300
},
{
Id: 1837
- SpriteName: "IMP"
Name: "Fire Imp"
- TamingItem: "Flaming_Ice"
EggItem: "Imp_Egg"
- AccessoryItem: "Horn_Protector"
+ TamingItem: "Flaming_Ice"
FoodItem: "Flame_Gemstone"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
- CaptureRate: 200
- Speed: 150
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
+ AccessoryItem: "Horn_Protector"
+ HungerDecrement: 3
+ CaptureRate: 300
EquipScript: <"
- bonus2(bSubEle, Ele_Fire, 2);
- bonus2(bAddEle, Ele_Fire, 2);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus2(bSubEle, Ele_Fire, 3);
+ bonus2(bAddEle, Ele_Fire, 2);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus2(bSubEle, Ele_Fire, 2);
+ bonus2(bAddEle, Ele_Fire, 1);
+ }
">
},
// Episode 13.2 Brasilis
{
Id: 2057
- SpriteName: "E_CRAMP"
Name: "Strange Cramp"
- TamingItem: "Leaf_Cat_Ball"
EggItem: "Mystic_Leaf_Cat_Ball"
- CaptureRate: 50
+ TamingItem: "Leaf_Cat_Ball"
+ FoodEffectiveness: 1
+ HungerDecrement: 0
+ Intimacy: {
+ FeedIncrement: 1
+ OverFeedDecrement: 0
+ OwnerDeathDecrement: 0
+ }
+ CaptureRate: 5000
AttackRate: 350
DefendRate: 400
- ChangeTargetRate: 800
},
{
Id: 2081
- SpriteName: "E_HYDRA"
Name: "Strange Hydra"
- TamingItem: "Leaf_Cat_Ball"
EggItem: "Mystic_Leaf_Cat_Ball"
- CaptureRate: 50
+ TamingItem: "Leaf_Cat_Ball"
+ FoodEffectiveness: 1
+ HungerDecrement: 0
+ Intimacy: {
+ FeedIncrement: 1
+ OverFeedDecrement: 0
+ OwnerDeathDecrement: 0
+ }
+ CaptureRate: 5000
AttackRate: 350
DefendRate: 400
- ChangeTargetRate: 800
},
// Episode 14.1
{
Id: 2313
- SpriteName: "TIKBALANG"
Name: "Tikbalang"
- TamingItem: "Tikbalang_Belt"
EggItem: "Tikbalang_Pet"
+ TamingItem: "Tikbalang_Belt"
FoodItem: "Monsters_Feed"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
- CaptureRate: 1000
- Speed: 150
+ HungerDecrement: 8
SpecialPerformance: true
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
EquipScript: <"
- bonus2(bAddDamageClass, 2320, 10);
- bonus2(bAddDamageClass, 2321, 10);
- bonus2(bAddDamageClass, 2322, 10);
- bonus2(bAddDamageClass, 2317, 10);
- bonus2(bAddDamageClass, 2318, 10);
- bonus2(bAddDamageClass, 2327, 10);
- bonus2(bAddDamageClass, 2319, 10);
- bonus2(bAddDamageClass, 2333, 10);
- bonus2(bAddDamageClass, 2332, 10);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bMdef, 5);
+ bonus2(bAddDamageClass, 2317, 10);
+ bonus2(bAddDamageClass, 2318, 10);
+ bonus2(bAddDamageClass, 2319, 10);
+ bonus2(bAddDamageClass, 2320, 10);
+ bonus2(bAddDamageClass, 2321, 10);
+ bonus2(bAddDamageClass, 2322, 10);
+ bonus2(bAddDamageClass, 2327, 10);
+ bonus2(bAddDamageClass, 2332, 10);
+ bonus2(bAddDamageClass, 2333, 10);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bMdef, 3);
+ bonus2(bAddDamageClass, 2317, 10);
+ bonus2(bAddDamageClass, 2318, 10);
+ bonus2(bAddDamageClass, 2319, 10);
+ bonus2(bAddDamageClass, 2320, 10);
+ bonus2(bAddDamageClass, 2321, 10);
+ bonus2(bAddDamageClass, 2322, 10);
+ bonus2(bAddDamageClass, 2327, 10);
+ bonus2(bAddDamageClass, 2332, 10);
+ bonus2(bAddDamageClass, 2333, 10);
+ }
">
},
// New Pets
{
Id: 1242
- SpriteName: "MARIN"
Name: "Marin"
- TamingItem: "Juicy_Fruit"
EggItem: "Marin_Egg"
- AccessoryItem: "Tw_Backpack"
+ TamingItem: "Juicy_Fruit"
FoodItem: "Fruit_Sundae"
- FoodEffectiveness: 80
- HungerDelay: 60
+ AccessoryItem: "Tw_Backpack"
Intimacy: {
- Initial: 250
FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
}
CaptureRate: 2000
- Speed: 150
SpecialPerformance: true
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
},
{
Id: 2200
- SpriteName: "J_TAINI"
- Name: "Tiny"
+ Name: "Taini"
EggItem: "Egg_Of_Tiny"
FoodItem: "Apple"
- FoodEffectiveness: 80
- HungerDelay: 60
- Intimacy: {
- Initial: 250
- FeedIncrement: 10
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
- }
- Speed: 150
SpecialPerformance: true
- AttackRate: 300
- DefendRate: 300
- ChangeTargetRate: 800
},
// Episode 14.2
{
Id: 2398
- SpriteName: "LITTLE_PORING"
Name: "Little Poring"
TamingItem: "Unripe_Apple2"
EggItem: "Novice_Poring_Egg"
- AccessoryItem: "Backpack"
FoodItem: "Apple_Juice"
- FoodEffectiveness: 80
- HungerDelay: 60
+ FoodEffectiveness: 20
+ HungerDecrement: 3
Intimacy: {
- Initial: 250
- FeedIncrement: 50
- OverFeedDecrement: 100
- OwnerDeathDecrement: 20
+ FeedIncrement: 100
+ StarvingDecrement: 1
}
- CaptureRate: 2000
- Speed: 150
- SpecialPerformance: true
+ CaptureRate: 1000
AttackRate: 350
DefendRate: 400
- ChangeTargetRate: 800
PetScript: <" petloot(10); ">
EquipScript: <"
- bonus(bLuk, 2);
- bonus(bCritical, 1);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bHPrecovRate, 75);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bHPrecovRate, 50);
">
},
// New Pets [Need Info]
{
Id: 1090
- SpriteName: "MASTERING"
Name: "Mastering"
EggItem: "Mastering_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bLuk, 3);
+ bonus(bCritical, 3);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bLuk, 3);
+ bonus(bCritical, 2);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bLuk, 3);
+ bonus(bCritical, 1);
+ } else {
+ bonus(bLuk, 2);
+ bonus(bCritical, 1);
+ }
+ ">
Evolve: {
Angeling_Egg: {
Yellow_Potion: 20
@@ -1783,244 +1543,984 @@ pet_db:(
},
{
Id: 1096
- SpriteName: "ANGELING"
Name: "Angeling"
EggItem: "Angeling_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bMaxHPrate, 2);
+ bonus(bHealPower, 8);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bMaxHPrate, 2);
+ bonus(bHealPower, 6);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bMaxHPrate, 1);
+ bonus(bHealPower, 4);
+ } else {
+ bonus(bMaxHPrate, 1);
+ bonus(bHealPower, 2);
+ }
+ ">
},
{
Id: 1301
- SpriteName: "AM_MUT"
Name: "Am Mut"
EggItem: "Am_Mut_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bMatkRate, 4);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bMatkRate, 3);
+ else if (.@intimacy >= PET_INTIMACY_NEUTRAL)
+ bonus(bMatkRate, 2);
+ else
+ bonus(bMatkRate, 1);
+ ">
},
-/*
{
Id: 3636
- SpriteName: "LITTLE_ISIS"
Name: "Little Isis"
EggItem: "Little_Isis_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bAtkRate, 4);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bAtkRate, 3);
+ else if (.@intimacy >= PET_INTIMACY_NEUTRAL)
+ bonus(bAtkRate, 2);
+ else
+ bonus(bAtkRate, 1);
+ ">
},
-*/
{
Id: 1214
- SpriteName: "CHOCO"
Name: "Choco"
EggItem: "Choco_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bCritical, 9);
+ bonus(bLongAtkRate, 3);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bCritical, 7);
+ bonus(bLongAtkRate, 2);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bCritical, 5);
+ bonus(bLongAtkRate, 1);
+ } else {
+ bonus(bCritical, 3);
+ }
+ ">
},
-/*
{
Id: 3495
- SpriteName: "DR_EGGRING"
Name: "Eggring"
EggItem: "Eggring_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bHit, 9);
+ bonus(bAtk, 9);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bHit, 7);
+ bonus(bAtk, 7);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bHit, 5);
+ bonus(bAtk, 5);
+ } else {
+ bonus(bHit, 3);
+ bonus(bAtk, 3);
+ }
+ ">
},
-*/
{
Id: 1512
- SpriteName: "HYEGUN"
Name: "Hyegun"
EggItem: "Hyegun_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bVit, 4);
+ bonus2(bResEff, Eff_Stun, 400);
+ bonus2(bSPDrainRate, 10, 1);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bVit, 3);
+ bonus2(bResEff, Eff_Stun, 300);
+ bonus2(bSPDrainRate, 10, 1);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bVit, 2);
+ bonus2(bResEff, Eff_Stun, 200);
+ } else {
+ bonus(bVit, 1);
+ bonus2(bResEff, Eff_Stun, 100);
+ }
+ ">
},
-/*
{
Id: 3496
- SpriteName: "DR_LUNATIC"
Name: "Leaf Lunatic"
EggItem: "Leaf_Lunatic_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bCritical, 5);
+ bonus(bAtk, 5);
+ bonus2(bAddRace, RC_Formless, 6);
+ bonus2(bMagicAddRace, RC_Formless, 6);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bCritical, 4);
+ bonus(bAtk, 4);
+ bonus2(bAddRace, RC_Formless, 3);
+ bonus2(bMagicAddRace, RC_Formless, 3);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bCritical, 3);
+ bonus(bAtk, 3);
+ } else {
+ bonus(bCritical, 2);
+ bonus(bAtk, 2);
+ }
+ ">
},
-*/
{
Id: 1180
- SpriteName: "NINE_TAIL"
Name: "Nine Tails"
EggItem: "Nine_Tails_Egg"
- AutoFeed: true
+ TamingItem: "Sap_Jelly"
+ FoodItem: "Suspicious_Bottle"
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bCritical, 3);
+ bonus(bHit, 3);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bCritical, 2);
+ bonus(bHit, 2);
+ }
+ ">
Evolve: {
-/*
Cat_o_Nine_Tails_Egg: {
- 23187: 3
+ Sap_Jelly: 3
Fox_Tail: 999
Punisher: 1
Nine_Tail_Card: 1
}
-*/
}
},
{
Id: 1307
- SpriteName: "CAT_O_NINE_TAIL"
Name: "Cat o' Nine Tails"
EggItem: "Cat_o_Nine_Tails_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bCritical, 5);
+ bonus(bHit, 5);
+ autobonus("{ bonus2(bHPRegenRate, 400, 1000); }", 20, 5000, BF_WEAPON|BF_SHORT);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bCritical, 4);
+ bonus(bHit, 4);
+ autobonus("{ bonus2(bHPRegenRate, 300, 1000); }", 20, 5000, BF_WEAPON|BF_SHORT);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bCritical, 3);
+ bonus(bHit, 3);
+ } else {
+ bonus(bCritical, 2);
+ bonus(bHit, 2);
+ }
+ ">
Evolve: {
-/*
Moonlight_Flower_Egg: {
- 25375: 30
+ Mightysoul_Essence: 30
Nine_Tail_Card: 10
Sohee_Card: 10
Munak_Card: 10
}
-*/
}
},
-/*
{
Id: 3669
- SpriteName: "DIABOLIC2"
Name: "Diabolic"
EggItem: "Diabolic_Egg_"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bAtkRate, 2);
+ bonus(bMatkRate, 2);
+ bonus(bMaxHPrate, 2);
+ bonus(bMaxSPrate, 2);
+ bonus5(bAutoSpell, "MG_FIREBOLT", 3, 50, BF_WEAPON|BF_SHORT, 1);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bAtkRate, 2);
+ bonus(bMatkRate, 2);
+ bonus(bMaxHPrate, 1);
+ bonus(bMaxSPrate, 1);
+ bonus5(bAutoSpell, "MG_FIREBOLT", 3, 50, BF_WEAPON|BF_SHORT, 1);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bAtkRate, 1);
+ bonus(bMatkRate, 1);
+ bonus(bMaxHPrate, 1);
+ bonus(bMaxSPrate, 1);
+ } else {
+ bonus(bAtkRate, 1);
+ bonus(bMatkRate, 1);
+ }
+ ">
},
-*/
-/*
{
Id: 3670
- SpriteName: "DELETER_2"
Name: "Earth Deleter"
EggItem: "Earth_Deleter_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bAspdRate, 3);
+ bonus(bAgi, 3);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bAspdRate, 2);
+ bonus(bAgi, 2);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bAspdRate, 1);
+ bonus(bAgi, 1);
+ } else {
+ bonus(bAspdRate, 1);
+ }
+ ">
},
-*/
{
Id: 1622
- SpriteName: "TEDDY_BEAR"
Name: "Teddy Bear"
EggItem: "Teddy_Bear_Egg"
- AutoFeed: true
+ TamingItem: "SmallDoll_Needle"
+ FoodItem: "Cotton_Tufts"
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bMaxSP, 100);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bMaxSP, 50);
+ ">
Evolve: {
-/*
Abandoned_Teddy_Bear_Egg: {
- 23189: 3
+ SmallDoll_Needle: 3
Cursed_Seal: 300
Cardinal_Jewel_: 50
Teddy_Bear_Card: 1
}
-*/
+ Aliot_Egg: {
+ Screw: 500
+ Honey: 100
+ White_Jewel: 10
+ Teddy_Bear_Card: 1
+ }
+ Alicel_Egg: {
+ Screw: 500
+ Honey: 100
+ Bloody_Page: 50
+ Teddy_Bear_Card: 1
+ }
}
},
{
Id: 1632
- SpriteName: "GREMLIN"
Name: "Gremlin"
EggItem: "Gremlin_Egg"
- AutoFeed: true
+ TamingItem: "Unprocessed_Parts"
+ FoodItem: "Cheap_Lubricant"
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bDex, 2);
+ bonus(bHit, 1);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bDex, 1);
+ bonus(bHit, 1);
+ }
+ ">
Evolve: {
-/*
Hodremlin_Egg: {
- 23188: 3
+ Unprocessed_Parts: 3
Damp_Darkness: 50
Will_Of_Darkness: 200
Hodremlin_Card: 1
}
-*/
}
},
-/*
{
Id: 3731
- SpriteName: "SCATLETON"
- Name: "Scatleton Crate"
- EggItem: "Scatleton_Crate"
- AutoFeed: true
+ Name: "Scatleton"
+ EggItem: "Scatelon_Egg"
+ FoodItem: "Delicious_Fish"
+ AccessoryItem: "Red_Bell_Necklace"
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_CORDIAL)
+ bonus2(bAddItemHealRate, 579, 100);
+ ">
+ Evolve: {
+ Skelion_Egg: {
+ Memory_Of_Gyol: 2
+ Yummy_Meat: 100
+ Cookie_Bat: 100
+ }
+ }
},
-*/
{
Id: 1041
- SpriteName: "MUMMY"
Name: "Mummy"
EggItem: "Mummy_Egg"
- AutoFeed: true
+ TamingItem: "Elixir_Bandage"
+ FoodItem: "Mementos"
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bHit, 5);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bHit, 4);
+ ">
Evolve: {
-/*
Ancient_Mummy_Egg: {
- 23256: 3
+ Elixir_Bandage: 3
Rune_Of_Darkness: 200
Gold: 30
Ancient_Mummy_Card: 1
}
-*/
}
},
{
Id: 1010
- SpriteName: "WILOW"
Name: "Willow"
EggItem: "Willow_Egg"
- AutoFeed: true
+ TamingItem: "Dew_Of_Old_Tree"
+ FoodItem: "Tree_Of_Archer_1"
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bInt, 3);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bInt, 2);
+ ">
},
{
Id: 1782
- SpriteName: "ROWEEN"
Name: "Roween"
EggItem: "Roween_Egg"
- AutoFeed: true
+ TamingItem: "Foul_Rotten_Meat"
+ FoodItem: "Rotten_Meat"
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus2(bMagicAtkEle, Ele_Wind, 3);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus2(bMagicAtkEle, Ele_Wind, 2);
+ ">
},
{
Id: 1773
- SpriteName: "HODREMLIN"
Name: "Hodremlin"
EggItem: "Hodremlin_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bDex, 2);
+ bonus(bHit, 2);
+ bonus(bCritAtkRate, 9);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bDex, 2);
+ bonus(bHit, 2);
+ bonus(bCritAtkRate, 7);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bDex, 2);
+ bonus(bHit, 1);
+ } else {
+ bonus(bDex, 1);
+ bonus(bHit, 1);
+ }
+ ">
+ Evolve: {
+ Gloom_Under_Night_Egg: {
+ Hodremlin_Card: 10
+ Isilla_Card: 10
+ Agav_Card: 10
+ Mightysoul_Essence: 30
+ }
+ }
},
{
Id: 1058
- SpriteName: "METALLER"
Name: "Metaller"
EggItem: "Metaller_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bHPrecovRate, 20);
+ bonus(bMaxHP, 70);
+ bonus2(bAddRace, RC_Plant, 6);
+ bonus2(bMagicAddRace, RC_Plant, 6);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bHPrecovRate, 15);
+ bonus(bMaxHP, 55);
+ bonus2(bAddRace, RC_Plant, 3);
+ bonus2(bMagicAddRace, RC_Plant, 3);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bHPrecovRate, 10);
+ bonus(bMaxHP, 38);
+ } else {
+ bonus(bHPrecovRate, 5);
+ bonus(bMaxHP, 25);
+ }
+ ">
},
{
Id: 1297
- SpriteName: "ANCIENT_MUMMY"
Name: "Ancient Mummy"
EggItem: "Ancient_Mummy_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bHit, 6);
+ bonus2(bAddRace, RC_Dragon, 6);
+ bonus2(bMagicAddRace, RC_Dragon, 6);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bHit, 6);
+ bonus2(bAddRace, RC_Dragon, 3);
+ bonus2(bMagicAddRace, RC_Dragon, 3);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bHit, 5);
+ } else {
+ bonus(bHit, 4);
+ }
+ ">
},
-/*{
+{
Id: 2995
- SpriteName: "XM_TEDDY_BEAR"
Name: "Abandoned Teddy Bear"
EggItem: "Abandoned_Teddy_Bear_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bMaxSP, 150);
+ autobonus("{ bonus2(bSPRegenRate, 40, 1000); }", 30, 5000, BF_MAGIC);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bMaxSP, 150);
+ autobonus("{ bonus2(bSPRegenRate, 30, 1000); }", 30, 5000, BF_MAGIC);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bMaxSP, 100);
+ } else {
+ bonus(bMaxSP, 50);
+ }
+ ">
},
-*/
-/* UNKNOWN MONSTER
{
- Id: 0
- SpriteName: "X"
+ Id: 3790
Name: "Sweet Drops"
EggItem: "Sweet_Drops_Egg"
+ FoodItem: "Candy"
AutoFeed: true
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL)
+ bonus2(bExpAddRace, RC_All, 1);
+ ">
},
-*/
{
- Id: 1159
- SpriteName: "PHREEONI"
+ Id: 20425
Name: "Phreeoni"
EggItem: "Phreeoni_Egg"
+ FoodItem: "Luxurious_Pet_Food"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bHit, 18);
+ bonus(bPerfectHitRate, 15);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bHit, 14);
+ bonus(bPerfectHitRate, 10);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bHit, 10);
+ bonus(bPerfectHitRate, 5);
+ } else {
+ bonus(bHit, 6);
+ }
+ ">
},
{
- Id: 1150
- SpriteName: "MOONLIGHT"
+ Id: 20424
Name: "Moonlight Flower"
EggItem: "Moonlight_Flower_Egg"
+ FoodItem: "Luxurious_Pet_Food"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bCritical, 6);
+ bonus(bHit, 6);
+ autobonus("{ bonus2(bHPRegenRate, 500, 1000); bonus2(bSPRegenRate, 20, 1000); }", 20, 5000, BF_WEAPON|BF_SHORT);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bCritical, 5);
+ bonus(bHit, 5);
+ autobonus("{ bonus2(bHPRegenRate, 400, 1000); bonus2(bSPRegenRate, 10, 1000); }", 20, 5000, BF_WEAPON|BF_SHORT);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bCritical, 4);
+ bonus(bHit, 4);
+ autobonus("{ bonus2(bHPRegenRate, 300, 1000); }", 20, 5000, BF_WEAPON|BF_SHORT);
+ } else {
+ bonus(bCritical, 3);
+ bonus(bHit, 3);
+ }
+ ">
},
-/*
{
Id: 3971
- SpriteName: "SKELION"
Name: "Skelion"
EggItem: "Skelion_Egg"
+ FoodItem: "Yummy_Meat"
+ AccessoryItem: "Dark_Mane"
+ AutoFeed: true
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_CORDIAL)
+ bonus2(bAddItemHealRate, 579, 100);
+ ">
+},
+{
+ Id: 2336
+ Name: "Domovoi"
+ EggItem: "Brownie_Egg"
+ EquipScript: <"
+ if (getpetinfo(PETINFO_INTIMACY) >= PET_INTIMACY_LOYAL) {
+ bonus2(bAddRace, RC_DemiPlayer, 1);
+ bonus2(bMagicAddRace, RC_DemiPlayer, 1);
+ bonus2(bAddRaceTolerance, RC_DemiPlayer, 1);
+ }
+ ">
+},
+{
+ Id: 2963
+ Name: "Woodie"
+ EggItem: "Woodie_Egg"
+ FoodItem: "Emerald_Leaf"
+},
+{
+ Id: 3162
+ Name: "Elephant"
+ EggItem: "Elephant_Egg"
+ FoodItem: "Banana_Can"
+},
+{
+ Id: 3163
+ Name: "Gorilla"
+ EggItem: "Gorilla_Egg"
+ FoodItem: "Spicy_Rice_Cake"
+},
+{
+ Id: 3164
+ Name: "Lion"
+ EggItem: "Lion_Egg"
+ FoodItem: "Hot_Dog"
+},
+{
+ Id: 3165
+ Name: "Rhino"
+ EggItem: "Rhino_Egg"
+ FoodItem: "Ferris_Wheel_Biscuit"
+},
+{
+ Id: 3261
+ Name: "Blue Unicorn"
+ EggItem: "Blue_Unicorn_Egg"
+ FoodItem: "Blue_Herb"
+},
+{
+ Id: 1166
+ Name: "Savage"
+ EggItem: "Savage_Egg"
AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bVit, 2);
+ bonus(bMaxHP, 200);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bVit, 2);
+ bonus(bMaxHP, 100);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bVit, 2);
+ bonus(bMaxHP, 50);
+ } else {
+ bonus(bVit, 1);
+ bonus(bMaxHP, 50);
+ }
+ ">
+},
+{
+ Id: 1369
+ Name: "Grand Peco"
+ EggItem: "Grand_Peco_Peco_Egg"
+ AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bMaxHP, 400);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bMaxHP, 300);
+ else if (.@intimacy >= PET_INTIMACY_NEUTRAL)
+ bonus(bMaxHP, 200);
+ else
+ bonus(bMaxHP, 150);
+ ">
+},
+{
+ Id: 1213
+ Name: "High Orc"
+ EggItem: "High_Orc_Egg"
+ AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bAtk, 25);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bAtk, 20);
+ else if (.@intimacy >= PET_INTIMACY_NEUTRAL)
+ bonus(bAtk, 15);
+ else
+ bonus(bAtk, 10);
+ ">
+ Evolve: {
+ Orc_Hero_Egg_: {
+ Voucher_Of_Orcish_Hero: 10
+ Orc_Warrior_Card: 10
+ Orc_Baby_Card_Card: 10
+ Mightysoul_Essence: 30
+ }
+ }
+},
+{
+ Id: 20423
+ Name: "Bacsojin"
+ EggItem: "Bacsojin2_Egg_"
+ FoodItem: "Luxurious_Pet_Food"
+ AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bMaxSPrate, 5);
+ bonus(bDelayrate, -3);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bMaxSPrate, 4);
+ bonus(bDelayrate, -2);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bMaxSPrate, 3);
+ bonus(bDelayrate, -1);
+ } else {
+ bonus(bMaxSPrate, 2);
+ }
+ ">
+},
+{
+ Id: 20373
+ Name: "Rigid Nightmare Terror"
+ EggItem: "Rigid_Nightmare_Terror_Egg"
+ FoodItem: "Luxurious_Pet_Food"
+ AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bInt, 4);
+ bonus(bMaxSPrate, 3);
+ bonus2(bResEff, Eff_Sleep, 10000);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bInt, 3);
+ bonus(bMaxSPrate, 1);
+ bonus2(bResEff, Eff_Sleep, 10000);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bInt, 2);
+ } else {
+ bonus(bInt, 1);
+ }
+ ">
+},
+{
+ Id: 20420
+ Name: "Contaminated Wanderer Egg"
+ EggItem: "Contaminated_Wanderer_Egg"
+ AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bAgi, 4);
+ bonus(bCritical, 3);
+ bonus(bCritAtkRate, 7);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bAgi, 4);
+ bonus(bCritical, 2);
+ bonus(bCritAtkRate, 5);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bAgi, 4);
+ bonus(bCritical, 1);
+ } else {
+ bonus(bAgi, 4);
+ }
+ ">
+},
+{
+ Id: 1736
+ Name: "Aliot"
+ EggItem: "Aliot_Egg"
+ AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bAspdRate, 5);
+ bonus(bHit, 12);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bAspdRate, 4);
+ bonus(bHit, 9);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bAspdRate, 3);
+ bonus(bHit, 6);
+ } else {
+ bonus(bAspdRate, 2);
+ }
+ ">
+},
+{
+ Id: 1735
+ Name: "Alicel"
+ EggItem: "Alicel_Egg"
+ AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bVariableCastrate, -5);
+ bonus2(bMagicAddEle, Ele_Neutral, 5);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bVariableCastrate, -4);
+ bonus2(bMagicAddEle, Ele_Neutral, 3);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bVariableCastrate, -3);
+ } else {
+ bonus(bVariableCastrate, -2);
+ }
+ ">
+},
+{
+ Id: 1737
+ Name: "Aliza"
+ EggItem: "Aliza_Egg"
+ AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bMdef, 7);
+ bonus(bHealPower, 6);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bMdef, 6);
+ bonus(bHealPower, 4);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bMdef, 5);
+ bonus(bHealPower, 2);
+ } else {
+ bonus(bMdef, 4);
+ }
+ ">
+},
+{
+ Id: 20571
+ Name: "Orc Hero"
+ EggItem: "Orc_Hero_Egg_"
+ FoodItem: "Luxurious_Pet_Food"
+ AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bAtkRate, 7);
+ bonus(bCritAtkRate, 3);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bAtkRate, 4);
+ bonus(bCritAtkRate, 1);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bAtkRate, 2);
+ } else {
+ bonus(bAtkRate, 1);
+ }
+ ">
+},
+{
+ Id: 20619
+ Name: "Gloom Under Night"
+ EggItem: "Gloom_Under_Night_Egg"
+ FoodItem: "Luxurious_Pet_Food"
+ AutoFeed: true
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bMatk, 40);
+ bonus2(bMagicAtkEle, Ele_Ghost, 7);
+ bonus2(bMagicAtkEle, Ele_Fire, 7);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bMatk, 30);
+ bonus2(bMagicAtkEle, Ele_Ghost, 5);
+ bonus2(bMagicAtkEle, Ele_Fire, 5);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus(bMatk, 20);
+ } else {
+ bonus(bMatk, 10);
+ }
+ ">
+},
+{
+ Id: 20696
+ Name: "Child Admin Beta"
+ EggItem: "Child_Admin_Beta_Egg"
+ FoodItem: "Cloud_Cotton"
+ AccessoryItem: "Little_Headdress_Beta"
+ EquipScript: <"
+ .@map$ = strcharinfo(PC_MAP);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@map$ == "ba_lost" || .@map$ == "ba_pw02") {
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus2(bAddRace, RC_All, 10);
+ bonus2(bMagicAddRace, RC_All, 10);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus2(bAddRace, RC_All, 6);
+ bonus2(bMagicAddRace, RC_All, 6);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus2(bAddRace, RC_All, 3);
+ bonus2(bMagicAddRace, RC_All, 3);
+ }
+ }
+ ">
+ Evolve: {
+ Child_Admin_Alpha_Egg: {
+ Barmil_Ticket: 500
+ Broken_Steel_Piece: 50
+ Mystery_Piece: 10
+ }
+ }
+},
+{
+ Id: 20697
+ Name: "Child Admin Alpha"
+ EggItem: "Child_Admin_Alpha_Egg"
+ AccessoryItem: "Little_Headdress_Alpha"
+ AutoFeed: true
+ EquipScript: <"
+ .@map$ = strcharinfo(PC_MAP);
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@map$ == "ba_pw01" || .@map$ == "ba_pw03" || .@map$ == "ba_2whs01" || .@map$ == "ba_2whs02") {
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus2(bAddRace, RC_All, 15);
+ bonus2(bMagicAddRace, RC_All, 15);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus2(bAddRace, RC_All, 8);
+ bonus2(bMagicAddRace, RC_All, 8);
+ } else if (.@intimacy >= PET_INTIMACY_NEUTRAL) {
+ bonus2(bAddRace, RC_All, 4);
+ bonus2(bMagicAddRace, RC_All, 4);
+ }
+ }
+ ">
+},
+// jRO exclusive pets.
+{
+ Id: 3317
+ Name: "Rubylit"
+ EggItem: "Rubylit_Egg"
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bAtk, 20);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bAtk, 10);
+ ">
+},
+{
+ Id: 3318
+ Name: "Sapphilit"
+ EggItem: "Sapphilit_Egg"
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bMaxHP, 200);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bMaxHP, 100);
+ ">
+},
+{
+ Id: 3319
+ Name: "Emelit"
+ EggItem: "Emelit_Egg"
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL) {
+ bonus(bMaxHP, 100);
+ bonus(bMaxSP, 50);
+ } else if (.@intimacy >= PET_INTIMACY_CORDIAL) {
+ bonus(bMaxHP, 50);
+ bonus(bMaxSP, 25);
+ }
+ ">
+},
+{
+ Id: 3320
+ Name: "Topalit"
+ EggItem: "Topalit_Egg"
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bMaxSP, 100);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bMaxSP, 50);
+ ">
+},
+{
+ Id: 3321
+ Name: "Amelit"
+ EggItem: "Amelit_Egg"
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bMatk, 20);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bMatk, 10);
+ ">
+},
+{
+ Id: 3349
+ Name: "Mythlit"
+ EggItem: "Mythlit_Egg"
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ bonus(bAllStats, 2);
+ else if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus(bAllStats, 1);
+ ">
+},
+{
+ Id: 3306
+ Name: "Tamadora"
+ EggItem: "Tamadora_Egg"
+ EquipScript: <"
+ .@intimacy = getpetinfo(PETINFO_INTIMACY);
+ if (.@intimacy >= PET_INTIMACY_CORDIAL)
+ bonus4(bAutoSpellWhenHit, AL_HEAL, 1, 20, 1);
+ if (.@intimacy >= PET_INTIMACY_LOYAL)
+ skill(AL_HEAL, 1);
+ ">
},
-*/
)
diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf
index 8866f1742..2992aa103 100644
--- a/db/re/skill_db.conf
+++ b/db/re/skill_db.conf
@@ -43,7 +43,7 @@
Description: "Skill Description" (string) (optional but recommended)
Range: Skill Range (int) (optional, defaults to 0) (can be grouped by Levels)
Note: Range < 5 is considered Melee range.
- Hit: Hit Type (int) (optional, default "BDT_NORMAL")
+ Hit: Hit Type (int) (optional, default "BDT_NORMAL") (can be grouped by Levels)
Types - "BDT_SKILL", "BDT_MULTIHIT" or "BDT_NORMAL"
SkillType: { (bool, defaults to "Passive")
Passive: true/false (boolean, defaults to false)
@@ -78,7 +78,7 @@
HiddenTrap: true/false (boolean, defaults to false)
IsCombo: true/false (boolean, defaults to false)
}
- AttackType: "Attack Type" (string, defaults to "None")
+ AttackType: "Attack Type" (string, defaults to "None") (can be grouped by Levels)
Types: "None", "Weapon", "Magic" or "Misc"
Element: "Element Type" (string) (Optional field - Default "Ele_Neutral")
(can be grouped by Levels)
@@ -87,7 +87,7 @@
"Ele_Weapon" - Uses weapon's element.
"Ele_Endowed" - Uses Endowed element.
"Ele_Random" - Uses random element.
- DamageType: { (bool, default to "NoDamage")
+ DamageType: { (bool, default to "NK_NONE")
NoDamage: true/false No damage skill
SplashArea: true/false Has splash area (requires source modification)
SplitDamage: true/false Damage should be split among targets (requires 'SplashArea' in order to work)
@@ -103,8 +103,8 @@
Note: when positive, damage is increased by hits,
negative values just show number of hits without
increasing total damage.
- InterruptCast: Cast Interruption (bool, defaults to false)
- CastDefRate: Cast Defense Reduction (int, defaults to 0)
+ InterruptCast: Cast Interruption (bool, defaults to false) (can be grouped by Levels)
+ CastDefRate: Cast Defense Reduction (int, defaults to 0) (can be grouped by Levels)
SkillInstances: Skill instances (int, defaults to 0) (can be grouped by Levels)
Notes: max amount of skill instances to place on the ground when
player_land_skill_limit/monster_land_skill_limit is enabled. For skills
@@ -118,7 +118,8 @@
CoolDown: Skill Cooldown (in ms) (int, defaults to 0) (can be grouped by Levels)
FixedCastTime: Fixed Cast Time (in ms) (int, defaults to 0) (can be grouped by Levels)
Note: when 0, uses 20% of cast time and less than
- 0 means no fixed cast time.
+ 0 means no fixed cast time. Is only read if
+ RENEWAL_CAST is defined.
CastTimeOptions: {
IgnoreDex: true/false (boolean, defaults to false)
IgnoreStatusEffect: true/false (boolean, defaults to false)
@@ -142,6 +143,8 @@
SPRateCost: SP % Cost (int, defaults to 0) (can be grouped by Levels)
Note: If positive, it is a percent of your current sp,
otherwise it is a percent of your max sp.
+ MaxHPTrigger: Max HP % trigger (int, defaults to 0) (can be grouped by Levels)
+ MaxSPTrigger: Max SP % trigger (int, defaults to 0) (can be grouped by Levels)
ZenyCost: Zeny Cost (int, defaults to 0) (can be grouped by Levels)
WeaponTypes: { (bool or string, defaults to "All")
NoWeapon: true/false (boolean, defaults to false)
@@ -217,7 +220,12 @@
ItemID or Aegis_Name : Amount (int, defaults to 0) (can be grouped by Levels)
Item example: "ID717" or "Blue_Gemstone".
Notes: Items with amount 0 will not be consumed.
- Amount can also be grouped by levels.
+ Any: true/false (boolean, defaults to false) (can be grouped by Levels)
+ }
+ Equip: {
+ ItemID or Aegis_Name : Amount (int, defaults to 1) (can be grouped by Levels)
+ Item example: "ID1103" or "Sword__".
+ Any: true/false (boolean, defaults to false) (can be grouped by Levels)
}
}
Unit: {
@@ -225,16 +233,22 @@
Layout: Unit Layout (int, defaults to 0) (can be grouped by Levels)
Range: Unit Range (int, defaults to 0) (can be grouped by Levels)
Interval: Unit Interval (int, defaults to 0) (can be grouped by Levels)
- Target: "Unit Target" (string, defaults to "None")
+ Target: "Unit Target" (string, defaults to "None") (can be grouped by Levels)
Types:
All - affects everyone
NotEnemy - affects anyone who isn't an enemy
- Friend - affects party, guildmates and neutral players
+ NotParty - affects anyone who isn't a party member
+ NotGuild - affects anyone who isn't a guild member or guild ally
+ Friend - same as NotEnemy
Party - affects party only
- Guild - affects guild only
- Ally - affects party and guildmates only
- Sameguild - affects guild but not allies
+ Guild - affects guild members and guild allies
+ Ally - affects party members, guild members and guild allies
+ Sameguild - affects guild members but not guild allies
Enemy - affects enemies only
+ Self - affects only yourself
+ GuildAlly - affects guild allies but not guild members
+ Neutral - affects anyone who isn't a party member, guild member,
+ guild ally, enemy and not yourself
None - affects nobody
Flag: {
UF_DEFNOTENEMY: true/false (boolean, defaults to false)
@@ -7070,16 +7084,21 @@ skill_db: (
Requirements: {
SPCost: 1
Items: {
- Red_Potion: 1
- Orange_Potion: 1
- Yellow_Potion: 1
- White_Potion: 1
- Blue_Potion: 1
- Fruit_Of_Mastela: 1
- Royal_Jelly: 1
- Seed_Of_Yggdrasil: 1
- Yggdrasilberry: 1
- Berserk_Potion: 1
+ Red_Potion: {
+ Lv1: 1
+ }
+ Orange_Potion: {
+ Lv2: 1
+ }
+ Yellow_Potion: {
+ Lv3: 1
+ }
+ White_Potion: {
+ Lv4: 1
+ }
+ Blue_Potion: {
+ Lv5: 1
+ }
}
}
},
@@ -11645,7 +11664,7 @@ skill_db: (
}
AttackType: "Weapon"
Element: "Ele_Weapon"
- SplashRange: 2
+ SplashRange: 1
InterruptCast: true
SkillInstances: 13
CastTime: 1000
@@ -14671,16 +14690,22 @@ skill_db: (
Requirements: {
SPCost: 30
Items: {
- Red_Slim_Potion: 1
- Red_Slim_Potion: 1
- Red_Slim_Potion: 1
- Red_Slim_Potion: 1
- Red_Slim_Potion: 1
- Yellow_Slim_Potion: 1
- Yellow_Slim_Potion: 1
- Yellow_Slim_Potion: 1
- Yellow_Slim_Potion: 1
- White_Slim_Potion: 1
+ Red_Slim_Potion: {
+ Lv1: 1
+ Lv2: 1
+ Lv3: 1
+ Lv4: 1
+ Lv5: 1
+ }
+ Yellow_Slim_Potion: {
+ Lv6: 1
+ Lv7: 1
+ Lv8: 1
+ Lv9: 1
+ }
+ White_Slim_Potion: {
+ Lv10: 1
+ }
}
}
},
@@ -15166,8 +15191,12 @@ skill_db: (
Requirements: {
SPCost: 10
Items: {
- Mushroom_Spore: 1
- Stem: 1
+ Mushroom_Spore: {
+ Lv1: 1
+ }
+ Stem: {
+ Lv2: 1
+ }
}
}
},
@@ -16043,6 +16072,7 @@ skill_db: (
}
AmmoTypes: {
A_BULLET: true
+ A_GRENADE: true
}
AmmoAmount: 5
}
@@ -18162,6 +18192,9 @@ skill_db: (
Lv10: 240000
}
FixedCastTime: -1
+ Requirements: {
+ HPCost: 15
+ }
},
{
Id: 691
@@ -19183,6 +19216,31 @@ skill_db: (
FixedCastTime: 1000
Requirements: {
SPCost: 1
+ WeaponTypes: {
+ Daggers: true
+ 1HSwords: true
+ 2HSwords: true
+ 1HSpears: true
+ 2HSpears: true
+ 1HAxes: true
+ 2HAxes: true
+ Maces: true
+ 2HMaces: true
+ Staves: true
+ Bows: true
+ Knuckles: true
+ Instruments: true
+ Whips: true
+ Books: true
+ Katars: true
+ Revolvers: true
+ Rifles: true
+ GatlingGuns: true
+ Shotguns: true
+ GrenadeLaunchers: true
+ FuumaShurikens: true
+ 2HStaves: true
+ }
}
},
{
@@ -22710,11 +22768,12 @@ skill_db: (
Requirements: {
SPCost: 50
State: "MadoGear"
- Items: {
- Pilebuncker: 0
- Pilebuncker_S: 0
- Pilebuncker_P: 0
- Pilebuncker_T: 0
+ Equip: {
+ Pilebuncker: 1
+ Pilebuncker_S: 1
+ Pilebuncker_P: 1
+ Pilebuncker_T: 1
+ Any: true
}
}
},
@@ -23050,9 +23109,11 @@ skill_db: (
SPCost: 25
State: "MadoGear"
Items: {
- Hovering_Booster: 0
Magic_Gear_Fuel: 1
}
+ Equip: {
+ Hovering_Booster: 1
+ }
}
},
{
@@ -23180,10 +23241,18 @@ skill_db: (
SPCost: 100
State: "MadoGear"
Items: {
- Scarlet_Pts: 1
- Lime_Green_Pts: 1
- Yellow_Wish_Pts: 1
- Indigo_Pts: 1
+ Scarlet_Pts: {
+ Lv1: 1
+ }
+ Lime_Green_Pts: {
+ Lv2: 1
+ }
+ Yellow_Wish_Pts: {
+ Lv3: 1
+ }
+ Indigo_Pts: {
+ Lv4: 1
+ }
Magic_Gear_Fuel: 2
Shape_Shifter: 0
}
@@ -23494,6 +23563,17 @@ skill_db: (
}
State: "MadoGear"
Items: {
+ RepairA: {
+ Lv1: 1
+ Lv2: 1
+ }
+ RepairB: {
+ Lv3: 1
+ Lv4: 1
+ }
+ RepairC: {
+ Lv5: 1
+ }
Repair_Kit: 0
}
}
@@ -28269,7 +28349,7 @@ skill_db: (
Lv7: 20
Lv8: 22
Lv9: 24
- Lv10: 26
+ Lv10: 25
}
CastTime: 1000
AfterCastActDelay: 1000
@@ -28324,7 +28404,7 @@ skill_db: (
Lv7: 20
Lv8: 22
Lv9: 24
- Lv10: 26
+ Lv10: 25
}
CastTime: 1000
AfterCastActDelay: 1000
@@ -29288,9 +29368,13 @@ skill_db: (
Lv10: 550
}
Items: {
- Boody_Red: 3
- Boody_Red: 6
- Flame_Heart: 1
+ Boody_Red: {
+ Lv1: 3
+ Lv2: 6
+ }
+ Flame_Heart: {
+ Lv3: 1
+ }
}
}
},
@@ -29348,9 +29432,13 @@ skill_db: (
Lv10: 550
}
Items: {
- Crystal_Blue: 3
- Crystal_Blue: 6
- Mistic_Frozen: 1
+ Crystal_Blue: {
+ Lv1: 3
+ Lv2: 6
+ }
+ Mistic_Frozen: {
+ Lv3: 1
+ }
}
}
},
@@ -29408,9 +29496,13 @@ skill_db: (
Lv10: 550
}
Items: {
- Wind_Of_Verdure: 3
- Wind_Of_Verdure: 6
- Rough_Wind: 1
+ Wind_Of_Verdure: {
+ Lv1: 3
+ Lv2: 6
+ }
+ Rough_Wind: {
+ Lv3: 1
+ }
}
}
},
@@ -29468,9 +29560,13 @@ skill_db: (
Lv10: 550
}
Items: {
- Yellow_Live: 3
- Yellow_Live: 6
- Great_Nature: 1
+ Yellow_Live: {
+ Lv1: 3
+ Lv2: 6
+ }
+ Great_Nature: {
+ Lv3: 1
+ }
}
}
},
@@ -29586,9 +29682,11 @@ skill_db: (
Lv10: 94
}
Items: {
- Scarlet_Pts: 1
- Scarlet_Pts: 2
- Scarlet_Pts: 3
+ Scarlet_Pts: {
+ Lv1: 1
+ Lv2: 2
+ Lv3: 3
+ }
}
}
Unit: {
@@ -29636,9 +29734,11 @@ skill_db: (
Lv10: 94
}
Items: {
- Indigo_Pts: 1
- Indigo_Pts: 2
- Indigo_Pts: 3
+ Indigo_Pts: {
+ Lv1: 1
+ Lv2: 2
+ Lv3: 3
+ }
}
}
Unit: {
@@ -29686,9 +29786,11 @@ skill_db: (
Lv10: 94
}
Items: {
- Yellow_Wish_Pts: 1
- Yellow_Wish_Pts: 2
- Yellow_Wish_Pts: 3
+ Yellow_Wish_Pts: {
+ Lv1: 1
+ Lv2: 2
+ Lv3: 3
+ }
}
}
Unit: {
@@ -29736,9 +29838,11 @@ skill_db: (
Lv10: 94
}
Items: {
- Lime_Green_Pts: 1
- Lime_Green_Pts: 2
- Lime_Green_Pts: 3
+ Lime_Green_Pts: {
+ Lv1: 1
+ Lv2: 2
+ Lv3: 3
+ }
}
}
Unit: {
@@ -30334,11 +30438,21 @@ skill_db: (
Lv10: 75
}
Items: {
- Oil_Bottle: 1
- Explosive_Powder: 1
- Smoke_Powder: 1
- Tear_Gas: 1
- Acid_Bottle: 1
+ Oil_Bottle: {
+ Lv1: 1
+ }
+ Explosive_Powder: {
+ Lv2: 1
+ }
+ Smoke_Powder: {
+ Lv3: 1
+ }
+ Tear_Gas: {
+ Lv4: 1
+ }
+ Acid_Bottle: {
+ Lv5: 1
+ }
}
}
},
diff --git a/db/sc_config.conf b/db/sc_config.conf
index 2520fc595..11f8579e5 100644
--- a/db/sc_config.conf
+++ b/db/sc_config.conf
@@ -3675,3 +3675,57 @@ SC_MADOGEAR: {
}
Icon: "SI_MADOGEAR"
}
+SC_POPECOOKIE: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+ Icon: "SI_POPECOOKIE"
+}
+SC_VITALIZE_POTION: {
+ Flags: {
+ NoDispelReset: true
+ }
+ Icon: "SI_VITALIZE_POTION"
+}
+SC_SKF_MATK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+ Icon: "SI_SKF_MATK"
+}
+SC_SKF_ATK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+ Icon: "SI_SKF_ATK"
+}
+SC_SKF_ASPD: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+ Icon: "SI_SKF_ASPD"
+}
+SC_SKF_CAST: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+ Icon: "SI_SKF_CAST"
+}
+SC_ALMIGHTY: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+ Icon: "SI_ALMIGHTY"
+}
diff --git a/doc/atcommands.txt b/doc/atcommands.txt
index 0cddc1680..65c3bb091 100644
--- a/doc/atcommands.txt
+++ b/doc/atcommands.txt
@@ -968,10 +968,19 @@ If no position is given, the command defaults to headgear.
---------------------------------------
-@fakename {<text string>}
-
-Temporarily changes name to the specified string.
-If no string is given, the character's real name will be re-applied.
+@fakename {<options>} {<fake_name>}
+
+Temporarily changes the character's name to <fake_name>.
+If no parameter is passed, the character's real name will be re-applied.
+The <options> parameter is used, to modify which names will be displayed.
+The fake name will always be displayed, regardless of <options>.
+Valid <options> flags (combinable):
+ 0 - Only the fake name is displayed. (Default value.)
+ 1 - Display party name.
+ 2 - Display guild name.
+ 4 - Display guild position.
+ 8 - Display clan position.
+ 16 - Display title.
---------------------------------------
diff --git a/doc/constants.md b/doc/constants.md
index 577517a2a..18b7e9185 100644
--- a/doc/constants.md
+++ b/doc/constants.md
@@ -364,6 +364,7 @@
- `mf_pairship_endable`: 58
- `mf_nostorage`: 59
- `mf_nogstorage`: 60
+- `mf_nopet`: 61
### Cell Properties
@@ -375,9 +376,13 @@
- `cell_landprotector`: 5
- `cell_novending`: 6
- `cell_nochat`: 7
+- `cell_icewall`: 8
+- `cell_noicewall`: 9
+- `cell_noskill`: 10
### Cell checks
+- `cell_gettype`: 0
- `cell_chkwall`: 1
- `cell_chkwater`: 2
- `cell_chkcliff`: 3
@@ -385,11 +390,15 @@
- `cell_chkreach`: 5
- `cell_chknopass`: 6
- `cell_chknoreach`: 7
+- `cell_chkstack`: 8
- `cell_chknpc`: 9
- `cell_chkbasilica`: 10
- `cell_chklandprotector`: 11
- `cell_chknovending`: 12
- `cell_chknochat`: 13
+- `cell_chkicewall`: 14
+- `cell_chknoicewall`: 15
+- `cell_chknoskill`: 16
### Bonuses / Parameter IDs
@@ -1339,6 +1348,13 @@
- `SC_RESIST_PROPERTY_WIND`: 667
- `SC_CLIENT_ONLY_EQUIP_ARROW`: 668
- `SC_MADOGEAR`: 669
+- `SC_POPECOOKIE`: 670
+- `SC_VITALIZE_POTION`: 671
+- `SC_SKF_MATK`: 672
+- `SC_SKF_ATK`: 673
+- `SC_SKF_ASPD`: 674
+- `SC_SKF_CAST`: 675
+- `SC_ALMIGHTY`: 676
### Emotes
@@ -4650,23 +4666,23 @@
### Server defines
-- `PACKETVER`: 20141022
+- `PACKETVER`: 20190530
- `MAX_LEVEL`: 175
- `MAX_STORAGE`: 600
- `MAX_GUILD_STORAGE`: 600
- `MAX_CART`: 100
-- `MAX_INVENTORY`: 100
+- `MAX_INVENTORY`: 200
- `FIXED_INVENTORY_SIZE`: 100
- `MAX_ZENY`: 2147483647
- `MAX_BANK_ZENY`: 2147483647
- `MAX_BG_MEMBERS`: 30
- `MAX_CHAT_USERS`: 20
- `MAX_REFINE`: 20
-- `MAX_ITEM_ID`: 65535
+- `MAX_ITEM_ID`: 2147483647
- `MAX_MENU_OPTIONS`: 255
- `MAX_MENU_LENGTH`: 2048
-- `MOB_CLONE_START`: 4001
-- `MOB_CLONE_END`: 5000
+- `MOB_CLONE_START`: 21001
+- `MOB_CLONE_END`: 22000
- `MAX_NPC_PER_MAP`: 512
### status options
@@ -4990,6 +5006,9 @@
- `ITEMINFO_ITEM_USAGE_FLAG`: 38
- `ITEMINFO_ITEM_USAGE_OVERRIDE`: 39
- `ITEMINFO_GM_LV_TRADE_OVERRIDE`: 40
+- `ITEMINFO_ID`: 41
+- `ITEMINFO_AEGISNAME`: 42
+- `ITEMINFO_NAME`: 43
### getmercinfo options
@@ -5019,6 +5038,25 @@
- `PETINFO_EVO_EGGID`: 11
- `PETINFO_AUTOFEED`: 12
+### Pet hunger levels
+
+- `PET_HUNGER_STARVING`: 0
+- `PET_HUNGER_VERY_HUNGRY`: 10
+- `PET_HUNGER_HUNGRY`: 25
+- `PET_HUNGER_NEUTRAL`: 75
+- `PET_HUNGER_SATISFIED`: 90
+- `PET_HUNGER_STUFFED`: 100
+
+### Pet intimacy levels
+
+- `PET_INTIMACY_NONE`: 0
+- `PET_INTIMACY_AWKWARD`: 1
+- `PET_INTIMACY_SHY`: 100
+- `PET_INTIMACY_NEUTRAL`: 250
+- `PET_INTIMACY_CORDIAL`: 750
+- `PET_INTIMACY_LOYAL`: 900
+- `PET_INTIMACY_MAX`: 1000
+
### monster skill states
- `MSS_ANY`: -1
@@ -5058,6 +5096,7 @@
- `MSC_MASTERATTACKED`: 20
- `MSC_ALCHEMIST`: 21
- `MSC_SPAWN`: 22
+- `MSC_MAGICATTACKED`: 23
### monster skill targets
@@ -5076,6 +5115,12 @@
- `MST_AROUND4`: 12
- `MST_AROUND`: 12
+### Monster group constants
+
+- `ALL_MOBS_NONBOSS`: -1
+- `ALL_MOBS_BOSS`: -2
+- `ALL_MOBS`: -3
+
### pc block constants, use with *setpcblock* and *checkpcblock*
- `PCBLOCK_NONE`: 0
@@ -5089,6 +5134,18 @@
- `PCBLOCK_COMMANDS`: 128
- `PCBLOCK_NPC`: 256
+### NPC item action constants
+
+- `ITEMENABLEDNPC_NONE`: 0
+- `ITEMENABLEDNPC_EQUIP`: 1
+- `ITEMENABLEDNPC_CONSUME`: 2
+
+### NPC allowed skill use constants
+
+- `SKILLENABLEDNPC_NONE`: 0
+- `SKILLENABLEDNPC_SELF`: 1
+- `SKILLENABLEDNPC_ALL`: 2
+
### private airship responds
- `P_AIRSHIP_NONE`: 0
@@ -5098,6 +5155,12 @@
- `P_AIRSHIP_ITEM_NOT_ENOUGH`: 2
- `P_AIRSHIP_ITEM_INVALID`: 5
+### player allowed actions when dead
+
+- `PCALLOWACTION_NONE`: 0
+- `PCALLOWACTION_TRADE`: 1
+- `PCALLOWACTION_CHAT`: 2
+
### questinfo types
- `QINFO_JOB`: 0
@@ -5252,10 +5315,18 @@
### itemskill option flags
- `ISF_NONE`: 0
-- `ISF_IGNORECONDITIONS`: 1
+- `ISF_CHECKCONDITIONS`: 1
- `ISF_INSTANTCAST`: 2
- `ISF_CASTONSELF`: 4
+### Item Bound Types
+
+- `IBT_ANY`: 0
+- `IBT_ACCOUNT`: 1
+- `IBT_GUILD`: 2
+- `IBT_PARTY`: 3
+- `IBT_CHARACTER`: 4
+
### Renewal
- `RENEWAL`: 1
@@ -8150,17 +8221,48 @@
- `FATAL_DAYS`: 2958
- `TORTUROUS_REDEEMER`: 2959
- `E_TORTUROUS_REDEEMER`: 2961
+- `WOODIE`: 2963
+- `XM_TEDDY_BEAR`: 2995
- `XM_CELINE_KIMI`: 2996
- `GRIM_REAPER_ANKOU`: 3029
- `TIMEHOLDER`: 3074
+- `ELEPHANT`: 3162
+- `GORILLA`: 3163
+- `LION`: 3164
+- `RHINO`: 3165
- `J_REB_SHECIL1`: 3169
- `J_REB_SHECIL2`: 3170
- `E1_FELOCK`: 3181
- `MM_SARAH`: 3190
- `ORGANIC_JAKK`: 3202
- `INORGANIC_JAKK`: 3203
+- `BLUE_UNICORN`: 3261
+- `PAD_TAMADORA`: 3306
+- `PAD_RUBYLIT`: 3317
+- `PAD_SAPPHILIT`: 3318
+- `PAD_EMELIT`: 3319
+- `PAD_TOPALIT`: 3320
+- `PAD_AMELIT`: 3321
+- `PAD_MYTHLIT`: 3349
- `DARK_SOUL`: 3381
- `WANDERING_SOUL`: 3382
+- `DR_EGGRING`: 3495
+- `DR_LUNATIC`: 3496
+- `LITTLE_ISIS`: 3636
+- `DIABOLIC2`: 3669
+- `DELETER_2`: 3670
+- `SCATLETON`: 3731
+- `SWEETS_DROPS`: 3790
+- `SKELION`: 3971
+- `NIGHTMARE_TERROR_H`: 20373
+- `WANDER_MAN_H`: 20420
+- `BACSOJIN2`: 20423
+- `MOONLIGHT2`: 20424
+- `PHREEONI2`: 20425
+- `ORK_HERO2`: 20571
+- `GLOOMUNDERNIGHT2`: 20619
+- `EP17_2_CHILD_ADMIN1`: 20696
+- `EP17_2_CHILD_ADMIN2`: 20697
## Items (db/re/item_db.conf)
- `Red_Potion`: 501
@@ -12689,6 +12791,8 @@
- `Memory_Of_Jack`: 6657
- `Halloween_Coin`: 6658
- `RWC_Inicializer`: 6665
+- `Emerald_Leaf`: 6669
+- `Log_`: 6670
- `Geffen_Magic_Coin`: 6671
- `Gray_Shard`: 6672
- `Bossnia_Pass`: 6673
@@ -12700,6 +12804,10 @@
- `Steel_Article`: 6746
- `Steel_Article_`: 6747
- `Corrupted_Charm`: 6755
+- `Banana_Can`: 6762
+- `Spicy_Rice_Cake`: 6763
+- `Hot_Dog`: 6764
+- `Ferris_Wheel_Biscuit`: 6765
- `ORGANIC_PUMPKIN`: 6804
- `INORGANIC_PUMPKIN`: 6805
- `Solo_Troops_Badge`: 6821
@@ -13713,9 +13821,22 @@
- `Brownie_Egg`: 9060
- `Marin_Egg`: 9061
- `Novice_Poring_Egg`: 9062
+- `Woodie_Egg`: 9063
+- `Elephant_Egg`: 9064
+- `Gorilla_Egg`: 9065
+- `Lion_Egg`: 9066
+- `Rhino_Egg`: 9067
+- `Blue_Unicorn_Egg`: 9068
- `Mastering_Egg`: 9069
- `Savage_Egg`: 9070
- `Grand_Peco_Peco_Egg`: 9071
+- `Rubylit_Egg`: 9074
+- `Sapphilit_Egg`: 9075
+- `Emelit_Egg`: 9076
+- `Topalit_Egg`: 9077
+- `Amelit_Egg`: 9078
+- `Mythlit_Egg`: 9079
+- `Tamadora_Egg`: 9080
- `High_Orc_Egg`: 9087
- `Angeling_Egg`: 9088
- `Am_Mut_Egg`: 9089
@@ -13742,6 +13863,16 @@
- `Phreeoni_Egg`: 9111
- `Moonlight_Flower_Egg`: 9112
- `Skelion_Egg`: 9113
+- `Bacsojin2_Egg_`: 9115
+- `Rigid_Nightmare_Terror_Egg`: 9116
+- `Contaminated_Wanderer_Egg`: 9117
+- `Aliot_Egg`: 9118
+- `Alicel_Egg`: 9119
+- `Aliza_Egg`: 9120
+- `Orc_Hero_Egg_`: 9121
+- `Gloom_Under_Night_Egg`: 9122
+- `Child_Admin_Beta_Egg`: 9123
+- `Child_Admin_Alpha_Egg`: 9124
- `Ein_Ddbox`: 9514
- `Metal_Rifine_Ticket`: 9523
- `Ein_Ddbox2`: 9529
@@ -13786,7 +13917,10 @@
- `Black_Butterfly_Mask`: 10037
- `Horn_Protector`: 10038
- `Tw_Backpack`: 10039
+- `Red_Bell_Necklace`: 10040
- `Dark_Mane`: 10042
+- `Little_Headdress_Beta`: 10043
+- `Little_Headdress_Alpha`: 10044
- `Prontera_Book_01`: 11000
- `Adventure_Story01`: 11001
- `Great_Chef_Orleans01`: 11002
@@ -13910,6 +14044,7 @@
- `Trance_Candy_Y`: 11594
- `Trance_Candy_G`: 11595
- `Catnip_Fruit`: 11602
+- `Cookie_Bat`: 11605
- `Crepe`: 11607
- `Chocolate_Egg`: 11608
- `Yummy_Cookie_Egg`: 11609
@@ -13917,6 +14052,7 @@
- `Aromatic_Pop_Corn`: 11612
- `Fresh_Milk`: 11614
- `Sweet_Potato_`: 11615
+- `Yummy_Meat`: 11616
- `Bearopy`: 11620
- `Aromatic_Pop_Corn_`: 11625
- `Girl_Bunch_Of_Flower`: 11701
@@ -14763,6 +14899,7 @@
- `Elf_Tear_Curse`: 12880
- `Elf_Tear_Silence`: 12881
- `Elf_Tear_Blind`: 12882
+- `Almighty`: 12883
- `C_Center_Potion`: 12884
- `C_Awakening_Potion`: 12885
- `C_Berserk_Potion`: 12886
@@ -16631,6 +16768,7 @@
- `Tw_Red_Scroll`: 17210
- `Tw_Orange_Scroll`: 17211
- `Tw_Yellow_Scroll`: 17212
+- `Almighty_Box`: 17224
- `C_Center_Potion_Box`: 17226
- `C_Awakening_Potion_Box`: 17227
- `C_Berserk_Potion_Box`: 17228
@@ -18131,6 +18269,9 @@
- `Integer_Time`: 22837
- `Something_Candy_Holder`: 22838
- `Old_Money_Pocket`: 22876
+- `Sap_Jelly`: 23187
+- `Unprocessed_Parts`: 23188
+- `SmallDoll_Needle`: 23189
- `Fried_Chicken`: 23242
- `Fried_Chicken_1`: 23243
- `Elixir_Bandage`: 23256
@@ -18784,6 +18925,9 @@
- `S_Genesis_Pendant`: 24582
- `S_Genesis_Earing`: 24583
- `Slug_Bullet`: 25187
+- `Suspicious_Bottle`: 25231
+- `Cheap_Lubricant`: 25232
+- `Cotton_Tufts`: 25233
- `BrokenArrow`: 25258
- `Shining_Spore`: 25265
- `Dried_Leaf_Of_Ygg`: 25266
@@ -18793,6 +18937,7 @@
- `Happiness_Clover`: 25295
- `Golden_Corn`: 25340
- `Mightysoul_Essence`: 25375
+- `Luxurious_Pet_Food`: 25377
- `Captured_Savage`: 25390
- `Goodly_Bough`: 25391
- `Free_Pass_Ticket`: 25392
@@ -18944,6 +19089,8 @@
- `Ein_1HWHIP`: 26215
- `Faceworm_Queen_Card`: 27164
- `Captain_Felock_Card`: 27182
+- `Rigid_Nightmare_Terror_Card`: 27352
+- `Contaminated_Wanderer_Card`: 27361
- `Thanos_Katar`: 28000
- `Katar_Of_Evil_Slayer`: 28001
- `Half_BF_Katar2`: 28002
@@ -19091,6 +19238,7 @@
- `GH_Cursed_Crystal_`: 29590
- `Cursed_Emerald`: 29591
- `Shinee_Opal`: 29592
+- `Abandoned_Teddy_Bear_Card`: 31022
- `Roast_Memory`: 31172
- `C_Black_Cat`: 31186
- `Choco_Minihat`: 31195
@@ -19274,6 +19422,7 @@
- `Imperial_Trip_Suit`: 450074
- `ILL_Piece_B`: 100004
- `Imperial_Firerain_Suit`: 450075
+- `Cloud_Cotton`: 1000227
- `Imperial_Crimson_Robe`: 450076
- `Imperial_Frost_Robe`: 450077
- `Imperial_Psychic_Robe`: 450078
@@ -19396,6 +19545,7 @@
- `Boost_Gatling`: 830000
- `Abyss_Ddbox3`: 100144
- `Abyss_Ddbox4`: 100145
+- `Barmil_Ticket`: 1000103
> End of list
diff --git a/doc/mob_skill_db.md b/doc/mob_skill_db.md
new file mode 100644
index 000000000..8198446d3
--- /dev/null
+++ b/doc/mob_skill_db.md
@@ -0,0 +1,224 @@
+# Monster skill database
+
+<!--
+## Copyright
+> This file is part of Hercules.
+> http://herc.ws - http://github.com/HerculesWS/Hercules
+>
+> Copyright (C) 2020 Hercules Dev Team
+> Copyright (C) Zarbony
+> Copyright (C) Kenpachi
+>
+> 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
+This file is a documentation for the monster skill database files.
+ * [db/mob_skill_db2.conf](../db/mob_skill_db2.conf)
+ * [db/pre-re/mob_skill_db.conf](../db/pre-re/mob_skill_db.conf)
+ * [db/re/mob_skill_db.conf](../db/re/mob_skill_db.conf)
+
+--------------------------------------------------------------
+
+## Entry structure
+```
+ <Monster_Constant>: {
+ <Skill_Constant>: {
+ ClearSkills:
+ SkillLevel:
+ SkillState:
+ SkillTarget:
+ Rate:
+ CastTime:
+ Delay:
+ Cancelable:
+ CastCondition:
+ ConditionData:
+ val0:
+ val1:
+ val2:
+ val3:
+ val4:
+ Emotion:
+ ChatMsgID:
+ }
+ }
+```
+
+--------------------------------------------------------------
+
+## Field list
+
+Name | Data type | Default value
+:--------------- | :-------- | :------------
+Monster_Constant | constant | No default value
+Skill_Constant | constant | No default value
+ClearSkills | boolean | false
+SkillLevel | int | 1
+SkillState | string | "MSS_ANY"
+SkillTarget | string | "MST_TARGET"
+Rate | int | 1
+CastTime | int | 0
+Delay | int | 0
+Cancelable | boolean | false
+CastCondition | string | "MSC_ALWAYS"
+ConditionData | int | 0
+val0 | int | 0
+val1 | int | 0
+val2 | int | 0
+val3 | int | 0
+val4 | int | 0
+Emotion | int | -1
+ChatMsgID | int | 0
+
+--------------------------------------------------------------
+
+## Field explanation
+
+### Monster_Constant
+The monster's name constant, found in [mob_db.conf](../db/re/mob_db.conf) as *SpriteName*.
+There are 3 special constants for global skill assignment:
+* `ALL_MOBS`: Add skills to all monsters.
+* `ALL_MOBS_BOSS`: Add skills to all boss monsters.
+* `ALL_MOBS_NONBOSS`: Add skills to all non-boss monsters.
+
+### Skill_Constant
+The skill's name constant, found in [skill_db.conf](../db/re/skill_db.conf) as *Name*.
+Note: You can add multiple Skill_Constant blocks.
+
+### ClearSkills
+If set to `true`, all previously defined skills for this monster will be removed.
+
+### SkillLevel
+The skill level which should be used.
+Minimum value is `1`. Maximum value is `mob_max_skilllvl` from [conf/map/battle/skill.conf](../conf/map/battle/skill.conf#L318).
+
+### SkillState
+Defines in which state the monster is able to cast the skill.
+State | Description
+:------------ | :----------
+MSS_ANY | Monster is in any state except `MSS_DEAD`.
+MSS_IDLE | Monster has no target and isn't walking.
+MSS_WALK | Monster is walking.
+MSS_LOOT | Monster is looting or walking to loot.
+MSS_DEAD | Monster is dying.
+MSS_BERSERK | Monster is attacking after starting the battle.
+MSS_ANGRY | Monster is attacking after being attacked.
+MSS_RUSH | Monster is following an enemy after being attacked.
+MSS_FOLLOW | Monster is following an enemy without being attacked.
+MSS_ANYTARGET | Same as `MSS_ANY` but monster must have a target.
+
+### SkillTarget
+Defines the skill's target.
+Target | Description
+:---------- | :----------
+MST_TARGET | The monster's current target.
+MST_RANDOM | A random enemy within skill range.
+MST_SELF | The monster itself.
+MST_FRIEND | A random friend within skill range. If no friend was found, `MST_SELF` is used.
+MST_MASTER | The monster's master. If no master was found, `MST_FRIEND` is used.
+MST_AROUND1 | Random cell within a range of `1`. (Affects ground skills only.)
+MST_AROUND2 | Random cell within a range of `2`. (Affects ground skills only.)
+MST_AROUND3 | Random cell within a range of `3`. (Affects ground skills only.)
+MST_AROUND4 | Random cell within a range of `4`. (Affects ground skills only.)
+MST_AROUND5 | Same as `MST_AROUND1`, but the monster's current target must be in skill range.
+MST_AROUND6 | Same as `MST_AROUND2`, but the monster's current target must be in skill range.
+MST_AROUND7 | Same as `MST_AROUND3`, but the monster's current target must be in skill range.
+MST_AROUND8 | Same as `MST_AROUND4`, but the monster's current target must be in skill range.
+MST_AROUND | Same as `MST_AROUND4`.
+
+### Rate
+The chance of successfully casting the skill if the condition is fulfilled. (10000 = 100%)
+Minimum value is `1`. Maximum value is `10000`.
+
+### CastTime
+The skill's cast time in milliseconds.
+Minimum value is `0`. Maximum value is `MOB_MAX_CASTTIME` from [src/map/mob.c](../src/map/mob.c#L81).
+
+### Delay
+The time in milliseconds before attempting to cast the same skill again.
+Minimum value is `0`. Maximum value is `MOB_MAX_DELAY` from [src/map/mob.c](../src/map/mob.c#L82).
+
+### Cancelable
+Defines whether the skill is cancelable or not.
+
+### CastCondition
+Defines the condition to successfully cast the skill.
+Condition | Description
+:-------------------- | :----------
+MSC_ALWAYS | No condition.
+MSC_MYHPLTMAXRATE | Monster's HP in percent is less than or equal to `ConditionData`.
+MSC_MYHPINRATE | Monster's HP in percent is greater than or equal to `ConditionData` and less than or equal to `val0`.
+MSC_FRIENDHPLTMAXRATE | Friend's HP in percent is less than or equal to `ConditionData`.
+MSC_FRIENDHPINRATE | Friend's HP in percent is greater than or equal to `ConditionData` and less than or equal to `val0`.
+MSC_MYSTATUSON | Monster has status change `ConditionData` enabled. (See [doc/constants.md](./constants.md#Status-Changes) for a list of available status changes.)
+MSC_MYSTATUSOFF | Monster has status change `ConditionData` disabled. (See [doc/constants.md](./constants.md#Status-Changes) for a list of available status changes.)
+MSC_FRIENDSTATUSON | Friend has status change `ConditionData` enabled. (See [doc/constants.md](./constants.md#Status-Changes) for a list of available status changes.)
+MSC_FRIENDSTATUSOFF | Friend has status change `ConditionData` disabled. (See [doc/constants.md](./constants.md#Status-Changes) for a list of available status changes.)
+MSC_ATTACKPCGT | Monster is attacked by more than `ConditionData` units.
+MSC_ATTACKPCGE | Monster is attacked by `ConditionData` or more units.
+MSC_SLAVELT | Monster has less than `ConditionData` slaves.
+MSC_SLAVELE | Monster has `ConditionData` or less active slaves.
+MSC_CLOSEDATTACKED | Monster is melee attacked.
+MSC_LONGRANGEATTACKED | Monster is range attacked.
+MSC_AFTERSKILL | Monster has used skill `ConditionData`. (If `ConditionData` is `0`, all skills are triggered.)
+MSC_SKILLUSED | Skill `ConditionData` was used on the monster. (If `ConditionData` is `0`, all skills are triggered.)
+MSC_CASTTARGETED | A skill is being cast on the monster.
+MSC_RUDEATTACKED | Monster was rude attacked `RUDE_ATTACKED_COUNT` times. ([src/map/mob.c#L84](../src/map/mob.c))
+MSC_MASTERHPLTMAXRATE | The monster master's HP in percent is less than `ConditionData`.
+MSC_MASTERATTACKED | The monster's master is attacked.
+MSC_ALCHEMIST | The monster was summoned by an Alchemist class character.
+MSC_SPAWN | The monster spawns.
+MSC_MAGICATTACKED | The monster has received magic damage.
+
+### ConditionData
+Additional cast condition data. Meaning depends on the situation. See `CastCondition` table.
+
+### val0
+Additional data. Meaning depends on the situation.
+ * `MSC_MYHPINRATE`/`MSC_FRIENDHPINRATE`: See `CastCondition` table.
+ * `NPC_SUMMONMONSTER`: Slave monster ID.
+ * `NPC_SUMMONSLAVE`: Slave monster ID.
+ * `NPC_METAMORPHOSIS`: Transform monster ID.
+ * `NPC_EMOTION`: Emotion ID. (See [doc/constants.md](./constants.md#emotes) for a list of available emotions.)
+ * `NPC_EMOTION_ON`: Emotion ID. (See [doc/constants.md](./constants.md#emotes) for a list of available emotions.)
+
+### val1
+Additional data. Meaning depends on the situation.
+ * `NPC_SUMMONMONSTER`: Slave monster ID.
+ * `NPC_SUMMONSLAVE`: Slave monster ID.
+ * `NPC_METAMORPHOSIS`: Transform monster ID.
+ * `NPC_EMOTION`: Monster's mode is changed to specified value.
+ * `NPC_EMOTION_ON`: Monster's mode is changed to specified value.
+
+### val2
+Additional data. Meaning depends on the situation.
+ * `NPC_SUMMONMONSTER`: Slave monster ID.
+ * `NPC_SUMMONSLAVE`: Slave monster ID.
+ * `NPC_METAMORPHOSIS`: Transform monster ID.
+
+### val3
+Additional data. Meaning depends on the situation.
+ * `NPC_SUMMONMONSTER`: Slave monster ID.
+ * `NPC_SUMMONSLAVE`: Slave monster ID.
+ * `NPC_METAMORPHOSIS`: Transform monster ID.
+
+### val4
+Additional data. Meaning depends on the situation.
+ * `NPC_SUMMONMONSTER`: Slave monster ID.
+ * `NPC_SUMMONSLAVE`: Slave monster ID.
+ * `NPC_METAMORPHOSIS`: Transform monster ID.
+
+### Emotion
+The ID of the emotion the monster will use when casting the skill.
+(See [doc/constants.md](./constants.md#emotes) for a list of available emotions.)
+
+### ChatMsgID
+The ID of the message the monster will say when casting the skill.
+(See [db/mob_chat_db.txt](../db/mob_chat_db.txt) for a list of available messages.)
diff --git a/doc/pet_db.txt b/doc/pet_db.txt
new file mode 100644
index 000000000..140a8309d
--- /dev/null
+++ b/doc/pet_db.txt
@@ -0,0 +1,196 @@
+//===== Hercules Documentation ===============================
+//= Pet Database
+//===== By: ==================================================
+//= Hercules Dev Team
+//===== Current Version: =====================================
+//= 20200102
+//===== Description: =========================================
+//= Explanation of the pet_db.conf file and structure.
+//============================================================
+
+pet_db: (
+{
+ // ================ Mandatory fields ==============================
+ Id: ID (int)
+ Name: "Pet Name" (string)
+ EggItem: "Egg Item Constant" (string)
+ // ================ Optional fields ===============================
+ TamingItem: "Taming Item Constant" (string, defaults to 0)
+ FoodItem: "Food Item Constant" (string, defaults to 537 ("Pet_Food"))
+ AccessoryItem: "Equipment Item Constant" (string, defaults to 0)
+ FoodEffectiveness: hunger points (int, defaults to 80)
+ HungerDelay: hunger time (int, defaults to 60)
+ HungerDecrement: hunger points (int, defaults to 1)
+ Intimacy: {
+ Initial: start intimacy (int, defaults to 250)
+ FeedIncrement: feeding intimacy (int, defaults to 10)
+ OverFeedDecrement: overfeeding intimacy (int, defaults to 100)
+ OwnerDeathDecrement: owner die intimacy (int, defaults to 20)
+ StarvingDelay: starving time (int, defaults to 20)
+ StarvingDecrement: starving intimacy (int, defaults to 20)
+ }
+ CaptureRate: capture rate (int, defaults to 1000)
+ Speed: speed (int, defaults to 150)
+ SpecialPerformance: true/false (boolean, defaults to false)
+ TalkWithEmotes: convert talk (boolean, defaults to false)
+ AttackRate: attack rate (int, defaults to 300)
+ DefendRate: Defence attack (int, defaults to 300)
+ ChangeTargetRate: change target (int, defaults to 800)
+ AutoFeed: true/false (boolean, defaults to false)
+ PetScript: <" Pet Script (can also be multi-line) ">
+ EquipScript: <" Equip Script (can also be multi-line) ">
+ Evolve: {
+ EggID: { (string, Evolved Pet EggID)
+ Name: Amount (items required to perform evolution)
+ ...
+ }
+ }
+},
+...
+)
+
+ * Id:
+ The ID of the monster that should be tamed. See mob_db.conf.
+ * Name:
+ The pet's default name.
+ * EggItem:
+ The name of the pet's egg item. See item_db.conf AegisName field.
+ * TamingItem:
+ The name of the item, which is used to tame the pet.
+ See item_db.conf AegisName field.
+ This field is optional and defaults to 0.
+ * FoodItem:
+ The name of the item, which is used to feed the pet.
+ See item_db.conf AegisName field.
+ This field is optional and defaults to Pet_Food (ID=537).
+ * AccessoryItem:
+ The name of the pet's accesssory item.
+ See item_db.conf AegisName field.
+ This field is optional and defaults to 0.
+ * FoodEffectiveness:
+ This field defines how many hunger points
+ are restored, when feeding the pet.
+ This field is optional and defaults to 80.
+ Minimum value is 1, maximum value is 100.
+ * HungerDelay:
+ This is the interval for consuming hunger points.
+ Every <HungerDelay> seconds, the pet will consume
+ <HungerDecrement> hunger points.
+ In official servers it's 60 seconds for every pet.
+ This field is optional and defaults to 60.
+ Minimum value is 0, maximum value is 2147483.
+ If set to 0, the pet won't consume hunger points.
+ * HungerDecrement:
+ How many hunger points will be consumed every <HungerDelay> seconds.
+ This field is optional and defaults to 1.
+ Minimum value is 0, maximum value is 99.
+ If set to 0, <HungerDelay> is automatically set to 0, too,
+ regardless of what value was defined.
+ * Intimacy: {
+ The <Intimacy> block contains all settings,
+ which affect the pet's intimacy value.
+ * Initial:
+ The amount of intimacy points, the pet will have when tamed.
+ This field is optional and defaults to 250.
+ Minimum value is 1, maximum value is 1000.
+ * FeedIncrement:
+ The amount of intimacy points, gained when feeding the pet.
+ Note: This value is used as base value.
+ The actual added amount depends on the pet's current hunger.
+ This field is optional and defaults to 10.
+ Minimum value is 1, maximum value is 1000.
+ * OverFeedDecrement:
+ The amount of intimacy points, lost when feeding the pet
+ if it isn't hungry.
+ Note: This value is used as base value.
+ The actual removed amount depends on the pet's current hunger.
+ This field is optional and defaults to 100.
+ Minimum value is 0, maximum value is 1000.
+ * OwnerDeathDecrement:
+ The amount of intimacy points, lost when its master dies.
+ This field is optional and defaults to 20.
+ Minimum value is 0, maximum value is 1000.
+ * StarvingDelay:
+ This is the interval for loosing intimacy points,
+ when the pet is starving.
+ The pet is starving, if it has no hunger points left.
+ Every <StarvingDelay> seconds, the pet will lose
+ <StarvingDecrement> intimacy points.
+ In official servers it's 20 seconds for all pets.
+ If <HungerDelay> is set to 0, <StarvingDelay> is set to 0, too,
+ regardless of what value was defined.
+ This field is optional and defaults to 20.
+ Minimum value is 0, maximum value is <HungerDelay>.
+ If set to 0, the pet won't lose intimacy points while starving.
+ * StarvingDecrement:
+ How many intimacy points will be lost every <StarvingDelay> seconds,
+ when the pet is starving.
+ This field is optional and defaults to 20.
+ Minimum value is 0, maximum value is 1000.
+ If set to 0, <StarvingDelay> is automatically set to 0, too,
+ regardless of what value was defined.
+ }
+ * CaptureRate:
+ The chance of success when taming the pet.
+ 10000 equals 100%.
+ This field is optional and defaults to 1000.
+ Minimum value is 1, maximum value is 10000.
+ * Speed:
+ The pet's moving speed.
+ Note: The lower the value, the higher the speed.
+ This field is optional and defaults to 150.
+ Minimum value is 20, maximum value is 1000.
+ * SpecialPerformance:
+ If 'true', the pet is allowed to do its special performance.
+ This field is optional and defaults to 'false'.
+ * TalkWithEmotes:
+ If 'true', the pet is allowed to talk by using emotes.
+ This field is optional and defaults to 'false'.
+ * AttackRate:
+ Chance for supporting when the master attacks a monster.
+ 10000 equals 100%.
+ This field is optional and defaults to 300.
+ Minimum value is 0, maximum value is 10000.
+ * DefendRate:
+ Chance for supporting when the master receives damage from a monster.
+ 10000 equals 100%.
+ This field is optional and defaults to 300.
+ Minimum value is 0, maximum value is 10000.
+ * ChangeTargetRate:
+ Chance for the pet changes its target when supporting.
+ 10000 equals 100%.
+ This field is optional and defaults to 800.
+ Minimum value is 0, maximum value is 10000.
+ * AutoFeed:
+ If 'true', the pet is fed automatically.
+ This field is optional and defaults to 'false'.
+ * PetScript: <"
+ This field is used for pet AI commands. See doc/script_commands.txt.
+ It will be executed every time, the pet's data gets initialized.
+ Everything you can do in a NPC script should work here, too,
+ but using the <EquipScript> field is recommended, when executing
+ other commands than the pet AI ones.
+ This field is optional and has no default value.
+ ">
+ * EquipScript: <"
+ This field is commonly used to apply bonuses to the the pet's master.
+ See doc/item_bonus.md.
+ It will be executed every time, the pet master's status is calculated.
+ Everything you can do in a NPC script should work here, too.
+ This field is optional and has no default value.
+ ">
+ * Evolve: {
+ The <Evolve> block is used to define which pet(s) can be eveolved
+ from the current pet.
+ This block is optional and has no default value.
+ * Evolved_Egg_Item_Name: {
+ The name of the egg item, which will be created when evolving.
+ You can add multiple <Evolved_Egg_Item_Name> blocks.
+ See item_db.conf AegisName field.
+ * Evolve_Item_Name: Amount
+ This is a pair of an item name and the corresponding amount which is
+ required to evolve the pet into <Evolved_Egg_Item_Name>.
+ You can add multiple <Evolve_Item_Name: Amount> pairs.
+ See item_db.conf AegisName field for item names.
+ }
+ }
diff --git a/doc/script_commands.txt b/doc/script_commands.txt
index 8308f4771..9bbb65c1c 100644
--- a/doc/script_commands.txt
+++ b/doc/script_commands.txt
@@ -434,17 +434,39 @@ marked as usable in pet scripts to work in there reliably.
Numbers
-------
+The Hercules scripting engine supports 4 types of number literals:
+
+type base syntax
+----------------------------------------------
+decimal 10 255
+hexadecimal 16 0xFF
+octal 8 0o377
+binary 2 0b11111111
+
Beside the common decimal numbers, which are nothing special whatsoever
(though do not expect to use fractions, since ALL numbers are integer in
this language), the script engine also handles hexadecimal numbers, which
are otherwise identical. Writing a number like '0x<hex digits>' will make
it recognized as a hexadecimal value. Notice that 0x10 is equal to 16.
-Also notice that if you try to 'mes 0x10' it will print '16'.
+Also notice that if you try to 'mes 0x10' it will print '16'. If you wish
+to make calculations in base 8, you can also use the octal notation like
+'0o<octal digits>'. To make calculations in base 2 (binary), you can use
+the binary notation like '0b<binary digits>'.
+
+The following are all equivalent:
+ 255 == 0xFF == 0o377 == 0b11111111
Number values can't exceed the limits of an integer variable: Any number
greater than INT_MAX (2147483647) or smaller than INT_MIN (-2147483648) will
be capped to those values and will cause a warning to be reported.
+Underscores can also be used as visual separators for digit grouping purposes:
+ 2_147_483_647
+ 0x7FFF_FFFF
+
+Keep in mind that number literals cannot start or end with a separator and no
+more than one separator can be used in a row (so 12_3___456 is illegal).
+
Variables
---------
@@ -536,7 +558,9 @@ variables or an empty string ("", nothing between the quotes) for string
variables. Once you set it to that, the variable is as good as forgotten
forever, and no trace remains of it even if it was stored with character
or account data. The maximum length of variable name including prefix and
-suffix is 32.
+suffix is 32. Permanent string variables (name$, $name$, #name$, ##name$)
+can store text with a maximum length of 255 characters. All other string
+type variables have no such limitation.
Some variables are special, that is, they are already defined for you by
the scripting engine. You can see the full list somewhere in
@@ -1710,7 +1734,8 @@ The default value of 'min' and 'max' can be set with 'input_min_value' and
For numeric inputs the value is capped to the range [min, max]. Returns 1
if the value was higher than 'max', -1 if lower than 'min' and 0 otherwise.
For string inputs it returns 1 if the string was longer than 'max', -1 is
-shorter than 'min' and 0 otherwise.
+shorter than 'min' and 0 otherwise. Note that an input string has a maximum
+length of 70 characters.
---------------------------------------
@@ -1942,58 +1967,64 @@ will result in error and termination of the script.
---------------------------------------
-*function <function name>;
-*<function name>{(<argument>, ...<argument>)};
-*function <function name> {
+{public | private} *function <function name>;
+{public | private} *function <function name> {
<code>
}
-This works like callfunc(), and is used for cleaner and faster scripting.
-The function must be defined and used within a script, and works like a
-label with arguments.
-Note that the name may only contain alphanumeric characters and underscore.
+In its first form, this syntax declares a local function so it can later be
+defined. In its second form, the syntax both declares and defines a local
+function. Local functions must be defined before being used. Note that the name
+may only contain alphanumeric characters and underscore. Once defined, they can
+be called from the current script as if they were regular built-in commands, and
+can also be called from other scripts if they are marked as public. Local
+functions may be marked as public by simply adding "public" prior to the
+function definition. Functions not marked as public are private by default and
+cannot be called from another script.
Usage:
1. Declare the function.
function <function name>;
2. Call the function anywhere within the script.
- It can also return a value when used with parentheses.
- <function name>;
- 3. Define the function within the script.
+ <function name>();
+ 3. Define the function by adding its script.
<function name> {<code>}
+ Step 1 is optional if the function is defined prior to being called.
+
Example:
-prontera,154,189,4 script Item Seller 767,{
/* Function declaration */
- function SF_Selling;
+ function MyFunction;
- if (Zeny > 50) {
- mes("Welcome!");
- /* Function call */
- SF_Selling();
- } else {
- mes("You need 50z, sorry!");
- }
- close();
+ /* Function call */
+ MyFunction();
/* Function definition */
- function SF_Selling {
- mes("Would you like to buy a phracon for 50z?");
- next();
- if (select("Yes", "No, thanks") == 1) {
- Zeny -= 50;
- getitem(Phracon, 1);
- mes("Thank you!");
- }
+ function MyFunction {
+ // (do something)
return;
}
-}
+
+
+Example with public functions:
+
+ /* Function declaration + definition */
+ public function myFunction {
+ /* notice the "public" before the "function" keyword */
+ return;
+ }
+
+ /* Local call */
+ myFunction();
+
+ /* Call from another script */
+ "npc name"::myFunction();
+
Example with parameters and return value:
-prontera,150,150,0 script TestNPC 123,{
/* Function declaration */
function MyAdd;
@@ -2002,18 +2033,35 @@ prontera,150,150,0 script TestNPC 123,{
input(.@a);
input(.@b);
/* Function call */
- mes(.@a+" + "+.@b+" = "+MyAdd(.@a, .@b));
+ mesf("%i + %i = %i", .@a, .@b, MyAdd(.@a, .@b));
close();
/* Function definition */
function MyAdd {
- return(getarg(0)+getarg(1));
+ return (getarg(0) + getarg(1));
}
-}
---------------------------------------
+*<function name>({<arg>...})
+*"<npc name>"::<function name>({<arg>...})
+*callfunctionofnpc("<function name>", "<npc name>"{, <arg>...});
+
+In its first form, calls a previously defined local function. In its second
+form, calls a previously defined public local function of another NPC. If the
+name of the target NPC or the name of the local function is not known
+beforehand, callfunctionofnpc() can be used instead of the second form.
+See function() above for more details.
+
+Example:
+
+ MyFunction(arg1, arg2, arg3);
+ "MyNPC"::MyFunction(arg1, arg2, arg3);
+ callfunctionofnpc("MyNPC", "MyFunction", arg1, arg2, arg3);
+
+---------------------------------------
+
*is_function("<function name>")
This command checks whether or not a function exists and returns its type.
@@ -3147,23 +3195,24 @@ This command sets a bunch of arrays with a complete list of whatever the
invoking character has in its inventory, including all the data needed to
recreate these items perfectly if they are destroyed. Here's what you get:
-@inventorylist_id[] - array of item ids.
-@inventorylist_idx[] - array of item inventory index.
-@inventorylist_amount[] - their corresponding item amounts.
-@inventorylist_equip[] - will return the slot the item is equipped on, if at all.
-@inventorylist_refine[] - for how much it is refined.
-@inventorylist_identify[] - whether it is identified.
-@inventorylist_attribute[] - whether it is broken.
-@inventorylist_card1[] - These four arrays contain card data for the
-@inventorylist_card2[] items. These data slots are also used to store
-@inventorylist_card3[] names inscribed on the items, so you can
-@inventorylist_card4[] explicitly check if the character owns an item
- made by a specific craftsman.
-@inventorylist_expire[] - expire time (Unix time stamp). 0 means never
- expires.
-@inventorylist_bound[] - whether it is an account bounded item or not.
-@inventorylist_favorite[] - whether it is favorite (inside favorite tab) or not.
-@inventorylist_count - the number of items in these lists.
+@inventorylist_id[] - array of item ids.
+@inventorylist_idx[] - array of item inventory index.
+@inventorylist_amount[] - their corresponding item amounts.
+@inventorylist_equip[] - will return the slot the item is equipped on, if at all.
+@inventorylist_refine[] - for how much it is refined.
+@inventorylist_identify[] - whether it is identified.
+@inventorylist_attribute[] - whether it is broken.
+@inventorylist_card1[] - These four arrays contain card data for the items.
+@inventorylist_card2[] These data slots are also used to store names inscribed
+@inventorylist_card3[] on the items, so you can explicitly check if the character
+@inventorylist_card4[] owns an item made by a specific craftsman.
+@inventorylist_expire[] - expire time (Unix time stamp). 0 means never expires.
+@inventorylist_bound[] - whether it is an account bounded item or not.
+@inventorylist_favorite[] - whether it is favorite (inside favorite tab) or not.
+@inventorylist_opt_id1~5[] - array of random option id.
+@inventorylist_opt_val1~5[] - array of random option val.
+@inventorylist_opt_param1~5[] - array of random option param.
+@inventorylist_count - the number of items in these lists.
This could be handy to save/restore a character's inventory, since no
other command returns such a complete set of data, and could also be the
@@ -3191,14 +3240,15 @@ recreate these items perfectly if they are destroyed. Here's what you get:
@cartinventorylist_refine[] - for how much it is refined.
@cartinventorylist_identify[] - whether it is identified.
@cartinventorylist_attribute[] - whether it is broken.
-@cartinventorylist_card1[] - These four arrays contain card data for the
-@cartinventorylist_card2[] items. These data slots are also used to store
-@cartinventorylist_card3[] names inscribed on the items, so you can
-@cartinventorylist_card4[] explicitly check if the character owns an item
- made by a specific craftsman.
-@cartinventorylist_expire[] - expire time (Unix time stamp). 0 means never
- expires.
+@cartinventorylist_card1[] - These four arrays contain card data for the items.
+@cartinventorylist_card2[] These data slots are also used to store names inscribed on the items,
+@cartinventorylist_card3[] so you can explicitly check if the character owns an item
+@cartinventorylist_card4[] made by a specific craftsman.
+@cartinventorylist_expire[] - expire time (Unix time stamp). 0 means never expires.
@cartinventorylist_bound - whether it is an account bound item or not.
+@inventorylist_opt_id1~5[] - array of random option id.
+@inventorylist_opt_val1~5[] - array of random option val.
+@inventorylist_opt_param1~5[] - array of random option param.
@cartinventorylist_count - the number of items in these lists.
This could be handy to save/restore a character's cart_inventory, since no
@@ -3277,6 +3327,7 @@ Example:
---------------------------------------
*getiteminfo(<item ID>, <type>)
+*getiteminfo("<item name>", <type>)
*setiteminfo(<item ID>, <type>, <value>)
This function will look up the item with the specified ID number in the
@@ -3285,6 +3336,9 @@ It will return -1 if there is no such item.
Valid types are:
+ ITEMINFO_ID - Item ID (getiteminfo() only!)
+ ITEMINFO_AEGISNAME - Unique name to reference the item (getiteminfo() only!)
+ ITEMINFO_NAME - Display name (getiteminfo() only!)
ITEMINFO_BUYPRICE - Buy Price
ITEMINFO_SELLPRICE - Sell Price
ITEMINFO_TYPE - Item Type
@@ -3574,7 +3628,7 @@ If the player is not found, returns -1.
*gettimetick(<type>)
Valid types are :
- 0 - server's tick (milleseconds), unsigned int, loops every ~50 days
+ 0 - server's tick (milleseconds), unsigned int, loops every ~25 days
1 - time since the start of the current day in seconds
2 - UNIX epoch time (number of seconds elapsed since 1st of January 1970)
@@ -5273,11 +5327,11 @@ bound to the target character as specified by the bound type. All items created
in this manner cannot be dropped, sold, vended, auctioned, or mailed, and in
some cases cannot be traded or stored.
-Valid bound types are:
- 1 - Account Bound
- 2 - Guild Bound
- 3 - Party Bound
- 4 - Character Bound
+Valid item bound types are:
+ 1 - IBT_ACCOUNT - Account Bound
+ 2 - IBT_GUILD - Guild Bound
+ 3 - IBT_PARTY - Party Bound
+ 4 - IBT_CHARACTER - Character Bound
---------------------------------------
@@ -5318,12 +5372,12 @@ If a bound type is not specified or a bound type of 0 is used, it will search th
of any type, so long as the other parameters match. In all cases, this command will return the bound type of the
item found, or 0 if the specified item was not found.
-Valid bound types are:
- 0 - All Bound types.
- 1 - Account Bound
- 2 - Guild Bound
- 3 - Party Bound
- 4 - Character Bound
+Valid item bound types are:
+ 0 - IBT_ANY - Any Bound
+ 1 - IBT_ACCOUNT - Account Bound
+ 2 - IBT_GUILD - Guild Bound
+ 3 - IBT_PARTY - Party Bound
+ 4 - IBT_CHARACTER - Character Bound
Optional Parameters:
bound_type - checks to see if the item has the specified bound type.
@@ -5341,7 +5395,7 @@ Example:
close();
// This will also check if you have a bound (any type) 1205 (Cutter).
- if (checkbound(Cutter, 0)) {
+ if (checkbound(Cutter, IBT_ANY)) {
mes("You have a bound Cutter");
} else {
mes("You do not have a bound Cutter");
@@ -5356,8 +5410,8 @@ Example:
}
close();
- // This will check if the item found, has a bound type of 2 (guild_bound)
- if (checkbound(Cutter) == 2) {
+ // This will check if the item found, has a bound type of IBT_GUILD
+ if (checkbound(Cutter) == IBT_GUILD) {
mes("You have a guild_bound Cutter");
} else {
mes("You do not have a guild_bound Cutter.");
@@ -5365,7 +5419,7 @@ Example:
close();
// This will check if you have a 'guild_bound' +7 1205 (Cutter).
- if (checkbound(Cutter, 2, 7)) {
+ if (checkbound(Cutter, IBT_GUILD, 7)) {
mes("You have a +7 guild_bound Cutter.");
} else {
mes("You don't have the required item.");
@@ -5633,21 +5687,32 @@ Example:
---------------------------------------
-*enable_items()
-*disable_items()
+*enable_items({<flag>})
+*enableitemuse({<flag>})
+*disable_items({<flag>})
+*disableitemuse({<flag>})
+
+These commands enable/disable item actions while interacting with a NPC.
+When disable_items() is invoked, item actions defined by <flag> are disabled
+during scripts until enable_items() is called or the script has terminated.
+To avoid possible exploits, when disable_items() is invoked, it will only
+disable item actions while running that script in particular.
+Note that if a different script also invokes disable_items(), it will override
+the last call so you may want to call this command at the start of your
+script without assuming the effect is still in effect.
+If <flag> is omitted all item actions will be disabled.
+The enable_items() command enables item actions defined by <flag> during
+scripts until disable_items() is invoked or the script has terminated.
+If <flag> is omitted it defaults to 'item_enabled_npc' battle flag.
+For a list of supported flags have a look at the description of
+'item_enabled_npc' battle flag in 'conf/map/battle/items.conf'.
+Unless disable_items() or enable_items() is invoked the script will use
+'item_enabled_npc' battle flag by default.
+
+Example:
-These commands enable/disable changing of equipments while an NPC is
-running. When disable_items() is run, equipments cannot be changed
-during scripts until enable_items() is called or the script has
-terminated. To avoid possible exploits, when disable_items() is invoked,
-it will only disable changing equips while running that script in
-particular. Note that if a different script also calls disable_items(),
-it will override the last call (so you may want to call this command at
-the start of your script without assuming the effect is still in
-effect).
-If 'item_enabled_npc' option is set to true in 'conf/map/battle/items.conf' all
-NPC are allowing changing of equipment by default except for those have been
-set with 'disable_items'.
+ // This will disable changing equipment during this script.
+ disable_items(ITEMENABLEDNPC_EQUIP);
---------------------------------------
@@ -5659,18 +5724,20 @@ usable items. It will not work properly if there is a visible dialog
window or menu.
If the skill is self or auto-targeting, it will be used immediately.
Otherwise, a target cursor is shown.
-Optional value <flag> is a bitmask to manipulate how the skill is casted.
+By default, all skill requirements are ignored.
+Optional argument <flag> is a bitmask to manipulate how the skill is cast.
Since <flag> is a bitmask, the flags can be summed up.
Possible flags are:
- - 0x00 - ISF_NONE - Skill is casted as if has been used from skill tree.
+ - 0x00 - ISF_NONE - Skill is cast as if it has been used from skill tree.
(Same like <flag> was omitted.)
- - 0x01 - ISF_IGNORECONDITIONS - Skill requirements are ignored and not consumed
- - 0x02 - ISF_INSTANTCAST - Skill is casted instantaneously.
- - 0x04 - ISF_CASTONSELF - Skill is forcefully casted on invoking character,
+ - 0x01 - ISF_CHECKCONDITIONS - Skill requirements are checked and consumed.
+ (SP are never checked/consumed.)
+ - 0x02 - ISF_INSTANTCAST - Skill is cast instantaneously.
+ - 0x04 - ISF_CASTONSELF - Skill is forcefully cast on invoking character,
without showing the target selection cursor.
Important: Items which use itemskill() should be of type IT_USABLE.
- If the item type is IT_DELAYCONSUME and ISF_IGNORECONDITIONS is set,
+ If the item type is IT_DELAYCONSUME and ISF_CHECKCONDITIONS isn't set,
the item won't be consumed when using the item!
// When Anodyne is used, it will cast Endure, Level 1, as if the actual skill
@@ -5678,8 +5745,8 @@ Important: Items which use itemskill() should be of type IT_USABLE.
itemskill(SM_ENDURE, 1);
// Instantaneously cast Level 10 Increase Agility on invoking character,
-// without checking/consuming skill requirements.
- itemskill(AL_INCAGI, 10, ISF_IGNORECONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF);
+// with checking/consuming skill requirements (15 HP).
+ itemskill(AL_INCAGI, 10, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF);
// Instaed of using the constants, one could also do it like this:
itemskill(AL_INCAGI, 10, 7);
@@ -6569,17 +6636,22 @@ Examples:
---------------------------------------
-*setpcblock(<type>,<option>)
-*checkpcblock()
+*setpcblock(<type>, <option>{, <account id>})
+*checkpcblock({<account id>})
-Prevents the player from doing the following action.
+Prevents a character from doing the following action.
For setpcblock, when the <option> is true(1) will block them, and false(0)
will allow those actions again.
+The setpcblock command returns 1 on success or 0 if no character was attached.
+
The checkpcblock command returned value is a bit mask of the currently
enabled block flags (or PCBLOCK_NONE when none is set).
+Parameter <account id> is optional for both commands.
+If omitted, the currently attached character is used.
+
The <type> listed are a bit mask of the following:
PCBLOCK_NONE (only used by checkpcblock)
PCBLOCK_MOVE
@@ -6987,6 +7059,37 @@ Examples:
---------------------------------------
+*unitiswalking({<GID>})
+
+This command checks, if a unit is walking or not.
+If <GID> is omitted, the currently attached character is used.
+Returns 1 if the unit is walking, 0 if the unit is not walking and -1 on error.
+
+Note: There's no differentiation between script and client initiated walking.
+
+Example:
+
+prontera,155,185,5 script Check Walking 1_F_MARIA,{
+ mes("Enter character name.");
+ mes("");
+ input(.@name$);
+ .@GID = getcharid(CHAR_ID_ACCOUNT, .@name$);
+ if (.@GID != 0) {
+ .@iswalking = unitiswalking(.@GID);
+ if (.@iswalking == 1)
+ mesf("%s is walking.", .@name$);
+ else if (.@iswalking == 0)
+ mesf("%s is not walking.", .@name$);
+ else
+ mesf("Can't get %s's walking state.", .@name$);
+ } else {
+ mesf("%s not found!", .@name$);
+ }
+ close();
+}
+
+---------------------------------------
+
*unitkill(<GID>)
*unitwarp(<GID>, <Mapname>, <x>, <y>)
*unitattack(<GID>, <Target ID>)
@@ -7426,6 +7529,16 @@ if GID is not given use the attached player.
//=====================================
---------------------------------------
+*loudhailer("<message>"{, "<color>"})
+
+Announces a colored text in '<char_name> Shouts : <message>' format.
+<color> must be a string in "RRGGBB" format. If <color> is omitted,
+white ("FFFFFF") will be used.
+This command is specially created for the Megaphone_ item (12221),
+but will work in NPCs, too.
+
+---------------------------------------
+
*announce("<text>", <flag>{, <fontColor>{, <fontType>{, <fontSize>{, <fontAlign>{, <fontY>}}}}})
This command will broadcast a message to all or most players, similar to
@@ -7545,7 +7658,8 @@ In the OnBuyItem, two arrays are filled (@bought_nameid and
and the amount sold of it. Same goes for the OnSellItem label, only the
variables are named different (@sold_nameid, @sold_quantity, @sold_refine,
@sold_attribute, @sold_identify, @sold_card1, @sold_card2, @sold_card3,
-@sold_card4). An example on a shop comes with Hercules, and can be found
+@sold_card4, @sold_opt_id1~5, @sold_opt_val1~5, @sold_opt_param1~5).
+An example on a shop comes with Hercules, and can be found
in the doc/sample/npc_dynamic_shop.txt file.
This example shows how to use the labels and their set variables to create
@@ -9553,13 +9667,19 @@ For examples of usage, see /doc/sample/npc_rodex.txt
//=====================================
---------------------------------------
-*instance_create("<instance name>", <owner id>{, <optional owner_type>})
+*instance_create("<instance_name>", <owner_id>{, <owner_type>})
-Create an instance using the name "<instance name>" for the <owner_id> of
-owner_type (when not provided, defaults to IOT_PARTY). Most instance_*
+Creates an instance using the name "<instance_name>" for the <owner_id> of
+<owner_type> (when not provided, defaults to IOT_PARTY). Most instance_*
commands are used in conjunction with this command and depend on the
ID this command returns.
+Valid <owner_type> values:
+- IOT_NONE (0) - <owner_id> can be any arbitrary number.
+- IOT_CHAR (1) - <owner_id> is account ID.
+- IOT_PARTY (2) - <owner_id> is party ID.
+- IOT_GUILD (3) - <owner_id> is guild ID.
+
Example:
// Store the Party ID of the invoking character.
.@party_id = getcharid(CHAR_ID_PARTY);
@@ -9570,11 +9690,9 @@ Example:
// ...
} else if (.@id == -2) { // Invalid Party ID
// ...
- } else if (.@id == -3) { // No free instances (MAX_INSTANCE exceeded)
- // ...
} else if (.@id == -4) { // Already exists
// ...
- } else (.@id < 0) { // Unspecified error while queuing instance.
+ } else if (.@id < 0) { // Unspecified error while queuing instance.
// ...
}
diff --git a/npc/custom/battleground/bg_common.txt b/npc/custom/battleground/bg_common.txt
index 7ba3eecb0..d997263e6 100644
--- a/npc/custom/battleground/bg_common.txt
+++ b/npc/custom/battleground/bg_common.txt
@@ -5,7 +5,7 @@
// BattleGround Warper - Entrance
// *********************************************************************
-- script Maroll Battle Recruiter::BatRecruit 4_F_JOB_KNIGHT,{
+- script Maroll Battle Recruiter::BatRecruit#custom 4_F_JOB_KNIGHT,{
mes "[Maroll Battle Recruiter]";
mes "Good day, adventurer.";
mes "I'm a knight from a far country called Maroll Kingdom.";
@@ -26,12 +26,12 @@
end;
}
-payon,189,104,3 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit1 4_F_JOB_KNIGHT
-prontera,123,83,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit2 4_F_JOB_KNIGHT
-rachel,149,138,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit3 4_F_JOB_KNIGHT
-moc_ruins,75,162,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit4 4_F_JOB_KNIGHT
-aldebaran,146,109,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit5 4_F_JOB_KNIGHT
-lighthalzen,153,86,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit6 4_F_JOB_KNIGHT
+payon,189,104,3 duplicate(BatRecruit#custom) Maroll Battle Recruiter::BatRecruit1#custom 4_F_JOB_KNIGHT
+prontera,123,83,5 duplicate(BatRecruit#custom) Maroll Battle Recruiter::BatRecruit2#custom 4_F_JOB_KNIGHT
+rachel,149,138,5 duplicate(BatRecruit#custom) Maroll Battle Recruiter::BatRecruit3#custom 4_F_JOB_KNIGHT
+moc_ruins,75,162,5 duplicate(BatRecruit#custom) Maroll Battle Recruiter::BatRecruit4#custom 4_F_JOB_KNIGHT
+aldebaran,146,109,5 duplicate(BatRecruit#custom) Maroll Battle Recruiter::BatRecruit5#custom 4_F_JOB_KNIGHT
+lighthalzen,153,86,5 duplicate(BatRecruit#custom) Maroll Battle Recruiter::BatRecruit6#custom 4_F_JOB_KNIGHT
// BattleGround Warper - Exit
// *********************************************************************
@@ -59,14 +59,14 @@ bat_room,148,150,4 script Teleporter#bat 4_F_TELEPORTER,{
// Kafra
// *********************************************************************
-bat_room,148,147,4 script Kafra Staff::kaf_bat 4_F_KAFRA9,{
+bat_room,148,147,4 script Kafra Staff::kaf_bat#custom 4_F_KAFRA9,{
cutin "kafra_09",2;
callfunc "F_Kafra",0,2,1,150,0;
}
// General Guillaume
// *********************************************************************
-bat_room,160,159,3 script General Guillaume 4_M_KY_KIYOM,{
+bat_room,160,159,3 script General Guillaume#custom 4_M_KY_KIYOM,{
cutin "bat_kiyom2",2;
mes "[General Guillaume]";
mes "Hot-blooded adventurer, we need your ability to win this battle.";
@@ -105,7 +105,7 @@ bat_room,160,159,3 script General Guillaume 4_M_KY_KIYOM,{
// General Croix
// *********************************************************************
-bat_room,160,140,3 script Prince Croix 4_M_CRU_CRUA,{
+bat_room,160,140,3 script Prince Croix#custom 4_M_CRU_CRUA,{
cutin "bat_crua1",2;
mes "[Prince Croix]";
mes "Wise adventurer, why don't you lend us your power for victory?";
@@ -133,45 +133,9 @@ bat_room,160,140,3 script Prince Croix 4_M_CRU_CRUA,{
end;
}
-// Time calculation Function
-// *********************************************************************
-function script Time2Str {
- set .@time_left, getarg(0) - gettimetick(2);
-
- set .@Days, .@time_left / 86400;
- set .@time_left, .@time_left - (.@Days * 86400);
- set .@Hours, .@time_left / 3600;
- set .@time_left, .@time_left - (.@Hours * 3600);
- set .@Minutes, .@time_left / 60;
- set .@time_left, .@time_left - (.@Minutes * 60);
-
- set .@Time$, "";
- if( .@Days > 1 )
- set .@Time$, .@Time$ + .@Days + " days, ";
- else if( .@Days > 0 )
- set .@Time$, .@Time$ + .@Days + " day, ";
-
- if( .@Hours > 1 )
- set .@Time$, .@Time$ + .@Hours + " hours, ";
- else if( .@Hours > 0 )
- set .@Time$, .@Time$ + .@Hours + " hour, ";
-
- if( .@Minutes > 1 )
- set .@Time$, .@Time$ + .@Minutes + " minutes, ";
- else if( .@Minutes > 0 )
- set .@Time$, .@Time$ + .@Minutes + " minute, ";
-
- if( .@time_left > 1 || .@time_left == 0 )
- set .@Time$, .@Time$ + .@time_left + " seconds.";
- else if( .@time_left == 1 )
- set .@Time$, .@Time$ + .@time_left + " second.";
-
- return .@Time$;
-}
-
// Guillaume Knight - Tierra Valley
// *********************************************************************
-bat_room,159,178,5 script Guillaume Knight#1 4_M_KY_SOLD,{
+bat_room,159,178,5 script Guillaume Knight#1c 4_M_KY_SOLD,{
mes "[Guillaume Knight]";
mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map.";
next;
@@ -241,7 +205,7 @@ bat_room,156,178,5 script Tierra Valley Officer#1 4_M_KY_KNT,{
// Croix Knight - Tierra Valley
// *********************************************************************
-bat_room,159,121,1 script Croix Knight#1 4_M_CRU_SOLD,{
+bat_room,159,121,1 script Croix Knight#1c 4_M_CRU_SOLD,{
mes "[Croix Knight]";
mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map.";
next;
@@ -311,7 +275,7 @@ bat_room,156,121,1 script Tierra Valley Officer#2 4_M_CRU_KNT,{
// Guillaume Knight - Tierra
// *********************************************************************
-bat_room,167,178,5 script Guillaume Knight#2 4_M_KY_SOLD,{
+bat_room,167,178,5 script Guillaume Knight#2c 4_M_KY_SOLD,{
mes "[Guillaume Knight]";
mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map.";
next;
@@ -381,7 +345,7 @@ bat_room,164,178,5 script Tierra Valley Officer#3 4_M_KY_KNT,{
// Croix Knight - Tierra
// *********************************************************************
-bat_room,167,121,1 script Croix Knight#2 4_M_CRU_SOLD,{
+bat_room,167,121,1 script Croix Knight#2c 4_M_CRU_SOLD,{
mes "[Croix Knight]";
mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map.";
next;
@@ -451,7 +415,7 @@ bat_room,164,121,1 script Tierra Valley Officer#4 4_M_CRU_KNT,{
// Guillaune Knight - Flavius
// *********************************************************************
-bat_room,175,178,5 script Guillaume Knight#3 4_M_KY_SOLD,{
+bat_room,175,178,5 script Guillaume Knight#3c 4_M_KY_SOLD,{
mes "[Guillaume Knight]";
mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal.";
next;
@@ -522,7 +486,7 @@ bat_room,172,178,5 script Flavius Officer#1 4_M_KY_KNT,{
// Croix Knight - Flavius
// *********************************************************************
-bat_room,175,121,1 script Croix Knight#3 4_M_CRU_SOLD,{
+bat_room,175,121,1 script Croix Knight#3c 4_M_CRU_SOLD,{
mes "[Croix Knight]";
mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal.";
next;
@@ -593,7 +557,7 @@ bat_room,172,121,1 script Flavius Officer#2 4_M_CRU_KNT,{
// Guillaune Knight - Flavius
// *********************************************************************
-bat_room,151,178,5 script Guillaume Knight#4 4_M_KY_SOLD,{
+bat_room,151,178,5 script Guillaume Knight#4c 4_M_KY_SOLD,{
mes "[Guillaume Knight]";
mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal.";
next;
@@ -664,7 +628,7 @@ bat_room,148,178,5 script Flavius Officer#3 4_M_KY_KNT,{
// Croix Knight - Flavius
// *********************************************************************
-bat_room,151,121,1 script Croix Knight#4 4_M_CRU_SOLD,{
+bat_room,151,121,1 script Croix Knight#4c 4_M_CRU_SOLD,{
mes "[Croix Knight]";
mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal.";
next;
@@ -1167,58 +1131,58 @@ OnTouch:
}
// Flavius bat_b02
-bat_room,57,81,0 duplicate(warp2bat_room) bat1 WARPNPC,1,1
-bat_room,57,90,0 duplicate(warp2bat_room) bat2 WARPNPC,1,1
+bat_room,57,81,0 duplicate(warp2bat_room) bat1#custom WARPNPC,1,1
+bat_room,57,90,0 duplicate(warp2bat_room) bat2#custom WARPNPC,1,1
// Free BG
-bat_room,57,220,0 duplicate(warp2bat_room) bat3 WARPNPC,1,1
-bat_room,57,211,0 duplicate(warp2bat_room) bat4 WARPNPC,1,1
+bat_room,57,220,0 duplicate(warp2bat_room) bat3#custom WARPNPC,1,1
+bat_room,57,211,0 duplicate(warp2bat_room) bat4#custom WARPNPC,1,1
// Tierra Valley bat_a02
-bat_room,85,81,0 duplicate(warp2bat_room) bat5 WARPNPC,1,1
-bat_room,85,90,0 duplicate(warp2bat_room) bat6 WARPNPC,1,1
+bat_room,85,81,0 duplicate(warp2bat_room) bat5#custom WARPNPC,1,1
+bat_room,85,90,0 duplicate(warp2bat_room) bat6#custom WARPNPC,1,1
// Tierra Valley bat_a01
-bat_room,85,220,0 duplicate(warp2bat_room) bat7 WARPNPC,1,1
-bat_room,85,211,0 duplicate(warp2bat_room) bat8 WARPNPC,1,1
+bat_room,85,220,0 duplicate(warp2bat_room) bat7#custom WARPNPC,1,1
+bat_room,85,211,0 duplicate(warp2bat_room) bat8#custom WARPNPC,1,1
// Free BG
-bat_room,113,81,0 duplicate(warp2bat_room) bat9 WARPNPC,1,1
-bat_room,113,90,0 duplicate(warp2bat_room) bat10 WARPNPC,1,1
+bat_room,113,81,0 duplicate(warp2bat_room) bat9#custom WARPNPC,1,1
+bat_room,113,90,0 duplicate(warp2bat_room) bat10#custom WARPNPC,1,1
// Free BG
-bat_room,113,220,0 duplicate(warp2bat_room) bat11 WARPNPC,1,1
-bat_room,113,211,0 duplicate(warp2bat_room) bat12 WARPNPC,1,1
+bat_room,113,220,0 duplicate(warp2bat_room) bat11#custom WARPNPC,1,1
+bat_room,113,211,0 duplicate(warp2bat_room) bat12#custom WARPNPC,1,1
// Free BG
-bat_room,141,81,0 duplicate(warp2bat_room) bat13 WARPNPC,1,1
-bat_room,141,90,0 duplicate(warp2bat_room) bat14 WARPNPC,1,1
+bat_room,141,81,0 duplicate(warp2bat_room) bat13#custom WARPNPC,1,1
+bat_room,141,90,0 duplicate(warp2bat_room) bat14#custom WARPNPC,1,1
// Free BG
-bat_room,141,220,0 duplicate(warp2bat_room) bat15 WARPNPC,1,1
-bat_room,141,211,0 duplicate(warp2bat_room) bat16 WARPNPC,1,1
+bat_room,141,220,0 duplicate(warp2bat_room) bat15#custom WARPNPC,1,1
+bat_room,141,211,0 duplicate(warp2bat_room) bat16#custom WARPNPC,1,1
// Free BG
-bat_room,169,81,0 duplicate(warp2bat_room) bat17 WARPNPC,1,1
-bat_room,169,90,0 duplicate(warp2bat_room) bat18 WARPNPC,1,1
+bat_room,169,81,0 duplicate(warp2bat_room) bat17#custom WARPNPC,1,1
+bat_room,169,90,0 duplicate(warp2bat_room) bat18#custom WARPNPC,1,1
// Free BG
-bat_room,169,220,0 duplicate(warp2bat_room) bat19 WARPNPC,1,1
-bat_room,169,211,0 duplicate(warp2bat_room) bat20 WARPNPC,1,1
+bat_room,169,220,0 duplicate(warp2bat_room) bat19#custom WARPNPC,1,1
+bat_room,169,211,0 duplicate(warp2bat_room) bat20#custom WARPNPC,1,1
// Free BG
-bat_room,197,81,0 duplicate(warp2bat_room) bat21 WARPNPC,1,1
-bat_room,197,90,0 duplicate(warp2bat_room) bat22 WARPNPC,1,1
+bat_room,197,81,0 duplicate(warp2bat_room) bat21#custom WARPNPC,1,1
+bat_room,197,90,0 duplicate(warp2bat_room) bat22#custom WARPNPC,1,1
// KvM bat_c03
-bat_room,197,220,0 duplicate(warp2bat_room) bat23 WARPNPC,1,1
-bat_room,197,211,0 duplicate(warp2bat_room) bat24 WARPNPC,1,1
+bat_room,197,220,0 duplicate(warp2bat_room) bat23#custom WARPNPC,1,1
+bat_room,197,211,0 duplicate(warp2bat_room) bat24#custom WARPNPC,1,1
// Free BG
-bat_room,225,81,0 duplicate(warp2bat_room) bat25 WARPNPC,1,1
-bat_room,225,90,0 duplicate(warp2bat_room) bat26 WARPNPC,1,1
+bat_room,225,81,0 duplicate(warp2bat_room) bat25#custom WARPNPC,1,1
+bat_room,225,90,0 duplicate(warp2bat_room) bat26#custom WARPNPC,1,1
// KvM bat_c02
-bat_room,225,220,0 duplicate(warp2bat_room) bat27 WARPNPC,1,1
-bat_room,225,211,0 duplicate(warp2bat_room) bat28 WARPNPC,1,1
+bat_room,225,220,0 duplicate(warp2bat_room) bat27#custom WARPNPC,1,1
+bat_room,225,211,0 duplicate(warp2bat_room) bat28#custom WARPNPC,1,1
// Flavius bat_b01
-bat_room,253,81,0 duplicate(warp2bat_room) bat29 WARPNPC,1,1
-bat_room,253,90,0 duplicate(warp2bat_room) bat30 WARPNPC,1,1
+bat_room,253,81,0 duplicate(warp2bat_room) bat29#custom WARPNPC,1,1
+bat_room,253,90,0 duplicate(warp2bat_room) bat30#custom WARPNPC,1,1
// KvM bat_c01
-bat_room,253,220,0 duplicate(warp2bat_room) bat31 WARPNPC,1,1
-bat_room,253,211,0 duplicate(warp2bat_room) bat32 WARPNPC,1,1
+bat_room,253,220,0 duplicate(warp2bat_room) bat31#custom WARPNPC,1,1
+bat_room,253,211,0 duplicate(warp2bat_room) bat32#custom WARPNPC,1,1
// Badges Repairman
// *********************************************************************
-bat_room,138,144,5 script Repairman#bg 4W_M_03,{
+bat_room,138,144,5 script Repairman#bgc 4W_M_03,{
callfunc "repairmain","Repairman";
end;
}
@@ -1226,7 +1190,7 @@ bat_room,138,144,5 script Repairman#bg 4W_M_03,{
// Badges Exchange
// *********************************************************************
-bat_room,160,150,3 script Erundek 4_M_MANAGER,{
+bat_room,160,150,3 script Erundek#custom 4_M_MANAGER,{
mes "[Erundek]";
mes "Welcome, mighty warrior.";
mes "What can I do for you today ?";
diff --git a/npc/custom/battleground/bg_kvm01.txt b/npc/custom/battleground/bg_kvm01.txt
index bb3ba3e06..cf2d8aa15 100644
--- a/npc/custom/battleground/bg_kvm01.txt
+++ b/npc/custom/battleground/bg_kvm01.txt
@@ -5,27 +5,27 @@
// Registration NPC's
// *********************************************************************
-bat_room,253,227,4 script Registration::KvM01R_Guillaume 4_M_KY_KNT,{ // KvM Guillaume
+bat_room,253,227,4 script Registration::KvM01R_Guillaume#custom 4_M_KY_KNT,{ // KvM Guillaume
end;
OnInit:
- waitingroom "Battle Station 5 Players",5,"KvM01_BG::OnGuillaumeJoin",1;
+ waitingroom "Battle Station 5 Players",5,"KvM01_BG#custom::OnGuillaumeJoin",1;
end;
OnEnterBG:
- set $@KvM01BG_id1, waitingroom2bg("bat_c01",53,128,"KvM01_BG::OnGuillaumeQuit","KvM01_BG::OnGuillaumeDie");
+ set $@KvM01BG_id1, waitingroom2bg("bat_c01",53,128,"KvM01_BG#custom::OnGuillaumeQuit","KvM01_BG#custom::OnGuillaumeDie");
end;
}
-bat_room,253,204,0 script Registration::KvM01R_Croix 4_M_CRU_KNT,{ // KvM Croix
+bat_room,253,204,0 script Registration::KvM01R_Croix#custom 4_M_CRU_KNT,{ // KvM Croix
end;
OnInit:
- waitingroom "Battle Station 5 Players",5,"KvM01_BG::OnCroixJoin",1;
+ waitingroom "Battle Station 5 Players",5,"KvM01_BG#custom::OnCroixJoin",1;
end;
OnEnterBG:
- set $@KvM01BG_id2, waitingroom2bg("bat_c01",146,55,"KvM01_BG::OnCroixQuit","KvM01_BG::OnCroixDie");
+ set $@KvM01BG_id2, waitingroom2bg("bat_c01",146,55,"KvM01_BG#custom::OnCroixQuit","KvM01_BG#custom::OnCroixDie");
end;
}
@@ -49,7 +49,7 @@ bat_c01,145,60,0 duplicate(#bat_c01a) #bat_c01f HIDDEN_NPC
// Battleground Engine
// *********************************************************************
-- script KvM01_BG FAKE_NPC,{
+- script KvM01_BG#custom FAKE_NPC,{
end;
OnInit:
@@ -65,7 +65,7 @@ OnInit:
OnGuillaumeJoin:
OnCroixJoin:
- donpcevent "KvM01_BG::OnReadyCheck";
+ donpcevent "KvM01_BG#custom::OnReadyCheck";
end;
OnGuillaumeQuit:
@@ -76,7 +76,7 @@ OnGuillaumeDie:
set .Guillaume_Count, .Guillaume_Count - 1;
set .Croix_Score, .Croix_Score + 1;
bg_updatescore "bat_c01",.Guillaume_Score,.Croix_Score;
- if( .Guillaume_Count < 1 ) donpcevent "KvM01_BG::OnCroixWin";
+ if( .Guillaume_Count < 1 ) donpcevent "KvM01_BG#custom::OnCroixWin";
}
end;
@@ -88,15 +88,15 @@ OnCroixDie:
set .Croix_Count, .Croix_Count - 1;
set .Guillaume_Score, .Guillaume_Score + 1;
bg_updatescore "bat_c01",.Guillaume_Score,.Croix_Score;
- if( .Croix_Count < 1 ) donpcevent "KvM01_BG::OnGuillaumeWin";
+ if( .Croix_Count < 1 ) donpcevent "KvM01_BG#custom::OnGuillaumeWin";
}
end;
OnReadyCheck:
if( $@KvM01BG )
end;
- set .@Guillaume, getwaitingroomstate(0,"KvM01R_Guillaume");
- set .@Croix, getwaitingroomstate(0,"KvM01R_Croix");
+ set .@Guillaume, getwaitingroomstate(0,"KvM01R_Guillaume#custom");
+ set .@Croix, getwaitingroomstate(0,"KvM01R_Croix#custom");
if( .@Guillaume < 5 || .@Croix < 5 )
{
@@ -111,9 +111,9 @@ OnReadyCheck:
}
set $@KvM01BG, 1; // Starting
- donpcevent "KvM01R_Croix::OnEnterBG";
- donpcevent "KvM01R_Guillaume::OnEnterBG";
- donpcevent "KvM01_BG::OnStart";
+ donpcevent "KvM01R_Croix#custom::OnEnterBG";
+ donpcevent "KvM01R_Guillaume#custom::OnEnterBG";
+ donpcevent "KvM01_BG#custom::OnStart";
end;
OnStart:
@@ -166,7 +166,7 @@ OnTimer30000:
mapannounce "bat_c01","There are not enough players to start the battle",1,0x696969;
stopnpctimer;
sleep 2000;
- donpcevent "KvM01_BG::OnStop";
+ donpcevent "KvM01_BG#custom::OnStop";
end;
}
@@ -187,9 +187,9 @@ OnTimer300000:
OnTimer330000:
if( .Croix_Count > .Guillaume_Count )
- donpcevent "KvM01_BG::OnCroixWin";
+ donpcevent "KvM01_BG#custom::OnCroixWin";
else if( .Croix_Count < .Guillaume_Count )
- donpcevent "KvM01_BG::OnGuillaumeWin";
+ donpcevent "KvM01_BG#custom::OnGuillaumeWin";
else
{ // Draw Game
set $@KvM01BG, 3;
@@ -198,7 +198,7 @@ OnTimer330000:
stopnpctimer;
sleep 2000;
mapannounce "bat_c01","The time is out! This is a Tie...",1,0x696969;
- donpcevent "KvM01_BG::OnStop";
+ donpcevent "KvM01_BG#custom::OnStop";
}
end;
@@ -209,7 +209,7 @@ OnGuillaumeWin:
stopnpctimer;
sleep 2000;
mapannounce "bat_c01","The Guillaume Army has won the Battle of Kreiger Von Midgard",1,0x0000FF;
- donpcevent "KvM01_BG::OnStop";
+ donpcevent "KvM01_BG#custom::OnStop";
end;
OnCroixWin:
@@ -219,7 +219,7 @@ OnCroixWin:
stopnpctimer;
sleep 2000;
mapannounce "bat_c01","The Croix Army has won the Battle of Kreiger Von Midgard",1,0xFF0000;
- donpcevent "KvM01_BG::OnStop";
+ donpcevent "KvM01_BG#custom::OnStop";
end;
OnStop:
@@ -230,12 +230,12 @@ OnStop:
// Warp Teams
bg_warp $@KvM01BG_id1,"bat_c01",53,128;
bg_warp $@KvM01BG_id2,"bat_c01",146,55;
- donpcevent "KvM01_BG_Out::OnBegin";
+ donpcevent "KvM01_BG_Out#custom::OnBegin";
end;
OnReset:
stopnpctimer;
- stopnpctimer "KvM01_BG_Out";
+ stopnpctimer "KvM01_BG_Out#custom";
set .Croix_Count, 0;
set .Guillaume_Count, 0;
set .Croix_Score, 0;
@@ -254,11 +254,11 @@ OnReset:
bg_updatescore "bat_c01",0,0;
sleep 2000;
set $@KvM01BG, 0;
- donpcevent "KvM01_BG::OnReadyCheck"; // Maybe a game is ready to start
+ donpcevent "KvM01_BG#custom::OnReadyCheck"; // Maybe a game is ready to start
end;
}
-- script KvM01_BG_Out FAKE_NPC,{
+- script KvM01_BG_Out#custom FAKE_NPC,{
end;
OnBegin:
@@ -275,7 +275,7 @@ OnTimer50000:
mapannounce "bat_c01","Battle of Kreiger Von Midgard will close in 10 seconds!",1,0x696969;
end;
OnTimer60000:
- donpcevent "KvM01_BG::OnReset";
+ donpcevent "KvM01_BG#custom::OnReset";
end;
}
diff --git a/npc/custom/battleground/bg_kvm02.txt b/npc/custom/battleground/bg_kvm02.txt
index a6cadb3af..9ffc508a6 100644
--- a/npc/custom/battleground/bg_kvm02.txt
+++ b/npc/custom/battleground/bg_kvm02.txt
@@ -5,27 +5,27 @@
// Registration NPC's
// *********************************************************************
-bat_room,225,227,4 script Registration::KvM02R_Guillaume 4_M_KY_KNT,{ // KvM Guillaume
+bat_room,225,227,4 script Registration::KvM02R_Guillaume#custom 4_M_KY_KNT,{ // KvM Guillaume
end;
OnInit:
- waitingroom "Battle Station 5 Players",5,"KvM02_BG::OnGuillaumeJoin",1;
+ waitingroom "Battle Station 5 Players",5,"KvM02_BG#custom::OnGuillaumeJoin",1;
end;
OnEnterBG:
- set $@KvM02BG_id1, waitingroom2bg("bat_c02",53,128,"KvM02_BG::OnGuillaumeQuit","KvM02_BG::OnGuillaumeDie");
+ set $@KvM02BG_id1, waitingroom2bg("bat_c02",53,128,"KvM02_BG#custom::OnGuillaumeQuit","KvM02_BG#custom::OnGuillaumeDie");
end;
}
-bat_room,225,204,0 script Registration::KvM02R_Croix 4_M_CRU_KNT,{ // KvM Croix
+bat_room,225,204,0 script Registration::KvM02R_Croix#custom 4_M_CRU_KNT,{ // KvM Croix
end;
OnInit:
- waitingroom "Battle Station 5 Players",5,"KvM02_BG::OnCroixJoin",1;
+ waitingroom "Battle Station 5 Players",5,"KvM02_BG#custom::OnCroixJoin",1;
end;
OnEnterBG:
- set $@KvM02BG_id2, waitingroom2bg("bat_c02",146,55,"KvM02_BG::OnCroixQuit","KvM02_BG::OnCroixDie");
+ set $@KvM02BG_id2, waitingroom2bg("bat_c02",146,55,"KvM02_BG#custom::OnCroixQuit","KvM02_BG#custom::OnCroixDie");
end;
}
@@ -49,7 +49,7 @@ bat_c02,145,60,0 duplicate(#bat_c02a) #bat_c02f HIDDEN_NPC
// Battleground Engine
// *********************************************************************
-- script KvM02_BG FAKE_NPC,{
+- script KvM02_BG#custom FAKE_NPC,{
end;
OnInit:
@@ -65,7 +65,7 @@ OnInit:
OnGuillaumeJoin:
OnCroixJoin:
- donpcevent "KvM02_BG::OnReadyCheck";
+ donpcevent "KvM02_BG#custom::OnReadyCheck";
end;
OnGuillaumeQuit:
@@ -76,7 +76,7 @@ OnGuillaumeDie:
set .Guillaume_Count, .Guillaume_Count - 1;
set .Croix_Score, .Croix_Score + 1;
bg_updatescore "bat_c02",.Guillaume_Score,.Croix_Score;
- if( .Guillaume_Count < 1 ) donpcevent "KvM02_BG::OnCroixWin";
+ if( .Guillaume_Count < 1 ) donpcevent "KvM02_BG#custom::OnCroixWin";
}
end;
@@ -88,15 +88,15 @@ OnCroixDie:
set .Croix_Count, .Croix_Count - 1;
set .Guillaume_Score, .Guillaume_Score + 1;
bg_updatescore "bat_c02",.Guillaume_Score,.Croix_Score;
- if( .Croix_Count < 1 ) donpcevent "KvM02_BG::OnGuillaumeWin";
+ if( .Croix_Count < 1 ) donpcevent "KvM02_BG#custom::OnGuillaumeWin";
}
end;
OnReadyCheck:
if( $@KvM02BG )
end;
- set .@Guillaume, getwaitingroomstate(0,"KvM02R_Guillaume");
- set .@Croix, getwaitingroomstate(0,"KvM02R_Croix");
+ set .@Guillaume, getwaitingroomstate(0,"KvM02R_Guillaume#custom");
+ set .@Croix, getwaitingroomstate(0,"KvM02R_Croix#custom");
if( .@Guillaume < 5 || .@Croix < 5 )
{
@@ -111,9 +111,9 @@ OnReadyCheck:
}
set $@KvM02BG, 1; // Starting
- donpcevent "KvM02R_Croix::OnEnterBG";
- donpcevent "KvM02R_Guillaume::OnEnterBG";
- donpcevent "KvM02_BG::OnStart";
+ donpcevent "KvM02R_Croix#custom::OnEnterBG";
+ donpcevent "KvM02R_Guillaume#custom::OnEnterBG";
+ donpcevent "KvM02_BG#custom::OnStart";
end;
OnStart:
@@ -166,7 +166,7 @@ OnTimer30000:
mapannounce "bat_c02","There are not enough players to start the battle",1,0x808080;
stopnpctimer;
sleep 2000;
- donpcevent "KvM02_BG::OnStop";
+ donpcevent "KvM02_BG#custom::OnStop";
end;
}
@@ -187,9 +187,9 @@ OnTimer300000:
OnTimer330000:
if( .Croix_Count > .Guillaume_Count )
- donpcevent "KvM02_BG::OnCroixWin";
+ donpcevent "KvM02_BG#custom::OnCroixWin";
else if( .Croix_Count < .Guillaume_Count )
- donpcevent "KvM02_BG::OnGuillaumeWin";
+ donpcevent "KvM02_BG#custom::OnGuillaumeWin";
else
{ // Draw Game
set $@KvM02BG, 3;
@@ -198,7 +198,7 @@ OnTimer330000:
stopnpctimer;
sleep 2000;
mapannounce "bat_c02","The time is out! This is a Tie...",1,0x808080;
- donpcevent "KvM02_BG::OnStop";
+ donpcevent "KvM02_BG#custom::OnStop";
}
end;
@@ -209,7 +209,7 @@ OnGuillaumeWin:
stopnpctimer;
sleep 2000;
mapannounce "bat_c02","The Guillaume Army has won the Battle of Kreiger Von Midgard",1,0x0000FF;
- donpcevent "KvM02_BG::OnStop";
+ donpcevent "KvM02_BG#custom::OnStop";
end;
OnCroixWin:
@@ -219,7 +219,7 @@ OnCroixWin:
stopnpctimer;
sleep 2000;
mapannounce "bat_c02","The Croix Army has won the Battle of Kreiger Von Midgard",1,0xFF0000;
- donpcevent "KvM02_BG::OnStop";
+ donpcevent "KvM02_BG#custom::OnStop";
end;
OnStop:
@@ -230,12 +230,12 @@ OnStop:
// Warp Teams
bg_warp $@KvM02BG_id1,"bat_c02",53,128;
bg_warp $@KvM02BG_id2,"bat_c02",146,55;
- donpcevent "KvM02_BG_Out::OnBegin";
+ donpcevent "KvM02_BG_Out#custom::OnBegin";
end;
OnReset:
stopnpctimer;
- stopnpctimer "KvM02_BG_Out";
+ stopnpctimer "KvM02_BG_Out#custom";
set .Croix_Count, 0;
set .Guillaume_Count, 0;
set .Croix_Score, 0;
@@ -254,11 +254,11 @@ OnReset:
bg_updatescore "bat_c02",0,0;
sleep 2000;
set $@KvM02BG, 0;
- donpcevent "KvM02_BG::OnReadyCheck"; // Maybe a game is ready to start
+ donpcevent "KvM02_BG#custom::OnReadyCheck"; // Maybe a game is ready to start
end;
}
-- script KvM02_BG_Out FAKE_NPC,{
+- script KvM02_BG_Out#custom FAKE_NPC,{
end;
OnBegin:
@@ -275,7 +275,7 @@ OnTimer50000:
mapannounce "bat_c02","Battle of Kreiger Von Midgard will close in 10 seconds!",1,0x808080;
end;
OnTimer60000:
- donpcevent "KvM02_BG::OnReset";
+ donpcevent "KvM02_BG#custom::OnReset";
end;
}
diff --git a/npc/custom/battleground/bg_kvm03.txt b/npc/custom/battleground/bg_kvm03.txt
index 8f255c90f..14d7c03a3 100644
--- a/npc/custom/battleground/bg_kvm03.txt
+++ b/npc/custom/battleground/bg_kvm03.txt
@@ -5,27 +5,27 @@
// Registration NPC's
// *********************************************************************
-bat_room,197,227,4 script Registration::KvM03R_Guillaume 4_M_KY_KNT,{ // KvM Guillaume
+bat_room,197,227,4 script Registration::KvM03R_Guillaume#custom 4_M_KY_KNT,{ // KvM Guillaume
end;
OnInit:
- waitingroom "Battle Station 5 Players",5,"KvM03_BG::OnGuillaumeJoin",1;
+ waitingroom "Battle Station 5 Players",5,"KvM03_BG#custom::OnGuillaumeJoin",1;
end;
OnEnterBG:
- set $@KvM03BG_id1, waitingroom2bg("bat_c03",53,128,"KvM03_BG::OnGuillaumeQuit","KvM03_BG::OnGuillaumeDie");
+ set $@KvM03BG_id1, waitingroom2bg("bat_c03",53,128,"KvM03_BG#custom::OnGuillaumeQuit","KvM03_BG#custom::OnGuillaumeDie");
end;
}
-bat_room,197,204,0 script Registration::KvM03R_Croix 4_M_CRU_KNT,{ // KvM Croix
+bat_room,197,204,0 script Registration::KvM03R_Croix#custom 4_M_CRU_KNT,{ // KvM Croix
end;
OnInit:
- waitingroom "Battle Station 5 Players",5,"KvM03_BG::OnCroixJoin",1;
+ waitingroom "Battle Station 5 Players",5,"KvM03_BG#custom::OnCroixJoin",1;
end;
OnEnterBG:
- set $@KvM03BG_id2, waitingroom2bg("bat_c03",146,55,"KvM03_BG::OnCroixQuit","KvM03_BG::OnCroixDie");
+ set $@KvM03BG_id2, waitingroom2bg("bat_c03",146,55,"KvM03_BG#custom::OnCroixQuit","KvM03_BG#custom::OnCroixDie");
end;
}
@@ -49,7 +49,7 @@ bat_c03,145,60,0 duplicate(#bat_c03a) #bat_c03f HIDDEN_NPC
// Battleground Engine
// *********************************************************************
-- script KvM03_BG FAKE_NPC,{
+- script KvM03_BG#custom FAKE_NPC,{
end;
OnInit:
@@ -65,7 +65,7 @@ OnInit:
OnGuillaumeJoin:
OnCroixJoin:
- donpcevent "KvM03_BG::OnReadyCheck";
+ donpcevent "KvM03_BG#custom::OnReadyCheck";
end;
OnGuillaumeQuit:
@@ -76,7 +76,7 @@ OnGuillaumeDie:
set .Guillaume_Count, .Guillaume_Count - 1;
set .Croix_Score, .Croix_Score + 1;
bg_updatescore "bat_c03",.Guillaume_Score,.Croix_Score;
- if( .Guillaume_Count < 1 ) donpcevent "KvM03_BG::OnCroixWin";
+ if( .Guillaume_Count < 1 ) donpcevent "KvM03_BG#custom::OnCroixWin";
}
end;
@@ -88,15 +88,15 @@ OnCroixDie:
set .Croix_Count, .Croix_Count - 1;
set .Guillaume_Score, .Guillaume_Score + 1;
bg_updatescore "bat_c03",.Guillaume_Score,.Croix_Score;
- if( .Croix_Count < 1 ) donpcevent "KvM03_BG::OnGuillaumeWin";
+ if( .Croix_Count < 1 ) donpcevent "KvM03_BG#custom::OnGuillaumeWin";
}
end;
OnReadyCheck:
if( $@KvM03BG )
end;
- set .@Guillaume, getwaitingroomstate(0,"KvM03R_Guillaume");
- set .@Croix, getwaitingroomstate(0,"KvM03R_Croix");
+ set .@Guillaume, getwaitingroomstate(0,"KvM03R_Guillaume#custom");
+ set .@Croix, getwaitingroomstate(0,"KvM03R_Croix#custom");
if( .@Guillaume < 5 || .@Croix < 5 )
{
@@ -111,9 +111,9 @@ OnReadyCheck:
}
set $@KvM03BG, 1; // Starting
- donpcevent "KvM03R_Croix::OnEnterBG";
- donpcevent "KvM03R_Guillaume::OnEnterBG";
- donpcevent "KvM03_BG::OnStart";
+ donpcevent "KvM03R_Croix#custom::OnEnterBG";
+ donpcevent "KvM03R_Guillaume#custom::OnEnterBG";
+ donpcevent "KvM03_BG#custom::OnStart";
end;
OnStart:
@@ -166,7 +166,7 @@ OnTimer30000:
mapannounce "bat_c03","There are not enough players to start the battle",1,0xC0C0C0;
stopnpctimer;
sleep 2000;
- donpcevent "KvM03_BG::OnStop";
+ donpcevent "KvM03_BG#custom::OnStop";
end;
}
@@ -187,9 +187,9 @@ OnTimer300000:
OnTimer330000:
if( .Croix_Count > .Guillaume_Count )
- donpcevent "KvM03_BG::OnCroixWin";
+ donpcevent "KvM03_BG#custom::OnCroixWin";
else if( .Croix_Count < .Guillaume_Count )
- donpcevent "KvM03_BG::OnGuillaumeWin";
+ donpcevent "KvM03_BG#custom::OnGuillaumeWin";
else
{ // Draw Game
set $@KvM03BG, 3;
@@ -198,7 +198,7 @@ OnTimer330000:
stopnpctimer;
sleep 2000;
mapannounce "bat_c03","The time is out! This is a Tie...",1,0xC0C0C0;
- donpcevent "KvM03_BG::OnStop";
+ donpcevent "KvM03_BG#custom::OnStop";
}
end;
@@ -209,7 +209,7 @@ OnGuillaumeWin:
stopnpctimer;
sleep 2000;
mapannounce "bat_c03","The Guillaume Army has won the Battle of Kreiger Von Midgard",1,0x0000FF;
- donpcevent "KvM03_BG::OnStop";
+ donpcevent "KvM03_BG#custom::OnStop";
end;
OnCroixWin:
@@ -219,7 +219,7 @@ OnCroixWin:
stopnpctimer;
sleep 2000;
mapannounce "bat_c03","The Croix Army has won the Battle of Kreiger Von Midgard",1,0xFF0000;
- donpcevent "KvM03_BG::OnStop";
+ donpcevent "KvM03_BG#custom::OnStop";
end;
OnStop:
@@ -230,12 +230,12 @@ OnStop:
// Warp Teams
bg_warp $@KvM03BG_id1,"bat_c03",53,128;
bg_warp $@KvM03BG_id2,"bat_c03",146,55;
- donpcevent "KvM03_BG_Out::OnBegin";
+ donpcevent "KvM03_BG_Out#custom::OnBegin";
end;
OnReset:
stopnpctimer;
- stopnpctimer "KvM03_BG_Out";
+ stopnpctimer "KvM03_BG_Out#custom";
set .Croix_Count, 0;
set .Guillaume_Count, 0;
set .Croix_Score, 0;
@@ -254,11 +254,11 @@ OnReset:
bg_updatescore "bat_c03",0,0;
sleep 2000;
set $@KvM03BG, 0;
- donpcevent "KvM03_BG::OnReadyCheck"; // Maybe a game is ready to start
+ donpcevent "KvM03_BG#custom::OnReadyCheck"; // Maybe a game is ready to start
end;
}
-- script KvM03_BG_Out FAKE_NPC,{
+- script KvM03_BG_Out#custom FAKE_NPC,{
end;
OnBegin:
@@ -275,7 +275,7 @@ OnTimer50000:
mapannounce "bat_c03","Battle of Kreiger Von Midgard will close in 10 seconds!",1,0xC0C0C0;
end;
OnTimer60000:
- donpcevent "KvM03_BG::OnReset";
+ donpcevent "KvM03_BG#custom::OnReset";
end;
}
diff --git a/npc/custom/itembind.txt b/npc/custom/itembind.txt
index e104d89b1..f0e128453 100644
--- a/npc/custom/itembind.txt
+++ b/npc/custom/itembind.txt
@@ -25,7 +25,7 @@ prontera,144,174,4 script Bound Items 4_M_JP_MID,{
}
mes "What kind of bind?";
.@boundtype = 1 << (select("Account", "Guild", "Character")-1);
- if(.@boundtype == 2 && (!getcharid(CHAR_ID_GUILD) || getguildinfo(GUILDINFO_MASTER_NAME, getcharid(CHAR_ID_GUILD)) != strcharinfo(PC_NAME))) {
+ if(.@boundtype == IBT_GUILD && (!getcharid(CHAR_ID_GUILD) || getguildinfo(GUILDINFO_MASTER_NAME, getcharid(CHAR_ID_GUILD)) != strcharinfo(PC_NAME))) {
mes "In order for me to bind an item to a guild you must be the master of one.";
close;
}
@@ -68,7 +68,7 @@ prontera,144,174,4 script Bound Items 4_M_JP_MID,{
mes "You don't have any bound items in your inventory. Not much I can do here.";
close;
}
- countbound(2);
+ countbound(IBT_GUILD);
if(.unbindprice) {
mes "Unbinding an item has a fee of ^0000FF"+.unbindprice+"^000000 zeny.";
if(Zeny < .unbindprice) {
@@ -127,8 +127,8 @@ OnInit:
.logbinds = 1;
//Other stuff
- .boundtypes$[1] = "account";
- .boundtypes$[2] = "guild";
- .boundtypes$[4] = "character";
+ .boundtypes$[IBT_ACCOUNT] = "account";
+ .boundtypes$[IBT_GUILD] = "guild";
+ .boundtypes$[IBT_CHARACTER] = "character";
end;
}
diff --git a/npc/dev/test.txt b/npc/dev/test.txt
index a9e78489a..291671913 100644
--- a/npc/dev/test.txt
+++ b/npc/dev/test.txt
@@ -116,12 +116,55 @@ function script F_TestVarOfAnotherNPC {
end;
}
+- script export test FAKE_NPC,{
+
+ function OnInit {
+ // functions labels should not be able to be called as events
+ // if a regression occurs, this function could end up being called when
+ // Hercules processes OnInit event calls (issue #2137)
+
+ // NOTE: If script_config.functions_as_events is enabled (defaults: off)
+ // and this this function is marked as public, it will trigger the
+ // warning and fail the unit test regardless.
+
+ $@something_bad_happened[0] = true;
+ end;
+ }
+
+ private function Private {
+ // function explicitly marked as private
+ return;
+ }
+
+ public function Public {
+ // this is for testing public local functions and ownership of the
+ // script
+
+ return getnpcid();
+ }
+
+ public function RefTest {
+ // this is to check if references are passed around properly
+
+ return set(getarg(0), 1337);
+ }
+}
+
function script HerculesSelfTestHelper {
if (.once > 0)
return .errors;
.once = 1;
.errors = 0;
+ // number literals
+ callsub(OnCheck, "decimal number literal", 255, 255);
+ callsub(OnCheck, "hexadecimal number literal", 0xFF, 255);
+ callsub(OnCheck, "octal number literal", 0o377, 255);
+ callsub(OnCheck, "binary number literal", 0b11111111, 255);
+ callsub(OnCheck, "binary literal bitwise OR", 0b11110000 | 0xF, 255);
+ callsub(OnCheck, "decimal literal with separator", 2_5_5, 255);
+ callsub(OnCheck, "binary literal with separator", 0b_1111_1111, 255);
+
// Callsub (basic)
callsub(OnCheck, "Callsub", 1, 1);
callsub(OnCheck, "Callsub (getarg default values)", 1);
@@ -785,6 +828,12 @@ function script HerculesSelfTestHelper {
callsub(OnCheck, "data_to_string (string variable)", data_to_string(.@x$), ".@x$");
callsub(OnCheck, "data_to_string (integer variable)", data_to_string(.@x), ".@x");
+ "export test"::RefTest(.@refTest = 69);
+ callsub(OnCheck, "function as event (regression)", $@something_bad_happened[0], false);
+ callsub(OnCheck, "public local function ownership", "export test"::Public(), getnpcid());
+ callsub(OnCheck, "public local function var reference test", .@refTest, 1337);
+ callsub(OnCheck, "programatic public local call", callfunctionofnpc("export test", "RefTest", .@refTest = 1), 1337);
+
if (.errors) {
consolemes(CONSOLEMES_DEBUG, "Script engine self-test [ \033[0;31mFAILED\033[0m ]");
consolemes(CONSOLEMES_DEBUG, "**** The test was completed with " + .errors + " errors. ****");
diff --git a/npc/jobs/2-1/wizard.txt b/npc/jobs/2-1/wizard.txt
index 3814e1880..3c779f188 100644
--- a/npc/jobs/2-1/wizard.txt
+++ b/npc/jobs/2-1/wizard.txt
@@ -1527,7 +1527,7 @@ OnTimer183000:
end;
OnTimer184000:
- enablenpc "Room of Fire#Failed";
+ areawarp("job_wiz", 30, 83, 62, 115, "geffen", 120, 110);
end;
OnTimer185000:
@@ -1535,8 +1535,6 @@ OnTimer185000:
end;
OnTimer186000:
- disablenpc "Room of Fire#Failed";
- donpcevent "Room of Fire::OnDisable";
donpcevent "Arena Assistant::OnStart";
end;
}
@@ -1604,7 +1602,7 @@ OnTimer120000:
end;
OnTimer121000:
- enablenpc "Room of Fire#Failed";
+ areawarp("job_wiz", 30, 83, 62, 115, "geffen", 120, 110);
end;
OnTimer122000:
@@ -1612,21 +1610,10 @@ OnTimer122000:
end;
OnTimer123000:
- disablenpc "Room of Fire#Failed";
donpcevent "Room of Fire#Door::OnDisable";
donpcevent "Arena Assistant::OnStart";
}
-job_wiz,46,99,0 script Room of Fire#Failed FAKE_NPC,16,16,{
-OnInit:
- disablenpc "Room of Fire#Failed";
- end;
-
-OnTouch:
- warp "geffen",120,110;
- end;
-}
-
job_wiz,1,7,1 script Test Helper#wiz 1_F_01,{
end;
diff --git a/npc/mapflag/night.txt b/npc/mapflag/night.txt
index 3e421bf13..444189412 100644
--- a/npc/mapflag/night.txt
+++ b/npc/mapflag/night.txt
@@ -263,8 +263,8 @@ ve_fild06 mapflag nightenabled
ve_fild07 mapflag nightenabled
//Episode 12 ====================
-poring_c01 mapflag nightenabled
-poring_c02 mapflag nightenabled
+//poring_c01 mapflag nightenabled
+//poring_c02 mapflag nightenabled
nameless_i mapflag nightenabled
nameless_n mapflag nightenabled
poring_w01 mapflag nightenabled
diff --git a/npc/mapflag/nobranch.txt b/npc/mapflag/nobranch.txt
index 4007c8203..7e4f3b49d 100644
--- a/npc/mapflag/nobranch.txt
+++ b/npc/mapflag/nobranch.txt
@@ -153,8 +153,8 @@ que_god01 mapflag nobranch
que_god02 mapflag nobranch
que_bingo mapflag nobranch
que_hugel mapflag nobranch
-poring_c01 mapflag nobranch
-poring_c02 mapflag nobranch
+//poring_c01 mapflag nobranch
+//poring_c02 mapflag nobranch
kh_mansion mapflag nobranch
kh_rossi mapflag nobranch
kh_school mapflag nobranch
diff --git a/npc/mapflag/nomemo.txt b/npc/mapflag/nomemo.txt
index 548f1563e..d4f7140fe 100644
--- a/npc/mapflag/nomemo.txt
+++ b/npc/mapflag/nomemo.txt
@@ -259,8 +259,8 @@ que_hugel mapflag nomemo
que_rachel mapflag nomemo
que_san04 mapflag nomemo
que_thor mapflag nomemo
-poring_c01 mapflag nomemo
-poring_c02 mapflag nomemo
+//poring_c01 mapflag nomemo
+//poring_c02 mapflag nomemo
// Dungeons =================
alde_dun01 mapflag nomemo
alde_dun02 mapflag nomemo
diff --git a/npc/mapflag/nopet.txt b/npc/mapflag/nopet.txt
new file mode 100644
index 000000000..82f9e36eb
--- /dev/null
+++ b/npc/mapflag/nopet.txt
@@ -0,0 +1,78 @@
+//================= Hercules Script =======================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2012-2020 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/>.
+//=========================================================================
+//= Mapflag: Disable pet in map.
+//================= Current Version =======================================
+//= 1.0
+//================= Description ===========================================
+//= Players can't hatch pet in the map, existing pet will return to egg.
+//=========================================================================
+
+// GvG Arenas =============
+// guild_vs1 mapflag nopet
+// guild_vs2 mapflag nopet
+// guild_vs3 mapflag nopet
+// guild_vs4 mapflag nopet
+// guild_vs5 mapflag nopet
+
+// Guild Castles ==========
+// aldeg_cas01 mapflag nopet
+// aldeg_cas02 mapflag nopet
+// aldeg_cas03 mapflag nopet
+// aldeg_cas04 mapflag nopet
+// aldeg_cas05 mapflag nopet
+// gefg_cas01 mapflag nopet
+// gefg_cas02 mapflag nopet
+// gefg_cas03 mapflag nopet
+// gefg_cas04 mapflag nopet
+// gefg_cas05 mapflag nopet
+// payg_cas01 mapflag nopet
+// payg_cas02 mapflag nopet
+// payg_cas03 mapflag nopet
+// payg_cas04 mapflag nopet
+// payg_cas05 mapflag nopet
+// prtg_cas01 mapflag nopet
+// prtg_cas02 mapflag nopet
+// prtg_cas03 mapflag nopet
+// prtg_cas04 mapflag nopet
+// prtg_cas05 mapflag nopet
+// schg_cas01 mapflag nopet
+// schg_cas02 mapflag nopet
+// schg_cas03 mapflag nopet
+// schg_cas04 mapflag nopet
+// schg_cas05 mapflag nopet
+// arug_cas01 mapflag nopet
+// arug_cas02 mapflag nopet
+// arug_cas03 mapflag nopet
+// arug_cas04 mapflag nopet
+// arug_cas05 mapflag nopet
+
+// Novice Guild Castles ===
+// n_castle mapflag nopet
+// nguild_alde mapflag nopet
+// nguild_gef mapflag nopet
+// nguild_pay mapflag nopet
+// nguild_prt mapflag nopet
diff --git a/npc/mapflag/noteleport.txt b/npc/mapflag/noteleport.txt
index 537781075..9f41e4342 100644
--- a/npc/mapflag/noteleport.txt
+++ b/npc/mapflag/noteleport.txt
@@ -186,8 +186,8 @@ kh_kiehl01 mapflag noteleport
kh_kiehl02 mapflag noteleport
que_rachel mapflag noteleport
que_thor mapflag noteleport
-poring_c01 mapflag noteleport
-poring_c02 mapflag noteleport
+//poring_c01 mapflag noteleport
+//poring_c02 mapflag noteleport
que_job01 mapflag noteleport
que_job02 mapflag noteleport
que_job03 mapflag noteleport
diff --git a/npc/quests/quests_amatsu.txt b/npc/quests/quests_amatsu.txt
index 3c55f91a3..504ab6032 100644
--- a/npc/quests/quests_amatsu.txt
+++ b/npc/quests/quests_amatsu.txt
@@ -399,11 +399,14 @@ OnStartArena:
enablenpc "Grandma#ama1";
enablenpc "Grandpa#ama";
warpwaitingpc "ama_test",50,83;
- donpcevent "Timer#ama::OnEnable";
+ enablenpc("Timer#ama");
+ initnpctimer("Timer#ama");
disablewaitingroomevent "Assistant#ama";
end;
OnReset:
+ stopnpctimer("Timer#ama");
+ disablenpc("Timer#ama");
enablewaitingroomevent "Assistant#ama";
end;
}
@@ -620,7 +623,6 @@ ama_test,50,100,3 script Coach#ama 4_M_JPN2,15,15,{
mes "Don't lose your high self-esteem";
mes "in the future. Farewell.";
close2;
- donpcevent "Timer#ama::OnDisable";
warp "amatsu",223,230;
disablenpc "Coach#ama";
donpcevent "Assistant#ama::OnReset";
@@ -665,7 +667,6 @@ ama_test,50,100,3 script Coach#ama 4_M_JPN2,15,15,{
setquest 8128;
warp "amatsu",223,230;
disablenpc "Coach#ama";
- donpcevent "Timer#ama::OnDisable";
donpcevent "Assistant#ama::OnReset";
end;
}
@@ -754,7 +755,6 @@ OnTouch:
changequest 8129,8130;
warp "amatsu",223,230;
disablenpc "Coach#after";
- donpcevent "Timer#ama::OnDisable";
donpcevent "Assistant#ama::OnReset";
end;
}
@@ -764,14 +764,6 @@ OnInit:
disablenpc "Timer#ama";
end;
-OnEnable:
- enablenpc "Timer#ama";
- initnpctimer;
- end;
-OnDisable:
- stopnpctimer;
- end;
-
OnTimer1000:
mapannounce "ama_test"," The Timer has been activated. You have 6 minutes. Annihilate the monsters in time! ",bc_map;
end;
@@ -788,26 +780,11 @@ OnTimer361000:
end;
OnTimer361500:
- enablenpc "backwarp#ama";
- end;
-
-OnTimer362000:
- disablenpc "backwarp#ama";
+ areawarp("ama_test", 25, 75, 80, 130, "amatsu", 115, 95);
end;
OnTimer362500:
donpcevent "Assistant#ama::OnReset";
- donpcevent "Timer#ama::OnDisable";
- end;
-}
-
-ama_test,50,100,0 script backwarp#ama FAKE_NPC,25,25,{
-OnInit:
- disablenpc "backwarp#ama";
- end;
-
-OnTouch:
- warp "amatsu",115,95;
end;
}
diff --git a/npc/quests/quests_juperos.txt b/npc/quests/quests_juperos.txt
index d120bfc27..f9120796d 100644
--- a/npc/quests/quests_juperos.txt
+++ b/npc/quests/quests_juperos.txt
@@ -4914,7 +4914,7 @@ OnTouch:
case 1:
specialeffect(EF_LIGHTSPHERE, AREA, playerattached());
close2;
- stopnpctimer;
+ stopnpctimer(1);
warp "juperos_02",130,142;
break;
case 2:
@@ -4922,7 +4922,7 @@ OnTouch:
mes "Not now!";
mes "I can't leave yet!";
close2;
- stopnpctimer;
+ stopnpctimer(1);
warp "jupe_gate",50,168;
break;
}
@@ -4930,23 +4930,7 @@ OnTouch:
OnTimer10000:
warp "juperos_02",128,278;
- enablenpc "gate#start#2";
- disablenpc "gate#start";
- end;
-}
-
-jupe_gate,50,171,0 script gate#start#2 FAKE_NPC,2,2,{
-OnInit:
- disablenpc "gate#start#2";
- end;
-
-OnTouch:
- warp "juperos_02",130,142;
- end;
-
-OnTimer2000:
- enablenpc "gate#start";
- disablenpc "gate#start#2";
+ areawarp("jupe_gate", 48, 169, 52, 173, "juperos_02", 130, 142);
end;
}
diff --git a/npc/quests/quests_lighthalzen.txt b/npc/quests/quests_lighthalzen.txt
index fe8abf473..0d83efd3c 100644
--- a/npc/quests/quests_lighthalzen.txt
+++ b/npc/quests/quests_lighthalzen.txt
@@ -9774,27 +9774,17 @@ OnTouch:
}
lhz_in01,177,44,0 script Timer_Sneak FAKE_NPC,8,12,{
-
-OnTouch:
- warp "lhz_in01",191,49;
- end;
-
-OnInit:
- disablenpc "Timer_Sneak";
- end;
-
OnEnter:
stopnpctimer;
initnpctimer;
end;
OnTimer180000:
- enablenpc "Timer_Sneak";
+ areawarp("lhz_in01", 169, 32, 185, 56, "lhz_in01", 191, 49);
end;
OnTimer190000:
stopnpctimer;
- disablenpc "Timer_Sneak";
end;
}
diff --git a/npc/quests/quests_moscovia.txt b/npc/quests/quests_moscovia.txt
index 3f44a9b0a..e0678cec9 100644
--- a/npc/quests/quests_moscovia.txt
+++ b/npc/quests/quests_moscovia.txt
@@ -1134,7 +1134,7 @@ mosk_ship,101,111,4 script rudder#ship HIDDEN_NPC,{
mes "Hey! Listen to what I am saying.";
mes "How come you go there without my";
mes "permission...";
- next;
+ close;
}
mes "[Mr. Ibanoff]";
mes "What? How did you get on";
@@ -1171,7 +1171,10 @@ S_Rud1:
mes "ever encountered! Be careful! We";
mes "must repulse these monsters!";
++$@mos1_edq;
- donpcevent "Baehideun3#ship::OnEnable";
+ if (mos_whale_edq >= 241)
+ donpcevent "Baehideun4#ship::OnEnable";
+ else
+ donpcevent "Baehideun3#ship::OnEnable";
}
mos_whale_edq = (getarg(1) == 2)?((mos_whale_edq >= 241)?((.@r != 3)?26:25):((.@r != 3)?10:11)):mos_whale_edq + 1;
close;
diff --git a/npc/quests/seals/god_weapon_creation.txt b/npc/quests/seals/god_weapon_creation.txt
index 8009bd36d..17979e51a 100644
--- a/npc/quests/seals/god_weapon_creation.txt
+++ b/npc/quests/seals/god_weapon_creation.txt
@@ -807,41 +807,15 @@ OnTimer610000:
end;
OnTimer612000:
- donpcevent "god_wep_warpmaster::OnEnable";
+ areawarp("que_god01", 130, 55, 190, 135, "prontera", 156, 324);
end;
OnTimer615000:
- donpcevent "god_wep_warpmaster::OnDisable";
donpcevent "#god_hopewarp1::OnReset";
stopnpctimer;
end;
}
-que_god01,169,82,0 script god_wep_warpmaster FAKE_NPC,{
-OnEnable:
- for(.@i = 1; .@i<=6; ++.@i)
- enablenpc "god_failwarp#"+.@i;
- end;
-OnDisable:
- for(.@i = 1; .@i<=6; ++.@i)
- disablenpc "god_failwarp#"+.@i;
- end;
-}
-
-que_god01,154,67,0 script god_failwarp#1 FAKE_NPC,4,7,{
-OnInit:
- disablenpc strnpcinfo(NPC_NAME);
- end;
-OnTouch:
- warp "prontera",156,324;
- end;
-}
-que_god01,154,82,0 duplicate(god_failwarp#1) god_failwarp#2 FAKE_NPC,4,7
-que_god01,145,99,0 duplicate(god_failwarp#1) god_failwarp#3 FAKE_NPC,9,9
-que_god01,164,99,0 duplicate(god_failwarp#1) god_failwarp#4 FAKE_NPC,9,9
-que_god01,145,118,0 duplicate(god_failwarp#1) god_failwarp#5 FAKE_NPC,9,9
-que_god01,164,118,0 duplicate(god_failwarp#1) god_failwarp#6 FAKE_NPC,9,9
-
// Original name: "Godly Item Quests Related#god"
que_god01,293,3,0 script Godly Item Quests#god 4_F_01,{
callfunc "F_GM_NPC";
@@ -864,24 +838,16 @@ que_god01,293,3,0 script Godly Item Quests#god 4_F_01,{
mes "[Use in case of emergency]";
mes "What services would you like to use?";
next;
- switch(select("Turn off Warps.", "Reset Timer.", "Reset chat room.")) {
+ switch(select("Reset Timer.", "Reset chat room.")) {
case 1:
mes "[Use in case of emergency]";
- mes "Press the 'Next' button to turn off warps.";
- next;
- donpcevent "god_wep_warpmaster::OnDisable";
- mes "[Use in case of emergency]";
- mes "You have successfully turned off warps.";
- close;
- case 2:
- mes "[Use in case of emergency]";
mes "Press the 'Next' button to reset timer.";
next;
donpcevent "Grunburti#god::OnEnable";
mes "[Use in case of emergency]";
mes "You have successfully reset timer.";
close;
- case 3:
+ case 2:
mes "[Use in case of emergency]";
mes "Please press the 'Next' button to reset the arena chat room in que_god01.";
next;
diff --git a/npc/quests/the_sign_quest.txt b/npc/quests/the_sign_quest.txt
index 5949c3558..d7db39dff 100644
--- a/npc/quests/the_sign_quest.txt
+++ b/npc/quests/the_sign_quest.txt
@@ -12317,34 +12317,18 @@ OnEnable:
end;
}
-que_sign01,196,44,0 script Warp#serin FAKE_NPC,35,35,{
-OnDisable:
-OnInit:
- disablenpc "Warp#serin";
- end;
-
-OnTouch:
- warp "niflheim",30,156;
- end;
-
-OnEnable:
- enablenpc "Warp#serin";
- end;
-}
-
que_sign01,1,0,0 script Timer#serin FAKE_NPC,{
OnStart:
initnpctimer;
end;
OnTimer600000:
- donpcevent "Warp#serin::OnEnable";
+ areawarp("que_sign01", 161, 9, 231, 79, "niflheim", 30, 156);
end;
OnTimer620000:
$@sign_w2 = 0;
donpcevent "Starter#serin::OnEnable";
- donpcevent "Warp#serin::OnDisable";
donpcevent "Serin#serin::OnEnable";
donpcevent "Dark Lord#serin::OnDisable";
donpcevent "Serin#dummy::OnDisable";
diff --git a/npc/re/merchants/hd_refiner.txt b/npc/re/merchants/hd_refiner.txt
index 43cdc2c01..7b032efff 100644
--- a/npc/re/merchants/hd_refiner.txt
+++ b/npc/re/merchants/hd_refiner.txt
@@ -38,7 +38,7 @@
//=========================================================================
//== Blacksmith Mighty Hammer (+7~9) =======================
-- script ::MightyHammer FAKE_NPC,{
+- script ::MightyHammer#re FAKE_NPC,{
mes("[Blacksmith Mighty Hammer]");
mes("I'm a blacksmith skilled in refining weapons and armors.");
mes("I can refine an item of your choice among the items you are equipped with.");
@@ -171,20 +171,20 @@
mes "I am sure a person like you would never blame me for a decrease in refine level by 1. Hmm.";
close;
}
-prt_in,59,54,3 duplicate(MightyHammer) Mighty Hammer#prt 4_M_DWARF
-morocc_in,65,30,3 duplicate(MightyHammer) Mighty Hammer#morocc 4_M_DWARF
-payon,148,176,3 duplicate(MightyHammer) Mighty Hammer#pay 4_M_DWARF
-alberta_in,16,56,3 duplicate(MightyHammer) Mighty Hammer#alb 4_M_DWARF
-yuno_in01,171,18,3 duplicate(MightyHammer) Mighty Hammer#yuno 4_M_DWARF
-ein_in01,22,82,3 duplicate(MightyHammer) Mighty Hammer#ein 4_M_DWARF
-lhz_in02,280,19,3 duplicate(MightyHammer) Mighty Hammer#lhz 4_M_DWARF
+prt_in,59,54,3 duplicate(MightyHammer#re) Mighty Hammer#prtre 4_M_DWARF
+morocc_in,65,30,3 duplicate(MightyHammer#re) Mighty Hammer#moroccre 4_M_DWARF
+payon,148,176,3 duplicate(MightyHammer#re) Mighty Hammer#payre 4_M_DWARF
+alberta_in,16,56,3 duplicate(MightyHammer#re) Mighty Hammer#albre 4_M_DWARF
+yuno_in01,171,18,3 duplicate(MightyHammer#re) Mighty Hammer#yunore 4_M_DWARF
+ein_in01,22,82,3 duplicate(MightyHammer#re) Mighty Hammer#einre 4_M_DWARF
+lhz_in02,280,19,3 duplicate(MightyHammer#re) Mighty Hammer#lhzre 4_M_DWARF
//- iRO NPC locations -
-//moc_para01,38,185,4 duplicate(MightyHammer) Mighty Hammer#ed 4_M_DWARF
-//payon,174,133,4 duplicate(MightyHammer) Mighty Hammer#im 4_M_DWARF
+//moc_para01,38,185,4 duplicate(MightyHammer#re) Mighty Hammer#edre 4_M_DWARF
+//payon,174,133,4 duplicate(MightyHammer#re) Mighty Hammer#imre 4_M_DWARF
//== Basta (+10 and up) ====================================
-- script ::Basta FAKE_NPC,{
+- script ::Basta#re FAKE_NPC,{
disable_items;
mes "[Basta]";
mes "I'm the best Blacksmith in the whole world, Basta.";
@@ -327,10 +327,10 @@ lhz_in02,280,19,3 duplicate(MightyHammer) Mighty Hammer#lhz 4_M_DWARF
mes "I'll do better next time! Don't worry!";
close;
}
-prt_in,57,54,3 duplicate(Basta) Basta#prt 4_M_DWARF
-morocc_in,68,30,3 duplicate(Basta) Basta#morocc 4_M_DWARF
-payon,148,174,3 duplicate(Basta) Basta#payon 4_M_DWARF
-alberta_in,18,56,3 duplicate(Basta) Basta#alberta 4_M_DWARF
-yuno_in01,173,18,3 duplicate(Basta) Basta#yuno 4_M_DWARF
-ein_in01,24,82,3 duplicate(Basta) Basta#einbroch 4_M_DWARF
-lhz_in02,280,17,3 duplicate(Basta) Basta#lighthalzen 4_M_DWARF
+prt_in,57,54,3 duplicate(Basta#re) Basta#prtre 4_M_DWARF
+morocc_in,68,30,3 duplicate(Basta#re) Basta#moroccre 4_M_DWARF
+payon,148,174,3 duplicate(Basta#re) Basta#payonre 4_M_DWARF
+alberta_in,18,56,3 duplicate(Basta#re) Basta#albertare 4_M_DWARF
+yuno_in01,173,18,3 duplicate(Basta#re) Basta#yunore 4_M_DWARF
+ein_in01,24,82,3 duplicate(Basta#re) Basta#einbrochre 4_M_DWARF
+lhz_in02,280,17,3 duplicate(Basta#re) Basta#lighthalzenre 4_M_DWARF
diff --git a/npc/re/quests/quests_brasilis.txt b/npc/re/quests/quests_brasilis.txt
index debaba2e5..1d5578fa0 100644
--- a/npc/re/quests/quests_brasilis.txt
+++ b/npc/re/quests/quests_brasilis.txt
@@ -124,10 +124,10 @@ OnGo:
mes "Ah... who's a good puppy?";
mes "Ok, where are the others?";
}
- if (compare(strnpcinfo(NPC_NAME_UNIQUE),"1")) setarray .@i[0],2,3;
- else if (compare(strnpcinfo(NPC_NAME_UNIQUE),"2")) setarray .@i[0],1,3;
+ if (compare(strnpcinfo(NPC_NAME_HIDDEN),"1")) setarray .@i[0],2,3;
+ else if (compare(strnpcinfo(NPC_NAME_HIDDEN),"2")) setarray .@i[0],1,3;
else setarray .@i[0],1,2;
- donpcevent "Puppy#"+charat(strnpcinfo(NPC_NAME_UNIQUE),0)+.@i[rand(2)]+"::OnEnable";
+ donpcevent "Puppy#"+charat(strnpcinfo(NPC_NAME_HIDDEN),0)+.@i[rand(2)]+"::OnEnable";
hideonnpc strnpcinfo(NPC_NAME);
close;
}
diff --git a/npc/scripts.conf b/npc/scripts.conf
index 086370899..c5dd2b54b 100644
--- a/npc/scripts.conf
+++ b/npc/scripts.conf
@@ -120,7 +120,8 @@
"npc/events/god_se_festival.txt",
// - Official Halloween Events (iRO)
//"npc/events/halloween_2006.txt",
-//"npc/events/halloween_2008.txt",
+// missing map
+// "npc/events/halloween_2008.txt",
//"npc/events/halloween_2009.txt",
// - Official idRO Idul Fitri Event
//"npc/events/idul_fitri.txt",
diff --git a/npc/scripts_dev.conf b/npc/scripts_dev.conf
index d6d807a74..df644013d 100644
--- a/npc/scripts_dev.conf
+++ b/npc/scripts_dev.conf
@@ -31,4 +31,4 @@
//=========================================================================
//================= Script Engine self-test ===============================
-//"npc: npc/dev/test.txt",
+//"npc/dev/test.txt",
diff --git a/npc/scripts_mapflags.conf b/npc/scripts_mapflags.conf
index 084004244..74fb40610 100644
--- a/npc/scripts_mapflags.conf
+++ b/npc/scripts_mapflags.conf
@@ -58,3 +58,4 @@
"npc/mapflag/skillduration.txt",
"npc/mapflag/notomb.txt",
"npc/mapflag/private_airship.txt",
+"npc/mapflag/nopet.txt",
diff --git a/sql-files/item_db.sql b/sql-files/item_db.sql
index 1ea90c5ce..d6f6ca544 100644
--- a/sql-files/item_db.sql
+++ b/sql-files/item_db.sql
@@ -1190,7 +1190,7 @@ REPLACE INTO `item_db` VALUES ('2231','Gemmed_Sallet_','Gemmed Sallet','5','0','
REPLACE INTO `item_db` VALUES ('2232','Circlet','Circlet','5','0','7500','3750','300','0','0','3','0','0','8487700','63','2','256','0','0',NULL,'1','0','18','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
REPLACE INTO `item_db` VALUES ('2233','Circlet_','Circlet','5','0','7500','3750','300','0','0','3','0','1','8487700','63','2','256','0','0',NULL,'1','0','18','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
REPLACE INTO `item_db` VALUES ('2234','Tiara','Tiara','5','0','20','10','400','0','0','4','0','0','18446744073709551614','63','2','256','0','45',NULL,'1','0','19','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2;','','');
-REPLACE INTO `item_db` VALUES ('2235','Crown','Crown','5','0','20','10','400','0','0','4','0','0','18446744073709551614','63','1','256','0','45',NULL,'1','0','45','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2;','','');
+REPLACE INTO `item_db` VALUES ('2235','Crown','Crown','5','0','20','10','400','0','0','4','0','0','18446744073709551614','63','2','256','0','45',NULL,'1','0','45','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2;','','');
REPLACE INTO `item_db` VALUES ('2236','Santas_Hat','Santa Hat','5','0','20','10','100','0','0','1','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','20','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,1; bonus bLuk,1;','','');
REPLACE INTO `item_db` VALUES ('2237','Weird_Goatee','Bandit Beard','5','0','2','1','100','0','0','0','0','0','18446744073709551615','63','2','1','0','0',NULL,'0','0','21','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2239','One_Eyed_Glass','Monocle','5','0','10000','5000','100','0','0','0','0','0','18446744073709551615','63','2','512','0','0',NULL,'0','0','23','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -2338,7 +2338,7 @@ REPLACE INTO `item_db` VALUES ('5139','Hibiscus','Hibiscus','5','0','20','10','2
REPLACE INTO `item_db` VALUES ('5140','Charming_Ribbon','Charming Ribbon','5','0','20','10','400','0','0','1','0','1','18446744073709551615','63','2','256','0','10',NULL,'1','0','211','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubRace,RC_Undead,5; bonus2 bSubRace,RC_Demon,5;','','');
REPLACE INTO `item_db` VALUES ('5141','Marionette_Doll','Marionette Doll','5','0','20','10','400','0','0','0','0','1','18446744073709551614','63','2','256','0','30',NULL,'1','0','212','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1;','','');
REPLACE INTO `item_db` VALUES ('5142','Crescent_Helm','Crescent Helm','5','0','20','10','3000','0','0','8','0','0','279714','63','2','768','0','50',NULL,'1','0','213','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,1; bonus2 bSubRace,RC_DemiPlayer,5;','','');
-REPLACE INTO `item_db` VALUES ('5143','Kabuki_Mask','Kabuki Mask','5','0','20','10','1000','0','0','5','0','1','18446744073709551614','63','1','769','0','30',NULL,'1','0','214','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bResEff,Eff_Silence,3000;','','');
+REPLACE INTO `item_db` VALUES ('5143','Kabuki_Mask','Kabuki Mask','5','0','20','10','1000','0','0','5','0','1','18446744073709551614','63','2','769','0','30',NULL,'1','0','214','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bResEff,Eff_Silence,3000;','','');
REPLACE INTO `item_db` VALUES ('5144','Gambler_Hat','Gambler Hat','5','0','20','10','200','0','0','2','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','16','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,5;','','');
REPLACE INTO `item_db` VALUES ('5145','Carnival_Joker_Jester','Carnival Joker Jester','5','0','10','5','100','0','0','0','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','89','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('5146','Elephant_Hat','Elephant Hat','5','0','0','0','500','0','0','0','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','215','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,1; bonus2 bSubRace,RC_Brute,7; skill WZ_WATERBALL,1;','','');
@@ -2360,7 +2360,7 @@ REPLACE INTO `item_db` VALUES ('5161','Sharp_Gear_','Spiky Band','5','0','20','1
REPLACE INTO `item_db` VALUES ('5162','Bone_Helm_','Bone Helm','5','0','20','10','800','0','0','7','0','1','279714','63','2','256','0','70',NULL,'1','0','103','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle,Ele_Dark,-15;','','');
REPLACE INTO `item_db` VALUES ('5163','Corsair_','Corsair','5','0','20','10','500','0','0','5','0','1','18446744073709551614','63','2','256','0','0',NULL,'1','0','105','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,1;','','');
REPLACE INTO `item_db` VALUES ('5164','Tiara_','Tiara','5','0','20','10','400','0','0','4','0','1','18446744073709551614','63','2','256','0','45',NULL,'1','0','19','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
-REPLACE INTO `item_db` VALUES ('5165','Crown_','Crown','5','0','20','10','400','0','0','4','0','1','18446744073709551614','63','1','256','0','45',NULL,'1','0','45','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
+REPLACE INTO `item_db` VALUES ('5165','Crown_','Crown','5','0','20','10','400','0','0','4','0','1','18446744073709551614','63','2','256','0','45',NULL,'1','0','45','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
REPLACE INTO `item_db` VALUES ('5166','Spinx_Helm_','Sphinx Hat','5','0','20','10','3000','0','0','5','0','1','16514','63','2','257','0','65',NULL,'0','0','137','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2;','','');
REPLACE INTO `item_db` VALUES ('5167','Munak_Turban_','Munak Hat','5','0','20','10','300','0','0','5','0','1','18446744073709551615','63','2','769','0','0',NULL,'0','0','51','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubRace,RC_Undead,10;','','');
REPLACE INTO `item_db` VALUES ('5168','Bongun_Hat_','Bongun Hat','5','0','20','10','300','0','0','5','0','1','18446744073709551615','63','2','769','0','0',NULL,'0','0','139','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -2549,7 +2549,7 @@ REPLACE INTO `item_db` VALUES ('5350','Pirate_Bandana_','Pirate Bandana','5','0'
REPLACE INTO `item_db` VALUES ('5351','Sunflower_','Sunflower','5','0','20','10','100','0','0','1','0','1','18446744073709551615','63','2','256','0','0',NULL,'0','0','37','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubRace,RC_Insect,10;','','');
REPLACE INTO `item_db` VALUES ('5352','Poporing_Cap','Poporing Cap','5','0','20','10','700','0','0','2','0','0','18446744073709551614','63','2','256','0','38',NULL,'1','0','361','0','0','0','0','73',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('5353','Helm_Of_Sun_','Hat of the Sun God','5','0','20','10','2400','0','0','4','0','1','13623168','63','2','768','0','0',NULL,'1','0','138','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,3; bonus bInt,2;','','');
-REPLACE INTO `item_db` VALUES ('5354','Muslim_Hat_M','Muslim Hat M','5','0','0','0','100','0','0','2','0','0','18446744073709551615','63','1','256','0','0',NULL,'0','0','362','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCastrate,-5;','','');
+REPLACE INTO `item_db` VALUES ('5354','Muslim_Hat_M','Muslim Hat M','5','0','0','0','100','0','0','2','0','0','18446744073709551615','63','2','256','0','0',NULL,'0','0','362','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCastrate,-5;','','');
REPLACE INTO `item_db` VALUES ('5355','Muslim_Hat_F','Selendang','5','0','0','0','100','0','0','2','0','0','18446744073709551615','63','2','256','0','0',NULL,'0','0','363','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCastrate,-5;','','');
REPLACE INTO `item_db` VALUES ('5356','Pumpkin_Hat_H','Festival Pumpkin Hat','5','0','20','10','200','0','0','2','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','206','0','0','0','0','384',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubRace,RC_Demon,5; bonus2 bAddRace,RC_Demon,5;','','');
REPLACE INTO `item_db` VALUES ('5357','Wings_Of_Victory','Wings Of Victory','5','0','20','10','200','0','0','10','0','0','18446744073709551615','63','2','768','0','0',NULL,'0','0','365','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,10; bonus bUnbreakableHelm,0;','','');
@@ -4491,10 +4491,10 @@ REPLACE INTO `item_db` VALUES ('12114','Elemental_Fire','Elemental Converter','2
REPLACE INTO `item_db` VALUES ('12115','Elemental_Water','Elemental Converter','2','0','2','1','10','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','itemskill ITEM_ENCHANTARMS,2;','','');
REPLACE INTO `item_db` VALUES ('12116','Elemental_Earth','Elemental Converter','2','0','2','1','10','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','itemskill ITEM_ENCHANTARMS,3;','','');
REPLACE INTO `item_db` VALUES ('12117','Elemental_Wind','Elemental Converter','2','0','2','1','10','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','itemskill ITEM_ENCHANTARMS,5;','','');
-REPLACE INTO `item_db` VALUES ('12118','Resist_Fire','Fireproof Potion','2','0','2','1','10','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','sc_start(SC_RESIST_PROPERTY_FIRE, 1200000, 20); sc_start(SC_RESIST_PROPERTY_WATER, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);','','');
-REPLACE INTO `item_db` VALUES ('12119','Resist_Water','Coldproof Potion','2','0','2','1','10','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','sc_start(SC_RESIST_PROPERTY_WATER, 1200000, 20); sc_start(SC_RESIST_PROPERTY_WIND, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);','','');
-REPLACE INTO `item_db` VALUES ('12120','Resist_Earth','Earthproof Potion','2','0','2','1','10','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','sc_start(SC_RESIST_PROPERTY_GROUND, 1200000, 20); sc_start(SC_RESIST_PROPERTY_FIRE, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);','','');
-REPLACE INTO `item_db` VALUES ('12121','Resist_Wind','Thunderproof Potion','2','0','2','1','10','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','sc_start(SC_RESIST_PROPERTY_WIND, 1200000, 20); sc_start(SC_RESIST_PROPERTY_GROUND, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);','','');
+REPLACE INTO `item_db` VALUES ('12118','Resist_Fire','Fireproof Potion','2','0','2','1','10','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','sc_start2(SC_RESIST_PROPERTY_FIRE, 1200000, 20, -15);','','');
+REPLACE INTO `item_db` VALUES ('12119','Resist_Water','Coldproof Potion','2','0','2','1','10','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','sc_start2(SC_RESIST_PROPERTY_WATER, 1200000, 20, -15);','','');
+REPLACE INTO `item_db` VALUES ('12120','Resist_Earth','Earthproof Potion','2','0','2','1','10','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','sc_start2(SC_RESIST_PROPERTY_GROUND, 1200000, 20, -15);','','');
+REPLACE INTO `item_db` VALUES ('12121','Resist_Wind','Thunderproof Potion','2','0','2','1','10','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','sc_start2(SC_RESIST_PROPERTY_WIND, 1200000, 20, -15);','','');
REPLACE INTO `item_db` VALUES ('12122','Sesame_Pastry','Sesame Pastry','2','0','2','1','70','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','sc_start SC_FOOD_BASICHIT,1200000,30;','','');
REPLACE INTO `item_db` VALUES ('12123','Honey_Pastry','Honey Pastry','2','0','2','1','70','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','sc_start SC_FOOD_BASICAVOIDANCE,1200000,30;','','');
REPLACE INTO `item_db` VALUES ('12124','Rainbow_Cake','Rainbow Cake','2','0','2','1','70','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','sc_start SC_BATKFOOD,1200000,10; sc_start SC_MATKFOOD,120000,10;','','');
@@ -4589,12 +4589,12 @@ REPLACE INTO `item_db` VALUES ('12212','Giant_Fly_Wing','Giant Fly Wing','2','0'
REPLACE INTO `item_db` VALUES ('12213','Neuralizer','Neuralizer','11','0','2','1','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','callfunc \"F_CashReset\";','','');
REPLACE INTO `item_db` VALUES ('12214','Convex_Mirror','Convex Mirror','2','0','2','1','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','sc_start SC_CASH_BOSS_ALARM,600000,0;','','');
REPLACE INTO `item_db` VALUES ('12215','Blessing_10_Scroll','LV10 Blessing Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(AL_BLESSING, 10, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
-REPLACE INTO `item_db` VALUES ('12216','Inc_Agi_10_Scroll','LV10 Agil Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(AL_INCAGI, 10, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
-REPLACE INTO `item_db` VALUES ('12217','Aspersio_5_Scroll','LV5 Aspersio Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(PR_ASPERSIO, 5, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
+REPLACE INTO `item_db` VALUES ('12216','Inc_Agi_10_Scroll','LV10 Agil Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(AL_INCAGI, 10, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF);','','');
+REPLACE INTO `item_db` VALUES ('12217','Aspersio_5_Scroll','LV5 Aspersio Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(PR_ASPERSIO, 5, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('12218','Assumptio_5_Scroll','LV5 Assumptio Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(HP_ASSUMPTIO, 5, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('12219','Wind_Walk_10_Scroll','LV10 Wind Walker Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(SN_WINDWALK, 10, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
-REPLACE INTO `item_db` VALUES ('12220','Adrenaline_Scroll','LV5 Adrenaline Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(BS_ADRENALINE, 5, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
-REPLACE INTO `item_db` VALUES ('12221','Megaphone_','Megaphone','2','0','2','1','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','input @megaphone$; announce strcharinfo(PC_NAME) + \": \" + @megaphone$,bc_all,0xFF0000; end;','','');
+REPLACE INTO `item_db` VALUES ('12220','Adrenaline_Scroll','LV5 Adrenaline Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(BS_ADRENALINE, 5, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF);','','');
+REPLACE INTO `item_db` VALUES ('12221','Megaphone_','Megaphone','2','0','2','1','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','input @megaphone$; loudhailer(@megaphone$); end;','','');
REPLACE INTO `item_db` VALUES ('12225','Sweet_Candy_Striper','Sweet Candy Cane','2','0','20','10','50','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'1',NULL,'0',NULL,'0','pet GOBLIN_XMAS;','','');
REPLACE INTO `item_db` VALUES ('12226','Examination1','Examination 1','0','0','20','10','50','0','0','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_MOVHASTE_INFINITY, 5400000, 100; percentheal 100, 100; sc_start SC_FOOD_STR, 5400000, 10; sc_start SC_FOOD_DEX, 5400000, 5; sc_start SC_PLUSATTACKPOWER, 5400000, 22; sc_start SC_PLUSMAGICPOWER, 5400000, 15;','','');
REPLACE INTO `item_db` VALUES ('12227','Examination2','Examination 2','0','0','20','10','50','0','0','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_MOVHASTE_INFINITY, 5400000, 100; percentheal 100, 100; sc_start SC_FOOD_INT, 5400000, 8; sc_start SC_FOOD_VIT, 5400000, 7; sc_start SC_FOOD_LUK, 5400000, 7; sc_start SC_PLUSATTACKPOWER, 5400000, 10;','','');
@@ -4649,7 +4649,7 @@ REPLACE INTO `item_db` VALUES ('12275','Gold_Pill_2','Taecheongdan','0','0','0',
REPLACE INTO `item_db` VALUES ('12276','Mimic_Scroll','Mimic Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','73',NULL,'0',NULL,'0',NULL,'0','mercenary_create M_MIMIC, 1800000;','','');
REPLACE INTO `item_db` VALUES ('12277','Disguise_Scroll','Disguise Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','73',NULL,'0',NULL,'0',NULL,'0','mercenary_create M_DISGUISE, 1800000;','','');
REPLACE INTO `item_db` VALUES ('12278','Alice_Scroll','Alice Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','73',NULL,'0',NULL,'0',NULL,'0','mercenary_create M_ALICE, 1800000;','','');
-REPLACE INTO `item_db` VALUES ('12279','Undead_Element_Scroll','Undead Elemental Scroll','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_RESIST_PROPERTY_FIRE, 300000, 20); sc_start(SC_RESIST_PROPERTY_WATER, 300000, 20); sc_start(SC_RESIST_PROPERTY_WIND, 300000, 20); sc_start(SC_RESIST_PROPERTY_GROUND, 300000, 20);','','');
+REPLACE INTO `item_db` VALUES ('12279','Undead_Element_Scroll','Undead Elemental Scroll','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_start4(SC_ARMOR_RESIST, 300000, 20, 20, 20, 20);','','');
REPLACE INTO `item_db` VALUES ('12280','Holy_Element_Scroll','Holy Elemental Scroll','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','specialeffect(EF_BENEDICTIO, AREA, playerattached()); sc_start SC_BENEDICTIO,300000,1;','','');
REPLACE INTO `item_db` VALUES ('12281','Tresure_Box_WoE','Event Treasure Box','2','0','20','10','150','0','0','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 12281,1;','','');
REPLACE INTO `item_db` VALUES ('12282','Internet_Cafe1','Internet Cafe1','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_STR, 5400000, 3; sc_start SC_FOOD_DEX, 5400000, 3; sc_start SC_FOOD_AGI, 5400000, 3; sc_start SC_FOOD_INT, 5400000, 3; sc_start SC_FOOD_VIT, 5400000, 3; sc_start SC_FOOD_LUK, 5400000, 3; sc_start SC_PLUSATTACKPOWER, 5400000, 15; sc_start SC_PLUSMAGICPOWER, 5400000, 15;','','');
@@ -4661,7 +4661,7 @@ REPLACE INTO `item_db` VALUES ('12287','Love_Angel','Love Angel Magic Powder','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); itemskill(AL_BLESSING, 5, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
-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(0, 5); itemskill(AL_INCAGI, 5, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
+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(0, 5); itemskill(AL_INCAGI, 5, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF);','','');
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;','','');
REPLACE INTO `item_db` VALUES ('12293','Dried_Yggdrasilberry','Dried 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 0,20;','','');
REPLACE INTO `item_db` VALUES ('12294','PC_Bang_Coin_Box1','PC-Room Coin Box','2','0','0','0','10','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','getitem 2740,1;','','');
@@ -4749,7 +4749,7 @@ REPLACE INTO `item_db` VALUES ('12375','Acaraje','Akaraje','2','0','0','0','80',
REPLACE INTO `item_db` VALUES ('12376','Mysterious_Can2','Mysterious Can2','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(3, 0); itemskill(PR_GLORIA, 2, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('12377','Mysterious_PET_Bottle2','Mysterious PET Bottle2','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(0, 3); itemskill(PR_MAGNIFICAT, 1, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('12378','2009_Rice_Cake_Soup','Rice Cake Soup','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','percentheal 50, 50;','','');
-REPLACE INTO `item_db` VALUES ('12379','Popes_Cookie','Pope Cookie','2','0','10','5','10','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','','','');
+REPLACE INTO `item_db` VALUES ('12379','Popes_Cookie','Pope Cookie','2','0','10','5','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','467',NULL,'0',NULL,'0',NULL,'0','specialeffect(EF_STEAL, AREA, playerattached()); sc_start4(SC_POPECOOKIE, 1200000, 3, 3, 3, 0);','','');
REPLACE INTO `item_db` VALUES ('12380','Desert_Wolf_Babe_Scroll','Job Change Flute','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','mercenary_create M_DESERT_WOLF_B, 1800000;','','');
REPLACE INTO `item_db` VALUES ('12381','ValkyrieA_Scroll','Ancient Languages Scroll','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','if (strcharinfo(PC_MAP) == \"job3_arch02\") { mercenary_create VALKYRIE_A, 1800000; }','','');
REPLACE INTO `item_db` VALUES ('12382','ValkyrieB_Scroll','Ancient Languages Scroll','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','if (strcharinfo(PC_MAP) == \"job3_arch02\") { mercenary_create VALKYRIE_B, 1800000; }','','');
@@ -4774,7 +4774,7 @@ REPLACE INTO `item_db` VALUES ('12400','Water_Of_Blessing_','Water Of Blessing '
REPLACE INTO `item_db` VALUES ('12401','Rune_Kn_Test_Int','Rune Kn Test Int','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_FOOD_INT,300000,40;','','');
REPLACE INTO `item_db` VALUES ('12402','29Fruit','29Fruit','2','0','0','0','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','','','');
REPLACE INTO `item_db` VALUES ('12403','Lucky_Egg_C2','Lucky Egg2','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','','','');
-REPLACE INTO `item_db` VALUES ('12404','Acti_Potion','Acti Potion','2','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','','','');
+REPLACE INTO `item_db` VALUES ('12404','Acti_Potion','Activation Potion','2','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','specialeffect(EF_STEAL, AREA, playerattached()); sc_start4(SC_VITALIZE_POTION, 120000, 2, 2, 10, 0);','','');
REPLACE INTO `item_db` VALUES ('12405','Underripe_Yggseed','Underripe Yggseed','2','0','20','10','50','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','percentheal(30, 30); itemskill(AL_BLESSING, 5, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('12406','Psychic_ArmorS','Psychic ArmorS','2','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','specialeffect(EF_ENERGYCOAT, AREA, playerattached()); sc_start4 SC_ARMOR_PROPERTY, 10000, 1, Ele_Neutral, 1, 0;','','');
REPLACE INTO `item_db` VALUES ('12407','PCBang_Coupon_Box','PCBang Coupon Box','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','','','');
@@ -4828,13 +4828,13 @@ REPLACE INTO `item_db` VALUES ('12454','F_WOB_Local','F WOB Local','2','0','0','
REPLACE INTO `item_db` VALUES ('12456','F_Greed_Scroll','F Greed Scroll','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','','','');
REPLACE INTO `item_db` VALUES ('12457','F_Glass_Of_Illusion','F Glass Of Illusion','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','','','');
REPLACE INTO `item_db` VALUES ('12458','F_Abrasive','F Abrasive','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','','','');
-REPLACE INTO `item_db` VALUES ('12459','F_Med_Life_Potion','F Med Life Potion','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','','','');
-REPLACE INTO `item_db` VALUES ('12460','F_Small_Life_Potion','F Small Life Potion','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','','','');
-REPLACE INTO `item_db` VALUES ('12461','F_Regeneration_Potion','F Regeneration Potion','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','','','');
-REPLACE INTO `item_db` VALUES ('12462','F_B_Mdef_Potion','F B Mdef Potion','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','','','');
-REPLACE INTO `item_db` VALUES ('12463','F_S_Mdef_Potion','F S Mdef Potion','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','','','');
-REPLACE INTO `item_db` VALUES ('12464','F_B_Def_Potion','F B Def Potion','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','','','');
-REPLACE INTO `item_db` VALUES ('12465','F_S_Def_Potion','F S Def Potion','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','','','');
+REPLACE INTO `item_db` VALUES ('12459','F_Med_Life_Potion','Medium Life Potion','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','specialeffect(EF_HEAL3, AREA, playerattached()); sc_start2(SC_M_LIFEPOTION, 600000, -7, 4);','','');
+REPLACE INTO `item_db` VALUES ('12460','F_Small_Life_Potion','Small Life Potion','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','specialeffect(EF_HEAL3, AREA, playerattached()); /* Probably it should be 5% instead of 7%, but we\'ll follow the client side description... */ sc_start2(SC_S_LIFEPOTION, 600000, -7, 4);','','');
+REPLACE INTO `item_db` VALUES ('12461','F_Regeneration_Potion','Regeneration Potion','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','specialeffect(EF_LIGHTSPHERE, AREA, playerattached()); sc_start(SC_HEALPLUS, 1800000, 20);','','');
+REPLACE INTO `item_db` VALUES ('12462','F_B_Mdef_Potion','Big Magic Defense Potion','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','specialeffect(EF_SPELLBREAKER, AREA, playerattached()); sc_start(SC_PROTECT_MDEF, 180000, 3);','','');
+REPLACE INTO `item_db` VALUES ('12463','F_S_Mdef_Potion','Small Magic Defense Potion','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','specialeffect(EF_SPELLBREAKER, AREA, playerattached()); sc_start(SC_PROTECT_MDEF, 60000, 3);','','');
+REPLACE INTO `item_db` VALUES ('12464','F_B_Def_Potion','Big Defense Potion','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','specialeffect(EF_GUARD, AREA, playerattached()); sc_start(SC_PROTECT_DEF, 180000, 3);','','');
+REPLACE INTO `item_db` VALUES ('12465','F_S_Def_Potion','Small Defense Potion','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','specialeffect(EF_GUARD, AREA, playerattached()); sc_start(SC_PROTECT_DEF, 60000, 3);','','');
REPLACE INTO `item_db` VALUES ('12466','F_Blessing_10_Scroll','F Blessing 10 Scroll','2','0','2','1','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 ('12467','F_Inc_Agi_10_Scroll','F Inc Agi 10 Scroll','2','0','2','1','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 ('12468','F_Aspersio_5_Scroll','F Aspersio 5 Scroll','2','0','2','1','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','','','');
@@ -4953,6 +4953,10 @@ REPLACE INTO `item_db` VALUES ('12581','Vending_Search_Scroll2','Universal Catal
REPLACE INTO `item_db` VALUES ('12591','Uni_Catalog_Bz','Universal Catalog Bronze','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','searchstores 10,1;','','');
REPLACE INTO `item_db` VALUES ('12609','Old_Ore_Box','Old Ore Box','2','0','20','10','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','packageitem();','','');
REPLACE INTO `item_db` VALUES ('12622','Boarding_Halter','Halter Lead','11','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','3000','507',NULL,'0',NULL,'0',NULL,'0','setcashmount();','','');
+REPLACE INTO `item_db` VALUES ('12666','Thai_Perfume_MATK','Thai Perfume(MATK)','2','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','specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); sc_start(SC_SKF_MATK, 600000, 24);','','');
+REPLACE INTO `item_db` VALUES ('12667','Thai_Perfume_ATK','Thai Perfume(ATK)','2','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','specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); sc_start(SC_SKF_ATK, 600000, 24);','','');
+REPLACE INTO `item_db` VALUES ('12668','Thai_Perfume_ASPD','Thai Perfume(ASPD)','2','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','specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); sc_start(SC_SKF_ASPD, 600000, 3);','','');
+REPLACE INTO `item_db` VALUES ('12669','Thai_Perfume_CAST','Thai Perfume(CAST)','2','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','specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); sc_start(SC_SKF_CAST, 600000, 5);','','');
REPLACE INTO `item_db` VALUES ('12701','Old_Blue_Box_F','Old Blue Box','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','','','');
REPLACE INTO `item_db` VALUES ('12702','Old_Bleu_Box','Old Navy Box','2','0','0','0','200','0','0','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 Old_Bleu_Box,1; getrandgroupitem Old_Bleu_Box,1;','','');
REPLACE INTO `item_db` VALUES ('12703','Holy_Egg_2','Holy Egg','11','0','0','0','50','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -4978,7 +4982,7 @@ REPLACE INTO `item_db` VALUES ('12722','Poison_Fever','Pyrexia','0','0','2','1',
REPLACE INTO `item_db` VALUES ('12723','Poison_Laughing','Magic Mushroom','0','0','2','1','20','0','0','0','0','0','4096','8','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','8','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','Nauthiz Rune','2','0','100','50','100','0','0','0','0','0','128','8','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','Raido Rune','2','0','100','50','100','0','0','0','0','0','128','8','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 ('12726','Runstone_Rhydo','Raido Rune','2','0','100','50','100','0','0','0','0','0','128','8','2','0','0','0',NULL,'0','1','0','0','0','0','30000','475',NULL,'1',NULL,'20','1','0','itemskill(RK_CRUSHSTRIKE, 1, ISF_CHECKCONDITIONS);','','');
REPLACE INTO `item_db` VALUES ('12727','Runstone_Verkana','Berkana Rune','2','0','100','50','100','0','0','0','0','0','128','8','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','Isa Rune','2','0','100','50','100','0','0','0','0','0','128','8','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','Othila Rune','2','0','100','50','100','0','0','0','0','0','128','8','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'20','1','0','itemskill RK_FIGHTINGSPIRIT, 1;','','');
@@ -5030,6 +5034,7 @@ REPLACE INTO `item_db` VALUES ('12786','Change_Slot_Card','Character Position Ch
REPLACE INTO `item_db` VALUES ('12790','Change_Name_Card','Name Change Coupon','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','CharRename += 1;','','');
REPLACE INTO `item_db` VALUES ('12831','Potion_Box','Potion Box','2','0','0','0','50','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 Red_Slim_Potion, 100; getitem Yellow_Slim_Potion, 100; getitem White_Slim_Potion, 100; getitem Blue_Potion, 100;','','');
REPLACE INTO `item_db` VALUES ('12848','Falcon_Flute','Falcon Flute','11','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','if (getskilllv(HT_FALCON)) { if (checkoption(Option_Wug) || checkoption(Option_Wugrider)) end; if (checkfalcon() == 1) { setfalcon 0; } else { setfalcon 1; } }','','');
+REPLACE INTO `item_db` VALUES ('12883','Almighty','Almighty','2','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','specialeffect(EF_BASH3D, AREA, playerattached()); sc_start(SC_FOOD_STR_CASH, 1800000, 10); sc_start(SC_FOOD_VIT_CASH, 1800000, 10); sc_start(SC_FOOD_AGI_CASH, 1800000, 10); sc_start(SC_FOOD_INT_CASH, 1800000, 10); sc_start(SC_FOOD_DEX_CASH, 1800000, 10); sc_start(SC_FOOD_LUK_CASH, 1800000, 10); sc_start2(SC_ALMIGHTY, 1800000, 30, 30);','','');
REPLACE INTO `item_db` VALUES ('12900','Battle_Manual_Box','Battle Manual 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 12208,10;','','');
REPLACE INTO `item_db` VALUES ('12901','Insurance_Package','Insurance Package','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 12209,10;','','');
REPLACE INTO `item_db` VALUES ('12902','Bubble_Gum_Box','Bubble Gum 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 12210,10;','','');
@@ -6130,10 +6135,10 @@ REPLACE INTO `item_db` VALUES ('14513','Storm_10_Scroll','Storm Gust Scroll','2'
REPLACE INTO `item_db` VALUES ('14514','Vermilion_10_Scroll','Lord of Vermilion Scroll','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','itemskill WZ_VERMILION,10;','','');
REPLACE INTO `item_db` VALUES ('14515','Lex_Aeterna_Scroll','Lex Aeterna Scroll','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','itemskill PR_LEXAETERNA,1;','','');
REPLACE INTO `item_db` VALUES ('14516','Magnificat_5_Scroll','Magnificat Scroll','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','itemskill PR_MAGNIFICAT,5;','','');
-REPLACE INTO `item_db` VALUES ('14517','CP_Helm_Scroll','Chemical Protection Helm Scroll','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','itemskill(AM_CP_HELM, 5);','','');
-REPLACE INTO `item_db` VALUES ('14518','CP_Shield_Scroll','Chemical Protection Shield Scrol','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','itemskill(AM_CP_SHIELD, 5);','','');
-REPLACE INTO `item_db` VALUES ('14519','CP_Armor_Scroll','Chemical Protection Armor Scroll','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','itemskill(AM_CP_ARMOR, 5);','','');
-REPLACE INTO `item_db` VALUES ('14520','CP_Weapon_Scroll','Chemical Protection Weapon Scroll','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','itemskill(AM_CP_WEAPON, 5);','','');
+REPLACE INTO `item_db` VALUES ('14517','CP_Helm_Scroll','Chemical Protection Helm Scroll','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','itemskill(AM_CP_HELM, 5, ISF_CHECKCONDITIONS);','','');
+REPLACE INTO `item_db` VALUES ('14518','CP_Shield_Scroll','Chemical Protection Shield Scrol','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','itemskill(AM_CP_SHIELD, 5, ISF_CHECKCONDITIONS);','','');
+REPLACE INTO `item_db` VALUES ('14519','CP_Armor_Scroll','Chemical Protection Armor Scroll','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','itemskill(AM_CP_ARMOR, 5, ISF_CHECKCONDITIONS);','','');
+REPLACE INTO `item_db` VALUES ('14520','CP_Weapon_Scroll','Chemical Protection Weapon Scroll','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','itemskill(AM_CP_WEAPON, 5, ISF_CHECKCONDITIONS);','','');
REPLACE INTO `item_db` VALUES ('14521','Repair_Scroll','Repair Weapon Scroll','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,'1',NULL,'0',NULL,'0','itemskill(BS_REPAIRWEAPON, 1);','','');
REPLACE INTO `item_db` VALUES ('14522','Big_Bun','Big Bun','0','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','percentheal 100,0;','','');
REPLACE INTO `item_db` VALUES ('14523','Pill_','Pill','0','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','percentheal 0,100;','','');
@@ -6202,7 +6207,7 @@ REPLACE INTO `item_db` VALUES ('14585','WOB_Local','Blue Butterfly Wing','2','0'
REPLACE INTO `item_db` VALUES ('14586','Spark_Candy','Jumping Candy','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','180000','73',NULL,'0',NULL,'0',NULL,'0','specialeffect(EF_HASTEUP, AREA, playerattached()); sc_start2 SC_STEAMPACK, 60000, 20, 25;','','');
REPLACE INTO `item_db` VALUES ('14587','Repair_Scroll_','Equipment Repair Spell Book','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,'1',NULL,'0',NULL,'0','itemskill BS_REPAIRWEAPON,1;','','');
REPLACE INTO `item_db` VALUES ('14588','Pty_Blessing_Scroll','Party Blessing 10 Scroll','2','0','10','5','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','75',NULL,'0',NULL,'0',NULL,'0','itemskill(CASH_BLESSING, 10, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
-REPLACE INTO `item_db` VALUES ('14589','Pty_Inc_Agi_Scroll','Party Increase Agi 10 Scroll','2','0','10','5','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','75',NULL,'0',NULL,'0',NULL,'0','itemskill(CASH_INCAGI, 10, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
+REPLACE INTO `item_db` VALUES ('14589','Pty_Inc_Agi_Scroll','Party Increase Agi 10 Scroll','2','0','10','5','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','75',NULL,'0',NULL,'0',NULL,'0','itemskill(CASH_INCAGI, 10, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('14590','Pty_Assumptio_Scroll','Party Assumptio 5 Scroll','2','0','10','5','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','75',NULL,'0',NULL,'0',NULL,'0','itemskill(CASH_ASSUMPTIO, 5, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('14591','Siege_Teleport_Scroll','WoE Teleport Scroll','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,'1',NULL,'0',NULL,'0','callfunc \"F_CashSiegeTele\";','','');
REPLACE INTO `item_db` VALUES ('14592','Job_Manual50','JOB Battle Manual','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,'1',NULL,'0',NULL,'0','sc_start SC_CASH_PLUSONLYJOBEXP,1800000,50;','','');
@@ -6268,6 +6273,7 @@ REPLACE INTO `item_db` VALUES ('16134','King_Frog_Hat_Box','Frog King Hat Box','
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;','','');
REPLACE INTO `item_db` VALUES ('16248','Tiger_Arhat_Mask_Box','Tiger 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 5566,1;','','');
+REPLACE INTO `item_db` VALUES ('16254','Energizing_Potion_Box','Activation Potion 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(Acti_Potion, 5);','','');
REPLACE INTO `item_db` VALUES ('16257','Buddah_Scroll','Buddah 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','73',NULL,'0',NULL,'0',NULL,'0','packageitem();','','');
REPLACE INTO `item_db` VALUES ('16304','Evil_Incarnation_Disable','Evil Incarnation','2','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','packageitem();','','');
REPLACE INTO `item_db` VALUES ('16371','Tw_Aug_Scroll','Tw Aug 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','73',NULL,'0',NULL,'0',NULL,'0','packageitem();','','');
@@ -6280,6 +6286,7 @@ REPLACE INTO `item_db` VALUES ('16777','Universal_Catalog_Gold_Box50','Universal
REPLACE INTO `item_db` VALUES ('16843','Beauty_Gift_Box','Beauty Gift Box','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','getitem(New_Style_Coupon, 1);','','');
REPLACE INTO `item_db` VALUES ('16854','Clothing_Dye_Box','Clothing Dye Box','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','getitem(Clothing_Dye_Coupon, 1);','','');
REPLACE INTO `item_db` VALUES ('16855','Clothing_Dye_Orig_Box','Clothing Dye Orig Box','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','getitem(Clothing_Dye_Coupon2, 1);','','');
+REPLACE INTO `item_db` VALUES ('17224','Almighty_Box','Almighty Box','18','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','getitem(Almighty, 10);','','');
REPLACE INTO `item_db` VALUES ('17336','Jeremy_Beauty_Coupon_Box','Jeremy\'s Beauty Coupon Box','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','getitem(Cash_Hair_Coupon, 1);','','');
REPLACE INTO `item_db` VALUES ('17774','Almighty_Plus_Box3','Almighty_Plus_Box3','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('17775','Almighty100_PlusBox3','Almighty100_PlusBox3','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -7030,6 +7037,7 @@ REPLACE INTO `item_db` VALUES ('28763','Sharp_Wind_Sword','Sharp_Wind_Sword','3'
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','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','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','','','');
diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql
index e505ca3e2..2f23e3f12 100644
--- a/sql-files/item_db_re.sql
+++ b/sql-files/item_db_re.sql
@@ -1380,10 +1380,10 @@ REPLACE INTO `item_db` VALUES ('2202','Sunglasses_','Sunglasses','5','0','5000',
REPLACE INTO `item_db` VALUES ('2203','Glasses','Glasses','5','0','4000','2000','100','0','0','0','0','0','18446744073709551615','63','2','512','0','0',NULL,'0','0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2204','Glasses_','Glasses','5','0','4000','2000','100','0','0','0','0','1','18446744073709551615','63','2','512','0','0',NULL,'0','0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2205','Divers_Goggles','Diver Goggles','5','0','3500','1750','100','0','0','0','0','0','18446744073709551615','63','2','512','0','0',NULL,'0','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('2206','Wedding_Veil','Wedding Veil','5','0','23000','11500','100','0','0','0','0','0','18446744073709551615','63','0','256','0','0',NULL,'1','0','44','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,5;','','');
+REPLACE INTO `item_db` VALUES ('2206','Wedding_Veil','Wedding Veil','5','0','23000','11500','100','0','0','0','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','44','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,5;','','');
REPLACE INTO `item_db` VALUES ('2207','Fancy_Flower','Fancy Flower','5','0','20','10','100','0','0','0','0','0','18446744073709551615','63','2','256','0','0',NULL,'0','0','4','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRaceTolerance,RC_Plant,10;','','');
-REPLACE INTO `item_db` VALUES ('2208','Ribbon','Ribbon','5','0','800','400','100','0','0','1','0','0','18446744073709551615','63','0','256','0','0',NULL,'1','0','17','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
-REPLACE INTO `item_db` VALUES ('2209','Ribbon_','Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','0','256','0','0',NULL,'1','0','17','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
+REPLACE INTO `item_db` VALUES ('2208','Ribbon','Ribbon','5','0','800','400','100','0','0','1','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','17','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
+REPLACE INTO `item_db` VALUES ('2209','Ribbon_','Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','2','256','0','0',NULL,'1','0','17','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
REPLACE INTO `item_db` VALUES ('2210','Hair_Band','Hairband','5','0','500','250','100','0','0','2','0','0','18446744073709551615','63','2','256','0','0',NULL,'0','0','9','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2211','Bandana','Bandana','5','0','400','200','100','0','0','2','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','6','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2212','Eye_Bandage','Eye Patch','5','0','1000','500','100','0','0','0','0','0','18446744073709551615','63','2','512','0','0',NULL,'0','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -1408,8 +1408,8 @@ REPLACE INTO `item_db` VALUES ('2230','Gemmed_Sallet','Gemmed Sallet','5','0','5
REPLACE INTO `item_db` VALUES ('2231','Gemmed_Sallet_','Gemmed Sallet','5','0','50000','25000','500','0','0','8','0','1','414946','63','2','256','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
REPLACE INTO `item_db` VALUES ('2232','Circlet','Circlet','5','0','7500','3750','300','0','0','6','0','0','8487700','63','2','256','0','0',NULL,'1','0','18','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
REPLACE INTO `item_db` VALUES ('2233','Circlet_','Circlet','5','0','7500','3750','300','0','0','6','0','1','8487700','63','2','256','0','0',NULL,'1','0','18','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
-REPLACE INTO `item_db` VALUES ('2234','Tiara','Tiara','5','0','20','10','400','0','0','7','0','0','18446744073709551614','63','0','256','0','45',NULL,'1','0','19','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2;','','');
-REPLACE INTO `item_db` VALUES ('2235','Crown','Crown','5','0','20','10','400','0','0','7','0','0','18446744073709551614','63','1','256','0','45',NULL,'1','0','45','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2;','','');
+REPLACE INTO `item_db` VALUES ('2234','Tiara','Tiara','5','0','20','10','400','0','0','7','0','0','18446744073709551614','63','2','256','0','45',NULL,'1','0','19','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2;','','');
+REPLACE INTO `item_db` VALUES ('2235','Crown','Crown','5','0','20','10','400','0','0','7','0','0','18446744073709551614','63','2','256','0','45',NULL,'1','0','45','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2;','','');
REPLACE INTO `item_db` VALUES ('2236','Santas_Hat','Santa Hat','5','0','20','10','100','0','0','2','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','20','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,1; bonus bLuk,1;','','');
REPLACE INTO `item_db` VALUES ('2237','Weird_Goatee','Bandit Beard','5','0','2','1','100','0','0','0','0','0','18446744073709551615','63','2','1','0','0',NULL,'0','0','21','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2238','Weird_Moustache','Moustache','5','0','2','1','100','0','0','0','0','0','18446744073709551615','63','2','1','0','0',NULL,'0','0','22','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -1579,7 +1579,7 @@ REPLACE INTO `item_db` VALUES ('2403','Shoes','Shoes','5','0','3500','1750','400
REPLACE INTO `item_db` VALUES ('2404','Shoes_','Shoes','5','0','3500','1750','400','0','0','10','0','1','18446744073709551614','63','2','64','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2405','Boots','Boots','5','0','18000','9000','600','0','0','16','0','0','24009962','63','2','64','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2406','Boots_','Boots','5','0','18000','9000','600','0','0','16','0','1','24009962','63','2','64','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('2407','Chrystal_Pumps','Crystal Pumps','5','0','20','10','100','0','0','5','0','0','18446744073709551614','63','0','64','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,10; bonus bLuk,5;','','');
+REPLACE INTO `item_db` VALUES ('2407','Chrystal_Pumps','Crystal Pumps','5','0','20','10','100','0','0','5','0','0','18446744073709551614','63','2','64','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,10; bonus bLuk,5;','','');
REPLACE INTO `item_db` VALUES ('2408','Cuffs','Shackles','5','0','5000','2500','3000','0','0','18','0','0','18446744073709551615','63','2','64','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2409','Spiky_Heel','High Heels','5','0','8500','4250','600','0','0','10','0','0','18446744073709551614','63','2','64','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,5;','','');
REPLACE INTO `item_db` VALUES ('2410','Sleipnir','Sleipnir','5','0','20','10','3500','0','0','40','0','0','18446744073709551615','63','2','64','0','94',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableShoes,0; bonus bMdef,10; bonus bMaxHPrate,20; bonus bMaxSPrate,20; bonus bSPrecovRate,25; bonus bSpeedRate,25; bonus bInt,25;','','');
@@ -1665,7 +1665,7 @@ REPLACE INTO `item_db` VALUES ('2489','Vidars_Boots_','Vidar\'s Boots','5','0','
REPLACE INTO `item_db` VALUES ('2491','Bangungot_Boots','Bangungot Boots of Nightmare','5','0','20','10','600','0','0','10','0','0','18446744073709551615','63','2','64','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,getrefine(); if(getrefine()>=14) { bonus bSpeedRate,25; }','','');
REPLACE INTO `item_db` VALUES ('2492','Bayani_Bangungot_Boots','Bangungot Boots(Bayani)','5','0','20','10','600','0','0','10','0','1','18446744073709551615','63','2','64','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,getrefine(); if(getrefine()>=12) { bonus bSpeedRate,25; }','','');
REPLACE INTO `item_db` VALUES ('2493','Goibnes_Combat_Boots_','Goibne\'s Greaves','5','0','30000','15000','700','0','0','13','0','1','18446744073709551614','63','2','64','0','54',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3; bonus bMaxHPrate,5; bonus bMaxSPrate,5;','','');
-REPLACE INTO `item_db` VALUES ('2494','Chrystal_Pumps_','Crystal Pumps','5','0','20','10','100','0','0','5','0','1','18446744073709551614','63','0','64','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,10; bonus bLuk,5;','','');
+REPLACE INTO `item_db` VALUES ('2494','Chrystal_Pumps_','Crystal Pumps','5','0','20','10','100','0','0','5','0','1','18446744073709551614','63','2','64','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,10; bonus bLuk,5;','','');
REPLACE INTO `item_db` VALUES ('2495','Egir_Shoes','Aegir Shoes','5','0','200000','100000','300','0','0','13','0','1','18446744073709551615','63','2','64','0','110',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (BaseClass == Job_Mage || BaseClass == Job_Archer || BaseClass == Job_Acolyte) bonus bMaxHP, BaseLevel * 5; else if (BaseClass == Job_Swordman || BaseClass == Job_Merchant || BaseClass == Job_Thief) bonus bMaxSP, JobLevel * 2;','','');
REPLACE INTO `item_db` VALUES ('2496','TE_Woe_Shoes','TE WoE Shoes','5','0','0','0','0','0','0','5','0','0','18446744073709551615','63','2','64','0','40',NULL,'0','0','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,5; bonus bMaxHP,150; bonus bMaxSP,150; bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,2500;','','');
REPLACE INTO `item_db` VALUES ('2497','TE_Woe_Boots','TE WoE Boots','5','0','0','0','0','0','0','10','0','0','279714','63','2','64','0','40',NULL,'0','0','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,200; bonus bMaxSP,100; bonus2 bAddRace,RC_Player,10; bonus2 bResEff,Eff_Freeze,2500;','','');
@@ -1874,7 +1874,7 @@ REPLACE INTO `item_db` VALUES ('2704','Golden_Accessory','Golden Accessories','5
REPLACE INTO `item_db` VALUES ('2705','Golden_Accessory2','Golden Accessories','5','0','20','10','100','0','0','0','0','0','18446744073709551615','63','2','136','0','0',NULL,'0','0','0','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddMonsterDropItem,12018,500;','','');
REPLACE INTO `item_db` VALUES ('2706','Handcuff','Arrest Handcuffs','5','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','136','0','0',NULL,'0','0','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2707','GUSLI','Gusli','5','0','20','10','100','0','0','0','0','0','18446744073709551615','63','2','136','0','0',NULL,'0','0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('2708','Chinese_Handicraft','Chinese Handicraft','5','0','0','0','50','0','0','0','0','0','18446744073709551615','63','0','136','0','0',NULL,'0','0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','bonus3 bAutoSpell,MG_FIREBOLT,5,300;','','');
+REPLACE INTO `item_db` VALUES ('2708','Chinese_Handicraft','Chinese Handicraft','5','0','0','0','50','0','0','0','0','0','18446744073709551615','63','2','136','0','0',NULL,'0','0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','bonus3 bAutoSpell,MG_FIREBOLT,5,300;','','');
REPLACE INTO `item_db` VALUES ('2709','5_Anniversary_Coin','5th Anniversary Coin','5','0','2','1','0','0','0','0','0','0','18446744073709551615','63','2','136','0','0',NULL,'0','0','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate,5; bonus bMatkRate,5;','','');
REPLACE INTO `item_db` VALUES ('2710','Bloody_Iron_Ball_C','Bloody Iron Ball','5','0','1','0','0','0','0','0','0','0','18446744073709551614','63','2','136','0','0',NULL,'0','0','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,30;','','');
REPLACE INTO `item_db` VALUES ('2711','Spiritual_Ring_C','Spiritual Ring','5','0','1','0','0','0','0','0','0','0','18446744073709551615','63','2','136','0','0',NULL,'0','0','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2; bonus bDex,2;','','');
@@ -2120,7 +2120,7 @@ REPLACE INTO `item_db` VALUES ('2971','Pocket_Watch__','Pocket Watch','5','0','2
REPLACE INTO `item_db` VALUES ('2981','RingOfHero','Brave Ring','5','0','20','10','200','0','0','0','0','0','18446744073709551615','63','2','136','0','160',NULL,'0','0','0','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2986','Snake_Ring','Snake Ring','5','0','20','10','100','0','0','2','0','1','18446744073709551615','63','2','136','0','0',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,3; bonus bMdef,2;','','');
REPLACE INTO `item_db` VALUES ('2987','Snake_Pendant','Snake Pendant','5','0','20','10','100','0','0','3','0','1','18446744073709551615','63','2','136','0','0',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,3; bonus bLuk,2; bonus bMdef,3;','','');
-REPLACE INTO `item_db` VALUES ('2988','Winged_Ring_Of_Newoz','Oz\'s New Wing Ring','5','0','62000','31000','100','0','0','0','0','1','524288','56','1','136','0','130',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVariableCastrate,-25;','','');
+REPLACE INTO `item_db` VALUES ('2988','Winged_Ring_Of_Newoz','Oz\'s New Wing Ring','5','0','62000','31000','100','0','0','0','0','1','524288','56','2','136','0','130',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVariableCastrate,-25;','','');
REPLACE INTO `item_db` VALUES ('2989','Floral_Bracelet_Of_Igu','Bloody Floral Decoration Bracelet','5','0','62000','31000','100','0','0','0','0','1','524288','56','2','136','0','130',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVariableCastrate,-25;','','');
REPLACE INTO `item_db` VALUES ('2997','RWC_Gold_Brooch','RWC Gold Brooch','5','0','0','0','200','0','0','0','0','1','18446744073709551615','63','2','136','0','0',NULL,'0','0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,20; bonus bMatk,20;','','');
REPLACE INTO `item_db` VALUES ('2999','RWC_Silver_Brooch','RWC Silver Brooch','5','0','0','0','200','0','0','0','0','0','18446744073709551615','63','2','136','0','0',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,300; bonus bMaxSP,30;','','');
@@ -3267,8 +3267,8 @@ REPLACE INTO `item_db` VALUES ('5160','Magestic_Goat_','Magestic Goat','5','0','
REPLACE INTO `item_db` VALUES ('5161','Sharp_Gear_','Spiky Band','5','0','20','10','1000','0','0','12','0','1','6739442','63','2','256','0','50',NULL,'1','0','43','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('5162','Bone_Helm_','Bone Helm','5','0','20','10','800','0','0','15','0','1','279714','63','2','256','0','70',NULL,'1','0','103','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle,Ele_Dark,-15;','','');
REPLACE INTO `item_db` VALUES ('5163','Corsair_','Corsair','5','0','20','10','500','0','0','10','0','1','18446744073709551614','63','2','256','0','0',NULL,'1','0','105','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,1;','','');
-REPLACE INTO `item_db` VALUES ('5164','Tiara_','Tiara','5','0','20','10','400','0','0','7','0','1','18446744073709551614','63','0','256','0','45',NULL,'1','0','19','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
-REPLACE INTO `item_db` VALUES ('5165','Crown_','Crown','5','0','20','10','400','0','0','7','0','1','18446744073709551614','63','1','256','0','45',NULL,'1','0','45','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
+REPLACE INTO `item_db` VALUES ('5164','Tiara_','Tiara','5','0','20','10','400','0','0','7','0','1','18446744073709551614','63','2','256','0','45',NULL,'1','0','19','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
+REPLACE INTO `item_db` VALUES ('5165','Crown_','Crown','5','0','20','10','400','0','0','7','0','1','18446744073709551614','63','2','256','0','45',NULL,'1','0','45','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
REPLACE INTO `item_db` VALUES ('5166','Spinx_Helm_','Sphinx Hat','5','0','20','10','3000','0','0','5','0','1','16514','63','2','257','0','65',NULL,'0','0','137','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2;','','');
REPLACE INTO `item_db` VALUES ('5167','Munak_Turban_','Munak Hat','5','0','20','10','300','0','0','5','0','1','18446744073709551615','63','2','769','0','0',NULL,'0','0','51','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRaceTolerance,RC_Undead,10;','','');
REPLACE INTO `item_db` VALUES ('5168','Bongun_Hat_','Bongun Hat','5','0','20','10','300','0','0','5','0','1','18446744073709551615','63','2','769','0','0',NULL,'0','0','139','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -3294,14 +3294,14 @@ REPLACE INTO `item_db` VALUES ('5187','Twin_Ribbon','Twin Red Ribbon','5','0','2
REPLACE INTO `item_db` VALUES ('5188','Minstrel_Hat','Creative Convention Hat','5','0','20','10','500','0','0','4','0','0','18446744073709551615','63','2','256','0','50',NULL,'1','0','240','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1; bonus bDex,1;','','');
REPLACE INTO `item_db` VALUES ('5189','Fallen_Leaves','Autumn Leaves','5','0','20','10','100','0','0','0','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','241','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,40; bonus bMaxSP,40;','','');
REPLACE INTO `item_db` VALUES ('5190','Baseball_Cap_','Independence Memorial Hat','5','0','20','10','20','0','0','5','0','1','18446744073709551615','63','2','256','0','0',NULL,'1','0','216','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('5191','Ribbon_Black','Black Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','0','256','0','0',NULL,'1','0','242','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
-REPLACE INTO `item_db` VALUES ('5192','Ribbon_Yellow','Yellow Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','0','256','0','0',NULL,'1','0','243','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
-REPLACE INTO `item_db` VALUES ('5193','Ribbon_Green','Green Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','0','256','0','0',NULL,'1','0','244','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
-REPLACE INTO `item_db` VALUES ('5194','Ribbon_Pink','Pink Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','0','256','0','0',NULL,'1','0','245','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
-REPLACE INTO `item_db` VALUES ('5195','Ribbon_Red','Red Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','0','256','0','0',NULL,'1','0','246','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
-REPLACE INTO `item_db` VALUES ('5196','Ribbon_Orange','Orange Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','0','256','0','0',NULL,'1','0','247','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
-REPLACE INTO `item_db` VALUES ('5197','Ribbon_White','White Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','0','256','0','0',NULL,'1','0','248','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
-REPLACE INTO `item_db` VALUES ('5198','Drooping_Bunny','Evolved Drooping Bunny','5','0','10','5','100','0','0','3','0','0','18446744073709551615','63','0','256','0','0',NULL,'1','0','249','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,1; bonus bFlee,2;','','');
+REPLACE INTO `item_db` VALUES ('5191','Ribbon_Black','Black Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','2','256','0','0',NULL,'1','0','242','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
+REPLACE INTO `item_db` VALUES ('5192','Ribbon_Yellow','Yellow Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','2','256','0','0',NULL,'1','0','243','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
+REPLACE INTO `item_db` VALUES ('5193','Ribbon_Green','Green Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','2','256','0','0',NULL,'1','0','244','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
+REPLACE INTO `item_db` VALUES ('5194','Ribbon_Pink','Pink Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','2','256','0','0',NULL,'1','0','245','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
+REPLACE INTO `item_db` VALUES ('5195','Ribbon_Red','Red Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','2','256','0','0',NULL,'1','0','246','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
+REPLACE INTO `item_db` VALUES ('5196','Ribbon_Orange','Orange Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','2','256','0','0',NULL,'1','0','247','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
+REPLACE INTO `item_db` VALUES ('5197','Ribbon_White','White Ribbon','5','0','800','400','100','0','0','1','0','1','18446744073709551615','63','2','256','0','0',NULL,'1','0','248','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
+REPLACE INTO `item_db` VALUES ('5198','Drooping_Bunny','Evolved Drooping Bunny','5','0','10','5','100','0','0','3','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','249','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,1; bonus bFlee,2;','','');
REPLACE INTO `item_db` VALUES ('5199','Baseball_Cap_I','Baseball Cap','5','0','0','0','200','0','0','5','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','216','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('5200','Coppola','Coppola','5','0','10','5','300','0','0','0','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','252','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('5201','Party_Hat_B','Party Hat','5','0','20','10','300','0','0','4','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','144','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAllStats,3;','','');
@@ -3784,7 +3784,7 @@ REPLACE INTO `item_db` VALUES ('5677','Scorpio_Diadem','Scorpio Diadem','5','0',
REPLACE INTO `item_db` VALUES ('5678','Notation_Hairband','Musical Note Headband','5','0','200','100','100','0','0','5','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','607','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0;','','');
REPLACE INTO `item_db` VALUES ('5679','Engineer_Cap','Engineer Cap','5','0','20','10','200','0','0','2','0','1','18446744073709551615','63','2','256','0','10',NULL,'1','0','608','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('5680','Hawkeyes','Hawk Eye','5','0','20','10','100','0','0','0','0','0','18446744073709551615','63','2','512','0','10',NULL,'0','0','609','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0;','','');
-REPLACE INTO `item_db` VALUES ('5681','F_Ribbon_Green','Green Ribbon','5','0','800','400','100','0','0','1','0','0','18446744073709551615','63','0','256','0','0',NULL,'1','0','244','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
+REPLACE INTO `item_db` VALUES ('5681','F_Ribbon_Green','Green Ribbon','5','0','800','400','100','0','0','1','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','244','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
REPLACE INTO `item_db` VALUES ('5682','Triangle_Rune_Cap','Triangle Rune Cap','5','0','20','10','300','0','0','5','0','1','18446744073709551615','63','2','256','0','0',NULL,'1','0','610','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
REPLACE INTO `item_db` VALUES ('5683','Majestic_Goat_Repl','Horn Of Arch Evil Model','5','0','20','10','100','0','0','5','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','41','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('5684','Jewel_Crown_Repl','Luxurious Crown','5','0','20','10','100','0','0','5','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','88','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -3838,7 +3838,7 @@ REPLACE INTO `item_db` VALUES ('5731','E_Apple_OE_Archer_C','E Apple OE Archer C
REPLACE INTO `item_db` VALUES ('5732','E_Elven_Ears_C','E Elven Ears C','5','0','1','0','0','0','0','2','0','0','18446744073709551614','63','2','512','0','0',NULL,'0','0','73','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
REPLACE INTO `item_db` VALUES ('5733','E_Brooch_C','E Brooch C','5','0','1','0','0','0','0','0','0','0','18446744073709551614','63','2','136','0','0',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,4;','','');
REPLACE INTO `item_db` VALUES ('5734','E_Magestic_Goat_C','E Magestic Goat C','5','0','2','1','0','0','0','5','0','0','18446744073709551614','63','2','256','0','0',NULL,'0','0','41','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1;','','');
-REPLACE INTO `item_db` VALUES ('5735','E_Ribbon_Green','E Ribbon Green','5','0','800','400','100','0','0','1','0','0','18446744073709551615','63','0','256','0','0',NULL,'1','0','244','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
+REPLACE INTO `item_db` VALUES ('5735','E_Ribbon_Green','E Ribbon Green','5','0','800','400','100','0','0','1','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','244','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3;','','');
REPLACE INTO `item_db` VALUES ('5736','EF_Whisper_Mask','EF Whisper Mask','5','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','769','0','0',NULL,'0','0','321','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0; bonus bAgi,3; bonus2 bSubEle,Ele_Ghost,-10;','','');
REPLACE INTO `item_db` VALUES ('5737','Cactus_Hat','Potted Muka Hat','5','0','20','10','300','0','0','1','0','0','18446744073709551615','63','2','256','0','0',NULL,'0','0','615','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','skill SM_PROVOKE,3;','','');
REPLACE INTO `item_db` VALUES ('5738','Snowman_Hat','Snowman Hat','5','0','20','10','300','0','0','4','0','1','18446744073709551615','63','2','256','0','0',NULL,'1','0','616','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1; bonus bInt,1; bonus bMdef,3; bonus2 bSubEle,Ele_Water,7; bonus2 bAddMonsterDropItem,530,100; bonus2 bAddMonsterDropItem,12354,300; if(getrefine()>7) { bonus5 bAutoSpellWhenHit,BA_FROSTJOKER,5,20,BF_WEAPON|BF_MAGIC,0; } else { bonus5 bAutoSpellWhenHit,BA_FROSTJOKER,1,20,BF_WEAPON|BF_MAGIC,0; }','','');
@@ -3908,7 +3908,7 @@ REPLACE INTO `item_db` VALUES ('5801','Ribbon_Of_Bride','Red Tailed Ribbon','5',
REPLACE INTO `item_db` VALUES ('5802','Upgrade_Elephant_Hat','Upgrade Elephant Hat','5','0','0','0','500','0','0','6','0','1','18446744073709551615','63','2','256','0','0',NULL,'1','0','215','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('5803','Flower_Love_Hat','Love Flower Hat','5','0','20','10','100','0','0','4','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddMonsterDropItem,608,100;','','');
REPLACE INTO `item_db` VALUES ('5804','Pirate_Eyepatch','Pirate Eye Bandage','5','0','1000','500','100','0','0','0','0','0','18446744073709551615','63','2','512','0','0',NULL,'0','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('5805','Victorious_Coronet','Victorious Coronet','5','0','0','0','150','0','0','2','0','0','18446744073709551615','63','0','256','0','70',NULL,'0','0','43','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHPrate,15; bonus bSPrecovRate,5;','','');
+REPLACE INTO `item_db` VALUES ('5805','Victorious_Coronet','Victorious Coronet','5','0','0','0','150','0','0','2','0','0','18446744073709551615','63','2','256','0','70',NULL,'0','0','43','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHPrate,15; bonus bSPrecovRate,5;','','');
REPLACE INTO `item_db` VALUES ('5806','Poem_Natalia_Hat','Poem Natalia Hat','5','0','20','10','300','0','0','9','0','0','18446744073709551615','63','2','256','0','0',NULL,'0','0','67','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('5807','October_Fest_Cap','October Fest Cap','5','0','20','10','100','0','0','2','0','0','18446744073709551614','63','2','256','0','50',NULL,'1','0','104','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('5808','Diabolus_Helmet','Dark Bacilium','5','0','20','10','250','0','0','5','0','1','1040256','58','2','769','0','0',NULL,'1','0','364','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bResEff,Eff_Stone,2000+(getrefine()*200); bonus2 bResEff,Eff_Freeze,2000+(getrefine()*200); bonus2 bResEff,Eff_Stun,2000+(getrefine()*200);','','');
@@ -3977,7 +3977,7 @@ REPLACE INTO `item_db` VALUES ('5898','Autumn_Headband','Autumn Headband','5','0
REPLACE INTO `item_db` VALUES ('5899','Black_Ribbon_','Black Ribbon','5','0','0','0','200','0','0','10','0','1','128','56','2','256','0','100',NULL,'1','0','1120','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,RK_WINDCUTTER,50; bonus2 bSkillAtk,RK_SONICWAVE,50; if(getrefine()>=7) { bonus bAtk,2*(readparam(bAgi)/5); } if(getrefine()>=9) { bonus2 bSkillAtk,RK_IGNITIONBREAK,30; }','','');
REPLACE INTO `item_db` VALUES ('5900','Divine_Guard_Hat_','Divine Guard Hat','5','0','20','10','200','0','0','10','0','1','16384','56','2','256','0','100',NULL,'1','0','1121','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubSize,Size_Medium,5; bonus2 bSubSize,Size_Large,5; bonus2 bSubSize,Size_Small,5; if(getrefine()>6) { bonus5 bAutoSpellWhenHit,AL_HEAL,max(getskilllv(AL_HEAL),5),100,BF_WEAPON,0; } if(getrefine()>8) { bonus2 bSkillAtk,LG_RAYOFGENESIS,20; }','','');
REPLACE INTO `item_db` VALUES ('5904','Inconspicuous_Hat_','Inconspicuous Hat','5','0','20','10','200','0','0','10','0','1','131072','56','2','256','0','100',NULL,'1','0','1125','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,7; if(getrefine()>6) { bonus bMatk,(readparam(bInt)/5)*2; } if(getrefine()>8) { bonus bMatkRate,5; }','','');
-REPLACE INTO `item_db` VALUES ('5905','Lyrica_Hat_','Lyrica Hat','5','0','20','10','200','0','0','10','0','1','524288','56','1','256','0','100',NULL,'1','0','1126','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,WM_SEVERE_RAINSTORM_MELEE,15; if(getrefine()>6) { bonus bFixedCastrate,-(getskilllv(BA_MUSICALLESSON)*4); } if(getrefine()>8) { bonus2 bSkillUseSP,WM_SEVERE_RAINSTORM,10; }','','');
+REPLACE INTO `item_db` VALUES ('5905','Lyrica_Hat_','Lyrica Hat','5','0','20','10','200','0','0','10','0','1','524288','56','2','256','0','100',NULL,'1','0','1126','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,WM_SEVERE_RAINSTORM_MELEE,15; if(getrefine()>6) { bonus bFixedCastrate,-(getskilllv(BA_MUSICALLESSON)*4); } if(getrefine()>8) { bonus2 bSkillUseSP,WM_SEVERE_RAINSTORM,10; }','','');
REPLACE INTO `item_db` VALUES ('5906','Oni_Horns','Oni Horns','5','0','20','10','200','0','0','10','0','1','4096','56','2','256','0','100',NULL,'1','0','1127','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,GC_COUNTERSLASH,getskilllv(GC_WEAPONBLOCKING)*10; if(getrefine()>6) { bonus bAtk,10; bonus bHit,5; } if(getrefine()>8) { bonus3 bAutoSpell,GC_CROSSIMPACT,1,100; }','','');
REPLACE INTO `item_db` VALUES ('5907','Sea_Captain_Hat_','Sea Captain Hat','5','0','20','10','200','0','0','20','0','1','1024','56','2','256','0','100',NULL,'1','0','1128','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,NC_AXETORNADO,20; bonus2 bSkillAtk,NC_AXEBOOMERANG,20; if(getrefine()>6) { bonus2 bSkillAtk,NC_AXETORNADO,getskilllv(BS_WEAPONRESEARCH); } if(getrefine()>8) { bonus2 bSkillAtk,NC_AXETORNADO,getskilllv(NC_TRAININGAXE); }','','');
REPLACE INTO `item_db` VALUES ('5918','Gambler_Seal','Gambler Seal','5','0','20','10','500','0','0','0','0','0','18446744073709551615','63','2','512','0','70',NULL,'0','0','1202','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,3; bonus bCritAtkRate,3;','','');
@@ -4212,7 +4212,7 @@ REPLACE INTO `item_db` VALUES ('6217','Mandragora_Flowerpot','Mandragora Flowerp
REPLACE INTO `item_db` VALUES ('6218','Disin_Delivery_Box','Dieshin\'s Delivery 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','507',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('6219','Para_Team_Mark','Eden Group Mark','3','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','','','');
REPLACE INTO `item_db` VALUES ('6220','Mysterious_Dyestuff','Mysterious Dyestuffs','3','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','','','');
-REPLACE INTO `item_db` VALUES ('6221','Mystic_Leaf_Cat_Ball','Mystic Hydra Ball','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('6221','Mystic_Leaf_Cat_Ball','Mystic Hydra Ball','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 ('6222','Shining_Beads','Shining Beads','3','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 ('6223','Carnium','Carnium','3','0','2000','1000','150','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','','','');
REPLACE INTO `item_db` VALUES ('6224','Bradium','Bradium','3','0','2000','1000','150','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','','','');
@@ -4595,6 +4595,8 @@ REPLACE INTO `item_db` VALUES ('6656','Goast_Free_Charm','Controlling Amulet','3
REPLACE INTO `item_db` VALUES ('6657','Memory_Of_Jack','Jack Memories','3','0','0','0','0','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','','','');
REPLACE INTO `item_db` VALUES ('6658','Halloween_Coin','Halloween Coin','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('6665','RWC_Inicializer','RWC Enchant Reset Ticket','3','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','','','');
+REPLACE INTO `item_db` VALUES ('6669','Emerald_Leaf','Emerald Leaf','3','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','','','');
+REPLACE INTO `item_db` VALUES ('6670','Log_','Tree Log','3','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','','','');
REPLACE INTO `item_db` VALUES ('6671','Geffen_Magic_Coin','Geffen Magic Tournament Coin','3','0','10','5','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 ('6672','Gray_Shard','Gray Piece','3','0','0','0','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 ('6673','Bossnia_Pass','Ticket to Bossnia','3','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','','','');
@@ -4606,6 +4608,10 @@ REPLACE INTO `item_db` VALUES ('6712','Lovely_Stick','Love Wand','3','0','0','0'
REPLACE INTO `item_db` VALUES ('6746','Steel_Article','Steel Artifact','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('6747','Steel_Article_','Steel Artifact','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('6755','Corrupted_Charm','Contaminated Magic','3','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 ('6762','Banana_Can','Banana Can','3','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','','','');
+REPLACE INTO `item_db` VALUES ('6763','Spicy_Rice_Cake','Spicy Rice Cake','3','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','','','');
+REPLACE INTO `item_db` VALUES ('6764','Hot_Dog','Hot Dog','3','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','','','');
+REPLACE INTO `item_db` VALUES ('6765','Ferris_Wheel_Biscuit','Ferris Wheel Biscuit','3','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','','','');
REPLACE INTO `item_db` VALUES ('6804','ORGANIC_PUMPKIN','Organic Pumpkin','3','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 ('6805','INORGANIC_PUMPKIN','Inorganic Pumpkin','3','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 ('6821','Solo_Troops_Badge','Single Union Badge','3','0','0','0','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','','','');
@@ -5619,9 +5625,22 @@ REPLACE INTO `item_db` VALUES ('9059','Tikbalang_Pet','Tikbalang Egg','7','0','2
REPLACE INTO `item_db` VALUES ('9060','Brownie_Egg','Egg of Domovoi','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 ('9061','Marin_Egg','Marin 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 ('9062','Novice_Poring_Egg','Novice Poring 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 ('9063','Woodie_Egg','Woodie 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 ('9064','Elephant_Egg','Elephant 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 ('9065','Gorilla_Egg','Gorilla 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 ('9066','Lion_Egg','Lion 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 ('9067','Rhino_Egg','Rhino 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 ('9068','Blue_Unicorn_Egg','Blue Unicorn 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 ('9069','Mastering_Egg','Mastering 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 ('9070','Savage_Egg','Savage 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 ('9071','Grand_Peco_Peco_Egg','Grand Peco Peco 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 ('9074','Rubylit_Egg','Rubylit 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 ('9075','Sapphilit_Egg','Sapphilit 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 ('9076','Emelit_Egg','Emelit 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 ('9077','Topalit_Egg','Topalit 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 ('9078','Amelit_Egg','Amelit 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 ('9079','Mythlit_Egg','Mythlit 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 ('9080','Tamadora_Egg','Tamadora 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 ('9087','High_Orc_Egg','High Orc 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 ('9088','Angeling_Egg','Angeling 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 ('9089','Am_Mut_Egg','Am Mut 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','','','');
@@ -5649,6 +5668,16 @@ REPLACE INTO `item_db` VALUES ('9111','Phreeoni_Egg','Phreeoni Egg','7','0','20'
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 ('9115','Bacsojin2_Egg_','Bacsojin 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 ('9116','Rigid_Nightmare_Terror_Egg','Rigid Nightmare Terror 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 ('9117','Contaminated_Wanderer_Egg','Contaminated Wanderer 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 ('9118','Aliot_Egg','Aliot 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 ('9119','Alicel_Egg','Alicel 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 ('9120','Aliza_Egg','Aliza 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 ('9121','Orc_Hero_Egg_','Orc Hero 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 ('9122','Gloom_Under_Night_Egg','Gloom Under Night 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 ('9123','Child_Admin_Beta_Egg','Child Admin Beta 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 ('9124','Child_Admin_Alpha_Egg','Child Admin Alpha 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 ('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','','','');
@@ -5692,7 +5721,10 @@ REPLACE INTO `item_db` VALUES ('10036','Hell_Horn','Horn Of Hell','8','0','20','
REPLACE INTO `item_db` VALUES ('10037','Black_Butterfly_Mask','Black Butterfly 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 ('10038','Horn_Protector','Horn Barrier','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 ('10039','Tw_Backpack','Tw Backpack','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 ('10042','Dark_Mane','Dark_Mane','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('10040','Red_Bell_Necklace','Red Bell Necklace','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 ('10042','Dark_Mane','Dark_Mane','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 ('10043','Little_Headdress_Beta','Little Headdress Beta','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 ('10044','Little_Headdress_Alpha','Little Headdress Alpha','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 ('11000','Prontera_Book_01','History book of Prontera','3','0','8000','4000','10','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','','','');
REPLACE INTO `item_db` VALUES ('11001','Adventure_Story01','Adventure Story Vol.1','3','0','8000','4000','10','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','','','');
REPLACE INTO `item_db` VALUES ('11002','Great_Chef_Orleans01','Chef King Orleans Vol.1','3','0','8000','4000','10','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','','','');
@@ -5816,6 +5848,7 @@ REPLACE INTO `item_db` VALUES ('11593','Trance_Candy_B','Blue Transform Candy','
REPLACE INTO `item_db` VALUES ('11594','Trance_Candy_Y','Yellow Transform Candy','0','0','0','0','30','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(45,65),0; specialeffect(EF_CLOAKING, AREA, playerattached()); showscript \"Trans-Form-!! Jack Fo-rm!!\"; montransform JAKK, 600000, SC_MTF_PUMPKIN, 2000;','','');
REPLACE INTO `item_db` VALUES ('11595','Trance_Candy_G','Green Transform Candy','0','0','0','0','30','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(45,65),0; specialeffect(EF_CLOAKING, AREA, playerattached()); showscript \"Trans-Form-!! Cube Fo-rm!!\"; montransform QUVE, 600000, SC_MTF_HITFLEE, 10, 20;','','');
REPLACE INTO `item_db` VALUES ('11602','Catnip_Fruit','Catnip Fruit','0','0','15','7','1','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(10,40),0;','','');
+REPLACE INTO `item_db` VALUES ('11605','Cookie_Bat','Cookie Bat','0','0','0','0','50','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal(rand(50, 100), 0);','','');
REPLACE INTO `item_db` VALUES ('11607','Crepe','Crepe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('11608','Chocolate_Egg','Chocolate_Egg','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('11609','Yummy_Cookie_Egg','Yummy_Cookie_Egg','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -5823,6 +5856,7 @@ REPLACE INTO `item_db` VALUES ('11611','Pop_Corn','Pop_Corn','3','0','0','0','0'
REPLACE INTO `item_db` VALUES ('11612','Aromatic_Pop_Corn','Aromatic_Pop_Corn','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('11614','Fresh_Milk','Fresh_Milk','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('11615','Sweet_Potato_','Sweet_Potato_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('11616','Yummy_Meat','Yummy Meat','0','0','0','0','50','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('11620','Bearopy','Bearopy','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('11625','Aromatic_Pop_Corn_','Aromatic_Pop_Corn_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('11701','Girl_Bunch_Of_Flower','Girl\'s Bouquet','0','0','20','10','50','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(105,145),0;','','');
@@ -5961,10 +5995,10 @@ REPLACE INTO `item_db` VALUES ('12114','Elemental_Fire','Elemental Converter','2
REPLACE INTO `item_db` VALUES ('12115','Elemental_Water','Elemental Converter','2','0','2','1','10','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','itemskill ITEM_ENCHANTARMS,2;','','');
REPLACE INTO `item_db` VALUES ('12116','Elemental_Earth','Elemental Converter','2','0','2','1','10','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','itemskill ITEM_ENCHANTARMS,3;','','');
REPLACE INTO `item_db` VALUES ('12117','Elemental_Wind','Elemental Converter','2','0','2','1','10','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','itemskill ITEM_ENCHANTARMS,5;','','');
-REPLACE INTO `item_db` VALUES ('12118','Resist_Fire','Fireproof Potion','2','0','2','1','10','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','sc_start(SC_RESIST_PROPERTY_FIRE, 1200000, 20); sc_start(SC_RESIST_PROPERTY_WATER, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);','','');
-REPLACE INTO `item_db` VALUES ('12119','Resist_Water','Coldproof Potion','2','0','2','1','10','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','sc_start(SC_RESIST_PROPERTY_WATER, 1200000, 20); sc_start(SC_RESIST_PROPERTY_WIND, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);','','');
-REPLACE INTO `item_db` VALUES ('12120','Resist_Earth','Earthproof Potion','2','0','2','1','10','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','sc_start(SC_RESIST_PROPERTY_GROUND, 1200000, 20); sc_start(SC_RESIST_PROPERTY_FIRE, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);','','');
-REPLACE INTO `item_db` VALUES ('12121','Resist_Wind','Thunderproof Potion','2','0','2','1','10','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','sc_start(SC_RESIST_PROPERTY_WIND, 1200000, 20); sc_start(SC_RESIST_PROPERTY_GROUND, 1200000, -15, 10000, SCFLAG_NOAVOID | SCFLAG_NOICON);','','');
+REPLACE INTO `item_db` VALUES ('12118','Resist_Fire','Fireproof Potion','2','0','2','1','10','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','sc_start2(SC_RESIST_PROPERTY_FIRE, 1200000, 20, -15);','','');
+REPLACE INTO `item_db` VALUES ('12119','Resist_Water','Coldproof Potion','2','0','2','1','10','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','sc_start2(SC_RESIST_PROPERTY_WATER, 1200000, 20, -15);','','');
+REPLACE INTO `item_db` VALUES ('12120','Resist_Earth','Earthproof Potion','2','0','2','1','10','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','sc_start2(SC_RESIST_PROPERTY_GROUND, 1200000, 20, -15);','','');
+REPLACE INTO `item_db` VALUES ('12121','Resist_Wind','Thunderproof Potion','2','0','2','1','10','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','sc_start2(SC_RESIST_PROPERTY_WIND, 1200000, 20, -15);','','');
REPLACE INTO `item_db` VALUES ('12122','Sesame_Pastry','Sesame Pastry','2','0','2','1','70','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','sc_start SC_FOOD_BASICHIT,1200000,30;','','');
REPLACE INTO `item_db` VALUES ('12123','Honey_Pastry','Honey Pastry','2','0','2','1','70','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','sc_start SC_FOOD_BASICAVOIDANCE, 1200000, 30;','','');
REPLACE INTO `item_db` VALUES ('12124','Rainbow_Cake','Rainbow Cake','2','0','2','1','70','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','sc_start SC_PLUSATTACKPOWER, 1200000, 10; sc_start SC_PLUSMAGICPOWER, 120000, 10;','','');
@@ -6059,12 +6093,12 @@ REPLACE INTO `item_db` VALUES ('12212','Giant_Fly_Wing','Giant Fly Wing','2','0'
REPLACE INTO `item_db` VALUES ('12213','Neuralizer','Neuralizer','11','0','2','1','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','callfunc \"F_CashReset\";','','');
REPLACE INTO `item_db` VALUES ('12214','Convex_Mirror','Convex Mirror','2','0','2','1','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','sc_start SC_CASH_BOSS_ALARM,600000,0;','','');
REPLACE INTO `item_db` VALUES ('12215','Blessing_10_Scroll','LV10 Blessing Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(AL_BLESSING, 10, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
-REPLACE INTO `item_db` VALUES ('12216','Inc_Agi_10_Scroll','LV10 Agil Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(AL_INCAGI, 10, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
-REPLACE INTO `item_db` VALUES ('12217','Aspersio_5_Scroll','LV5 Aspersio Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(PR_ASPERSIO, 5, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
+REPLACE INTO `item_db` VALUES ('12216','Inc_Agi_10_Scroll','LV10 Agil Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(AL_INCAGI, 10, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF);','','');
+REPLACE INTO `item_db` VALUES ('12217','Aspersio_5_Scroll','LV5 Aspersio Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(PR_ASPERSIO, 5, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('12218','Assumptio_5_Scroll','LV5 Assumptio Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(HP_ASSUMPTIO, 5, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('12219','Wind_Walk_10_Scroll','LV10 Wind Walker Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(SN_WINDWALK, 10, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
-REPLACE INTO `item_db` VALUES ('12220','Adrenaline_Scroll','LV5 Adrenaline Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(BS_ADRENALINE, 5, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
-REPLACE INTO `item_db` VALUES ('12221','Megaphone_','Megaphone','2','0','2','1','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','input @megaphone$; announce strcharinfo(PC_NAME) + \": \" + @megaphone$,bc_all,0xFF0000; end;','','');
+REPLACE INTO `item_db` VALUES ('12220','Adrenaline_Scroll','LV5 Adrenaline Scroll','2','0','2','1','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill(BS_ADRENALINE, 5, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF);','','');
+REPLACE INTO `item_db` VALUES ('12221','Megaphone_','Megaphone','2','0','2','1','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','input @megaphone$; loudhailer(@megaphone$); end;','','');
REPLACE INTO `item_db` VALUES ('12225','Sweet_Candy_Striper','Sweet Candy Cane','2','0','20','10','50','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'1',NULL,'0',NULL,'0','pet GOBLIN_XMAS;','','');
REPLACE INTO `item_db` VALUES ('12226','Examination1','Examination1','0','0','20','10','50','0','0','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_MOVHASTE_INFINITY, 5400000, 100; percentheal 100, 100; sc_start SC_FOOD_STR, 5400000, 10; sc_start SC_FOOD_DEX, 5400000, 5; sc_start SC_PLUSATTACKPOWER, 5400000, 22; sc_start SC_PLUSMAGICPOWER, 5400000, 15;','','');
REPLACE INTO `item_db` VALUES ('12227','Examination2','Examination2','0','0','20','10','50','0','0','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_MOVHASTE_INFINITY, 5400000, 100; percentheal 100, 100; sc_start SC_FOOD_INT, 5400000, 8; sc_start SC_FOOD_VIT, 5400000, 7; sc_start SC_FOOD_LUK, 5400000, 7; sc_start SC_PLUSATTACKPOWER, 3600000, 20;','','');
@@ -6119,7 +6153,7 @@ REPLACE INTO `item_db` VALUES ('12275','Gold_Pill_2','Taecheongdan','0','0','0',
REPLACE INTO `item_db` VALUES ('12276','Mimic_Scroll','Mimic Scroll','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','mercenary_create M_MIMIC, 1800000;','','');
REPLACE INTO `item_db` VALUES ('12277','Disguise_Scroll','Disguise Scroll','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','mercenary_create M_DISGUISE, 1800000;','','');
REPLACE INTO `item_db` VALUES ('12278','Alice_Scroll','Alice 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','475',NULL,'0',NULL,'0',NULL,'0','mercenary_create M_ALICE, 1800000;','','');
-REPLACE INTO `item_db` VALUES ('12279','Undead_Element_Scroll','Undead Elemental Scroll','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_RESIST_PROPERTY_FIRE, 300000, 20); sc_start(SC_RESIST_PROPERTY_WATER, 300000, 20); sc_start(SC_RESIST_PROPERTY_WIND, 300000, 20); sc_start(SC_RESIST_PROPERTY_GROUND, 300000, 20);','','');
+REPLACE INTO `item_db` VALUES ('12279','Undead_Element_Scroll','Undead Elemental Scroll','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_start4(SC_ARMOR_RESIST, 300000, 20, 20, 20, 20);','','');
REPLACE INTO `item_db` VALUES ('12280','Holy_Element_Scroll','Holy Elemental Scroll','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','specialeffect(EF_BENEDICTIO, AREA, playerattached()); sc_start SC_BENEDICTIO,300000,1;','','');
REPLACE INTO `item_db` VALUES ('12281','Tresure_Box_WoE','Event Treasure Box','2','0','20','10','150','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','packageitem();','','');
REPLACE INTO `item_db` VALUES ('12282','Internet_Cafe1','Internet Cafe1','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_STR, 5400000, 3; sc_start SC_FOOD_DEX, 5400000, 3; sc_start SC_FOOD_AGI, 5400000, 3; sc_start SC_FOOD_INT, 5400000, 3; sc_start SC_FOOD_VIT, 5400000, 3; sc_start SC_FOOD_LUK, 5400000, 3; sc_start SC_PLUSATTACKPOWER, 5400000, 15; sc_start SC_PLUSMAGICPOWER, 5400000, 15;','','');
@@ -6131,7 +6165,7 @@ REPLACE INTO `item_db` VALUES ('12287','Love_Angel','Love Angel Magic Powder','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); itemskill(AL_BLESSING, 5, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
-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(0, 5); itemskill(AL_INCAGI, 5, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
+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(0, 5); itemskill(AL_INCAGI, 5, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF);','','');
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;','','');
REPLACE INTO `item_db` VALUES ('12293','Dried_Yggdrasilberry','Dried 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 0,20;','','');
REPLACE INTO `item_db` VALUES ('12294','PC_Bang_Coin_Box1','Blue Christmas Cheer Box','2','0','0','0','10','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','getitem 2740,1;','','');
@@ -6219,7 +6253,7 @@ REPLACE INTO `item_db` VALUES ('12375','Acaraje','Akaraje','2','0','0','0','80',
REPLACE INTO `item_db` VALUES ('12376','Mysterious_Can2','Mysterious Can2','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(3, 0); itemskill(PR_GLORIA, 2, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('12377','Mysterious_PET_Bottle2','Mysterious PET Bottle2','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(0, 3); itemskill(PR_MAGNIFICAT, 1, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('12378','2009_Rice_Cake_Soup','Rice Cake Soup','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','percentheal 50, 50;','','');
-REPLACE INTO `item_db` VALUES ('12379','Popes_Cookie','Pope Cookie','2','0','10','5','10','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','','','');
+REPLACE INTO `item_db` VALUES ('12379','Popes_Cookie','Pope Cookie','2','0','10','5','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','467',NULL,'0',NULL,'0',NULL,'0','specialeffect(EF_STEAL, AREA, playerattached()); sc_start4(SC_POPECOOKIE, 1200000, 3, 3, 3, 0);','','');
REPLACE INTO `item_db` VALUES ('12380','Desert_Wolf_Babe_Scroll','Job Change Flute','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','mercenary_create M_DESERT_WOLF_B, 1800000;','','');
REPLACE INTO `item_db` VALUES ('12381','ValkyrieA_Scroll','Ancient Language Scroll','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','if (strcharinfo(PC_MAP) == \"job3_arch02\") { mercenary_create VALKYRIE_A, 1800000; }','','');
REPLACE INTO `item_db` VALUES ('12382','ValkyrieB_Scroll','Ancient Language Scroll','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','if (strcharinfo(PC_MAP) == \"job3_arch02\") { mercenary_create VALKYRIE_B, 1800000; }','','');
@@ -6228,7 +6262,7 @@ REPLACE INTO `item_db` VALUES ('12384','Rainbow_Ruby_Water','Rainbow Ruby','2','
REPLACE INTO `item_db` VALUES ('12385','Rainbow_Ruby_Fire','Rainbow Ruby','2','0','0','0','50','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','if(strcharinfo(PC_MAP)==\"job3_war02\") { itemskill WL_CRIMSONROCK,5; }','','');
REPLACE INTO `item_db` VALUES ('12386','Rainbow_Ruby_Wind','Rainbow Ruby','2','0','0','0','50','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','if(strcharinfo(PC_MAP)==\"job3_war02\") { itemskill WL_CHAINLIGHTNING,5; }','','');
REPLACE INTO `item_db` VALUES ('12387','Rainbow_Ruby_Earth','Rainbow Ruby','2','0','0','0','50','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','if(strcharinfo(PC_MAP)==\"job3_war02\") { itemskill WL_EARTHSTRAIN,5; }','','');
-REPLACE INTO `item_db` VALUES ('12388','Runstone_Crush','Rhydo Runestone For Apprentice','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'1',NULL,'0',NULL,'0','if(strcharinfo(PC_MAP)==\"job3_rune02\") { itemskill RK_CRUSHSTRIKE,1; }','','');
+REPLACE INTO `item_db` VALUES ('12388','Runstone_Crush','Rhydo Runestone For Apprentice','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'1',NULL,'0',NULL,'0','if(strcharinfo(PC_MAP)==\"job3_rune02\") { itemskill(RK_CRUSHSTRIKE, 1, ISF_CHECKCONDITIONS); }','','');
REPLACE INTO `item_db` VALUES ('12389','Runstone_Storm','Pertz Runestone For Apprentice','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'1',NULL,'0',NULL,'0','if (strcharinfo(PC_MAP) == \"job3_rune02\") itemskill(RK_STORMBLAST, 1, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('12390','Runstone_Millennium','Verkana Runestone For Apprentice','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'1',NULL,'0',NULL,'0','if (strcharinfo(PC_MAP) == \"job3_rune02\") itemskill(RK_MILLENNIUMSHIELD, 1, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('12391','Lucky_Egg_C','RWC Groove Pack','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','packageitem();','','');
@@ -6244,7 +6278,7 @@ REPLACE INTO `item_db` VALUES ('12400','Water_Of_Blessing_','Water Of Blessing',
REPLACE INTO `item_db` VALUES ('12401','Rune_Kn_Test_Int','Rune Kn Test Int','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_FOOD_INT,300000,40;','','');
REPLACE INTO `item_db` VALUES ('12402','29Fruit','29Truth','0','0','0','0','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','percentheal 5,5;','','');
REPLACE INTO `item_db` VALUES ('12403','Lucky_Egg_C2','RWC2011 Lucky 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','475',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('12404','Acti_Potion','Activation Potion','2','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','','','');
+REPLACE INTO `item_db` VALUES ('12404','Acti_Potion','Activation Potion','2','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','specialeffect(EF_STEAL, AREA, playerattached()); sc_start4(SC_VITALIZE_POTION, 120000, 2, 2, 10, 0);','','');
REPLACE INTO `item_db` VALUES ('12405','Underripe_Yggseed','Unripe Seed Of Yggdrasil','2','0','20','10','50','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','percentheal(30, 30); itemskill(AL_BLESSING, 5, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('12406','Psychic_ArmorS','Psychic Armor 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','475',NULL,'0',NULL,'0',NULL,'0','specialeffect(EF_ENERGYCOAT, AREA, playerattached()); sc_start4 SC_ARMOR_PROPERTY, 10000, 1, Ele_Neutral, 1, 0;','','');
REPLACE INTO `item_db` VALUES ('12407','PCBang_Coupon_Box','PCRoom Coupon Box','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','','','');
@@ -6298,13 +6332,13 @@ REPLACE INTO `item_db` VALUES ('12454','F_WOB_Local','Blue Butterfly Wing','2','
REPLACE INTO `item_db` VALUES ('12456','F_Greed_Scroll','Greed Scroll','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','','','');
REPLACE INTO `item_db` VALUES ('12457','F_Glass_Of_Illusion','Glass Of Illusion','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','','','');
REPLACE INTO `item_db` VALUES ('12458','F_Abrasive','Abrasive','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','','','');
-REPLACE INTO `item_db` VALUES ('12459','F_Med_Life_Potion','Medium Life Potion','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','','','');
-REPLACE INTO `item_db` VALUES ('12460','F_Small_Life_Potion','Small Life Potion','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','','','');
-REPLACE INTO `item_db` VALUES ('12461','F_Regeneration_Potion','Regeneration Potion','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','','','');
-REPLACE INTO `item_db` VALUES ('12462','F_B_Mdef_Potion','Big Magic Defense Potion','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','','','');
-REPLACE INTO `item_db` VALUES ('12463','F_S_Mdef_Potion','Small Magic Defense Potion','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','','','');
-REPLACE INTO `item_db` VALUES ('12464','F_B_Def_Potion','Big Defense Potion','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','','','');
-REPLACE INTO `item_db` VALUES ('12465','F_S_Def_Potion','Small Defense Potion','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','','','');
+REPLACE INTO `item_db` VALUES ('12459','F_Med_Life_Potion','Medium Life Potion','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','specialeffect(EF_HEAL3, AREA, playerattached()); sc_start2(SC_M_LIFEPOTION, 600000, -7, 4);','','');
+REPLACE INTO `item_db` VALUES ('12460','F_Small_Life_Potion','Small Life Potion','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','specialeffect(EF_HEAL3, AREA, playerattached()); /* Probably it should be 5% instead of 7%, but we\'ll follow the client side description... */ sc_start2(SC_S_LIFEPOTION, 600000, -7, 4);','','');
+REPLACE INTO `item_db` VALUES ('12461','F_Regeneration_Potion','Regeneration Potion','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','specialeffect(EF_LIGHTSPHERE, AREA, playerattached()); sc_start(SC_HEALPLUS, 1800000, 20);','','');
+REPLACE INTO `item_db` VALUES ('12462','F_B_Mdef_Potion','Big Magic Defense Potion','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','specialeffect(EF_SPELLBREAKER, AREA, playerattached()); sc_start(SC_PROTECT_MDEF, 180000, 3);','','');
+REPLACE INTO `item_db` VALUES ('12463','F_S_Mdef_Potion','Small Magic Defense Potion','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','specialeffect(EF_SPELLBREAKER, AREA, playerattached()); sc_start(SC_PROTECT_MDEF, 60000, 3);','','');
+REPLACE INTO `item_db` VALUES ('12464','F_B_Def_Potion','Big Defense Potion','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','specialeffect(EF_GUARD, AREA, playerattached()); sc_start(SC_PROTECT_DEF, 180000, 3);','','');
+REPLACE INTO `item_db` VALUES ('12465','F_S_Def_Potion','Small Defense Potion','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','specialeffect(EF_GUARD, AREA, playerattached()); sc_start(SC_PROTECT_DEF, 60000, 3);','','');
REPLACE INTO `item_db` VALUES ('12466','F_Blessing_10_Scroll','LV10 Blessing Scroll','2','0','2','1','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 ('12467','F_Inc_Agi_10_Scroll','LV10 Agil Scroll','2','0','2','1','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 ('12468','F_Aspersio_5_Scroll','LV5 Aspersio Scroll','2','0','2','1','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','','','');
@@ -6497,10 +6531,10 @@ REPLACE INTO `item_db` VALUES ('12662','Trans_Scroll_Banshee','Transformation Sc
REPLACE INTO `item_db` VALUES ('12663','Trans_Scroll_Poring','Transformation Scroll(Poring)','2','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','specialeffect(EF_CLOAKING, AREA, playerattached()); showscript \"Trans-Form-!! Poring Fo-rm!!\"; montransform PORING, 1200000, SC_MTF_CRIDAMAGE, 5;','','');
REPLACE INTO `item_db` VALUES ('12664','Trans_Scroll_Golem','Transformation Scroll(Golem)','2','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','specialeffect(EF_CLOAKING, AREA, playerattached()); showscript \"Trans-Form-!! Golem Fo-rm!!\"; montransform GOLEM, 1200000, SC_MTF_MLEATKED, 2;','','');
REPLACE INTO `item_db` VALUES ('12665','Grovel_Buff','Grovel Buff','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','','','');
-REPLACE INTO `item_db` VALUES ('12666','Thai_Perfume_MATK','Thai Perfume(MATK)','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 ('12667','Thai_Perfume_ATK','Thai Perfume(ATK)','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 ('12668','Thai_Perfume_ASPD','Thai Perfume(ASPD)','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 ('12669','Thai_Perfume_CAST','Thai Perfume(CAST)','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 ('12666','Thai_Perfume_MATK','Thai Perfume(MATK)','2','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','specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); sc_start(SC_SKF_MATK, 600000, 24);','','');
+REPLACE INTO `item_db` VALUES ('12667','Thai_Perfume_ATK','Thai Perfume(ATK)','2','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','specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); sc_start(SC_SKF_ATK, 600000, 24);','','');
+REPLACE INTO `item_db` VALUES ('12668','Thai_Perfume_ASPD','Thai Perfume(ASPD)','2','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','specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); sc_start(SC_SKF_ASPD, 600000, 3);','','');
+REPLACE INTO `item_db` VALUES ('12669','Thai_Perfume_CAST','Thai Perfume(CAST)','2','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','specialeffect(EF_MAGICALATTHIT, AREA, playerattached()); sc_start(SC_SKF_CAST, 600000, 5);','','');
REPLACE INTO `item_db` VALUES ('12670','Beast_Powder','Beast Powder','11','0','20','10','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','','','');
REPLACE INTO `item_db` VALUES ('12671','99lv_Battle_Manual','99lv Battle Manual','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 ('12672','Start_New_Box','Start New Box','2','0','20','10','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','getitem Old_Violet_Box, 2; getitem Comp_Battle_Manual, 2; getitem Recall_MaleGM, 3; getitem Recall_FemaleGM, 2;','','');
@@ -6557,7 +6591,7 @@ REPLACE INTO `item_db` VALUES ('12722','Poison_Fever','Pyrexia','0','0','2','1',
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','2','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','2','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 ('12726','Runstone_Rhydo','Rhydo Runestone','2','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, ISF_CHECKCONDITIONS);','','');
REPLACE INTO `item_db` VALUES ('12727','Runstone_Verkana','Verkana Runestone','2','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','2','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','2','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;','','');
@@ -6669,6 +6703,7 @@ REPLACE INTO `item_db` VALUES ('12879','Elf_Tear_Sleep','Elf Tear Sleep','2','0'
REPLACE INTO `item_db` VALUES ('12880','Elf_Tear_Curse','Elf Tear Curse','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','autobonus \"{ heal -3000,0; bonus2 bResEff,Eff_Curse,10000; }\",10,0,0,SI_GVG_CURSE;','','');
REPLACE INTO `item_db` VALUES ('12881','Elf_Tear_Silence','Elf Tear Silence','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','autobonus \"{ heal -3000,0; bonus2 bResEff,Eff_Silence,10000; }\",10,0,0,SI_GVG_SILENCE;','','');
REPLACE INTO `item_db` VALUES ('12882','Elf_Tear_Blind','Elf Tear Blind','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','autobonus \"{ heal -3000,0; bonus2 bResEff,Eff_Blind,10000; }\",10,0,0,SI_GVG_BLIND;','','');
+REPLACE INTO `item_db` VALUES ('12883','Almighty','Almighty','2','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','specialeffect(EF_BASH3D, AREA, playerattached()); sc_start(SC_FOOD_STR_CASH, 1800000, 10); sc_start(SC_FOOD_VIT_CASH, 1800000, 10); sc_start(SC_FOOD_AGI_CASH, 1800000, 10); sc_start(SC_FOOD_INT_CASH, 1800000, 10); sc_start(SC_FOOD_DEX_CASH, 1800000, 10); sc_start(SC_FOOD_LUK_CASH, 1800000, 10); sc_start2(SC_ALMIGHTY, 1800000, 30, 30);','','');
REPLACE INTO `item_db` VALUES ('12884','C_Center_Potion','Infinite Concentration Potion','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','sc_start SC_ATTHASTE_POTION1,1800000,4; specialeffect(EF_POTION_CON, AREA, playerattached()); /* NOTE: No special effect when used. */','','');
REPLACE INTO `item_db` VALUES ('12885','C_Awakening_Potion','Infinite Awakening Potion','11','0','0','0','0','0','0','0','0','0','2145902319','63','2','0','0','40',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','sc_start SC_ATTHASTE_POTION2,1800000,6; specialeffect(EF_POTION_, AREA, playerattached()); /* NOTE: No special effect when used. */','','');
REPLACE INTO `item_db` VALUES ('12886','C_Berserk_Potion','Infinite Berserk Potion','11','0','0','0','0','0','0','0','0','0','31868582','63','2','0','0','85',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','sc_start SC_ATTHASTE_POTION3,1800000,9; specialeffect(EF_POTION_BERSERK, AREA, playerattached()); /* NOTE: No special effect when used. */','','');
@@ -7949,10 +7984,10 @@ REPLACE INTO `item_db` VALUES ('14513','Storm_10_Scroll','Storm Gust Scroll','2'
REPLACE INTO `item_db` VALUES ('14514','Vermilion_10_Scroll','Lord of Vermilion Scroll','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','itemskill WZ_VERMILION,10;','','');
REPLACE INTO `item_db` VALUES ('14515','Lex_Aeterna_Scroll','Lex Aeterna Scroll','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','itemskill PR_LEXAETERNA,1;','','');
REPLACE INTO `item_db` VALUES ('14516','Magnificat_5_Scroll','Magnificat Scroll','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','itemskill PR_MAGNIFICAT,5;','','');
-REPLACE INTO `item_db` VALUES ('14517','CP_Helm_Scroll','Chemical Protection Helm Scroll','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','itemskill(AM_CP_HELM, 5);','','');
-REPLACE INTO `item_db` VALUES ('14518','CP_Shield_Scroll','Chemical Protection Shield Scrol','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','itemskill(AM_CP_SHIELD, 5);','','');
-REPLACE INTO `item_db` VALUES ('14519','CP_Armor_Scroll','Chemical Protection Armor Scroll','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','itemskill(AM_CP_ARMOR, 5);','','');
-REPLACE INTO `item_db` VALUES ('14520','CP_Weapon_Scroll','Chemical Protection Weapon Scroll','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','itemskill(AM_CP_WEAPON, 5);','','');
+REPLACE INTO `item_db` VALUES ('14517','CP_Helm_Scroll','Chemical Protection Helm Scroll','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','itemskill(AM_CP_HELM, 5, ISF_CHECKCONDITIONS);','','');
+REPLACE INTO `item_db` VALUES ('14518','CP_Shield_Scroll','Chemical Protection Shield Scrol','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','itemskill(AM_CP_SHIELD, 5, ISF_CHECKCONDITIONS);','','');
+REPLACE INTO `item_db` VALUES ('14519','CP_Armor_Scroll','Chemical Protection Armor Scroll','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','itemskill(AM_CP_ARMOR, 5, ISF_CHECKCONDITIONS);','','');
+REPLACE INTO `item_db` VALUES ('14520','CP_Weapon_Scroll','Chemical Protection Weapon Scroll','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','itemskill(AM_CP_WEAPON, 5, ISF_CHECKCONDITIONS);','','');
REPLACE INTO `item_db` VALUES ('14521','Repair_Scroll','Repair Weapon Scroll','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,'1',NULL,'0',NULL,'0','itemskill(BS_REPAIRWEAPON, 1);','','');
REPLACE INTO `item_db` VALUES ('14522','Big_Bun','Big Bun','0','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','percentheal 100,0;','','');
REPLACE INTO `item_db` VALUES ('14523','Pill_','Pill','0','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','percentheal 0,100;','','');
@@ -8021,7 +8056,7 @@ REPLACE INTO `item_db` VALUES ('14585','WOB_Local','Blue Butterfly Wing','2','0'
REPLACE INTO `item_db` VALUES ('14586','Spark_Candy','Jumping Candy','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','180000','475',NULL,'0',NULL,'0',NULL,'0','specialeffect(EF_HASTEUP, AREA, playerattached()); sc_start2 SC_STEAMPACK, 60000, 20, 25;','','');
REPLACE INTO `item_db` VALUES ('14587','Repair_Scroll_','Equipment Repair Spell Book','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,'1',NULL,'0',NULL,'0','itemskill BS_REPAIRWEAPON,1;','','');
REPLACE INTO `item_db` VALUES ('14588','Pty_Blessing_Scroll','Party Blessing 10 Scroll','2','0','10','5','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','itemskill(CASH_BLESSING, 10, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
-REPLACE INTO `item_db` VALUES ('14589','Pty_Inc_Agi_Scroll','Party Increase Agi 10 Scroll','2','0','10','5','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','itemskill(CASH_INCAGI, 10, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
+REPLACE INTO `item_db` VALUES ('14589','Pty_Inc_Agi_Scroll','Party Increase Agi 10 Scroll','2','0','10','5','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','itemskill(CASH_INCAGI, 10, ISF_CHECKCONDITIONS | ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('14590','Pty_Assumptio_Scroll','Party Assumptio 5 Scroll','2','0','10','5','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','itemskill(CASH_ASSUMPTIO, 5, ISF_INSTANTCAST | ISF_CASTONSELF);','','');
REPLACE INTO `item_db` VALUES ('14591','Siege_Teleport_Scroll','WoE Teleport Scroll','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,'1',NULL,'0',NULL,'0','callfunc \"F_CashSiegeTele\";','','');
REPLACE INTO `item_db` VALUES ('14592','Job_Manual50','Job Battle Manual','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,'1',NULL,'0',NULL,'0','sc_start SC_CASH_PLUSONLYJOBEXP,1800000,50;','','');
@@ -8235,7 +8270,7 @@ REPLACE INTO `item_db` VALUES ('16249','Knight_Gift_Box','Knight\'s Gift Box','2
REPLACE INTO `item_db` VALUES ('16251','Gemini_Diadem_Box','Gemini Diadem 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 5569,1;','','');
REPLACE INTO `item_db` VALUES ('16252','Gemini_Crown_Box','Gemini Crown 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 5570,1;','','');
REPLACE INTO `item_db` VALUES ('16253','Rabbit_Scroll','Rabbit Scroll','2','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 ('16254','Energizing_Potion_Box','Activation Potion 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','','','');
+REPLACE INTO `item_db` VALUES ('16254','Energizing_Potion_Box','Activation Potion 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(Acti_Potion, 5);','','');
REPLACE INTO `item_db` VALUES ('16257','Buddah_Scroll','French Heart 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','packageitem();','','');
REPLACE INTO `item_db` VALUES ('16258','HD_Bradium_Box5','HD Bradium 5 Box','2','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 6226,5;','','');
REPLACE INTO `item_db` VALUES ('16259','HD_Carnium_Box5','HD Carnium 5 Box','2','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 6225,5;','','');
@@ -8537,6 +8572,7 @@ REPLACE INTO `item_db` VALUES ('17209','Tw_Rainbow_Scroll','Tw Rainbow Scroll','
REPLACE INTO `item_db` VALUES ('17210','Tw_Red_Scroll','Tw Red Scroll','2','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','packageitem();','','');
REPLACE INTO `item_db` VALUES ('17211','Tw_Orange_Scroll','Tw Orange Scroll','2','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','packageitem();','','');
REPLACE INTO `item_db` VALUES ('17212','Tw_Yellow_Scroll','Tw Yellow Scroll','2','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','packageitem();','','');
+REPLACE INTO `item_db` VALUES ('17224','Almighty_Box','Almighty Box','18','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','getitem(Almighty, 10);','','');
REPLACE INTO `item_db` VALUES ('17226','C_Center_Potion_Box','Infinite Concentration Potion Box','18','0','10','5','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','rentitem C_Center_Potion,604800;','','');
REPLACE INTO `item_db` VALUES ('17227','C_Awakening_Potion_Box','Infinite Awakening Potion Box','18','0','10','5','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','rentitem C_Awakening_Potion,604800;','','');
REPLACE INTO `item_db` VALUES ('17228','C_Berserk_Potion_Box','Infinite Berserk Potion Box','18','0','10','5','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','rentitem Infinite_Berserk_Potion,604800;','','');
@@ -8712,7 +8748,7 @@ REPLACE INTO `item_db` VALUES ('18576','YinYang_Earring','Yin Yang Earrings','5'
REPLACE INTO `item_db` VALUES ('18577','24_Bolt','Screw Stuck Head','5','0','20','10','200','0','0','0','0','0','18446744073709551615','63','2','512','0','10',NULL,'0','0','696','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18578','Helm_Of_Valor','Helm Of Valor','5','0','0','0','0','0','0','4','0','0','18446744073709551615','63','2','256','0','0',NULL,'0','0','258','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18579','9th_Anni_Hat','kRO 9 Anniversary Hat','5','0','0','0','90','0','0','0','0','0','18446744073709551615','63','2','256','0','0',NULL,'1','0','745','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0; bonus bMdef,9;','','');
-REPLACE INTO `item_db` VALUES ('18580','Yggdrasil_Crown','Yggdrasil Crown','5','0','20','10','200','0','0','3','0','1','18446744073709551615','63','1','256','0','0',NULL,'1','0','746','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,2; bonus bInt,2; bonus bHealPower,1; bonus bHealPower2,1; if(getrefine() >= 7) { bonus bHealPower,5; } if(getrefine() >= 9) { bonus bHealPower,3; }','','');
+REPLACE INTO `item_db` VALUES ('18580','Yggdrasil_Crown','Yggdrasil Crown','5','0','20','10','200','0','0','3','0','1','18446744073709551615','63','2','256','0','0',NULL,'1','0','746','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,2; bonus bInt,2; bonus bHealPower,1; bonus bHealPower2,1; if(getrefine() >= 7) { bonus bHealPower,5; } if(getrefine() >= 9) { bonus bHealPower,3; }','','');
REPLACE INTO `item_db` VALUES ('18581','Red_Tiger_Mask','Red Tiger Mask','5','0','20','10','400','0','0','2','0','0','18446744073709551615','63','2','768','0','50',NULL,'0','0','747','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,3;','','');
REPLACE INTO `item_db` VALUES ('18582','Blue_Tiger_Mask','Blue Tiger Mask','5','0','20','10','400','0','0','2','0','0','18446744073709551615','63','2','768','0','50',NULL,'0','0','748','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,3;','','');
REPLACE INTO `item_db` VALUES ('18583','Navy_Drooping_Kitty','Navy Drooping Kitty','5','0','250000','125000','500','0','0','3','0','0','18446744073709551614','63','2','256','0','0',NULL,'1','0','749','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,15;','','');
@@ -10037,6 +10073,9 @@ REPLACE INTO `item_db` VALUES ('22808','Special_Gift_Box','Special Gift Box','2'
REPLACE INTO `item_db` VALUES ('22837','Integer_Time','Integer Time','2','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','50',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','TmpRouletteBronze += 1;','','');
REPLACE INTO `item_db` VALUES ('22838','Something_Candy_Holder','Pumpkin Candy Holder','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','getrandgroupitem 22838,1;','','');
REPLACE INTO `item_db` VALUES ('22876','Old_Money_Pocket','Old Money Pocket','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','Zeny += rand(500, 550);','','');
+REPLACE INTO `item_db` VALUES ('23187','Sap_Jelly','Sap Jelly','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,'1',NULL,'0',NULL,'0','pet(NINE_TAIL);','','');
+REPLACE INTO `item_db` VALUES ('23188','Unprocessed_Parts','Unprocessed Parts','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,'1',NULL,'0',NULL,'0','pet(GREMLIN);','','');
+REPLACE INTO `item_db` VALUES ('23189','SmallDoll_Needle','Small Doll Needle','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,'1',NULL,'0',NULL,'0','pet(TEDDY_BEAR);','','');
REPLACE INTO `item_db` VALUES ('23242','Fried_Chicken','Fried_Chicken','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23243','Fried_Chicken_1','Fried_Chicken_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 ('23256','Elixir_Bandage','Elixir_Bandage','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -10690,6 +10729,9 @@ REPLACE INTO `item_db` VALUES ('24581','S_Genesis_Weapon','S_Genesis_Weapon','3'
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 ('25187','Slug_Bullet','Slug Bullet','3','0','1200','600','1200','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25231','Suspicious_Bottle','Suspicious Bottle','3','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','','','');
+REPLACE INTO `item_db` VALUES ('25232','Cheap_Lubricant','Cheap Lubricant','3','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','','','');
+REPLACE INTO `item_db` VALUES ('25233','Cotton_Tufts','Cotton Tufts','3','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','','','');
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','','','');
@@ -10699,6 +10741,7 @@ REPLACE INTO `item_db` VALUES ('25294','Clover_Ticket','Clover_Ticket','3','0','
REPLACE INTO `item_db` VALUES ('25295','Happiness_Clover','Happiness_Clover','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25340','Golden_Corn','Golden_Corn','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25375','Mightysoul_Essence','Mightysoul_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 ('25377','Luxurious_Pet_Food','Luxurious Pet Food','3','0','0','0','1','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25390','Captured_Savage','Captured_Savage','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25391','Goodly_Bough','Goodly_Bough','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25392','Free_Pass_Ticket','Free_Pass_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','','','');
@@ -10850,6 +10893,8 @@ REPLACE INTO `item_db` VALUES ('26164','ElectricFox_OS','ElectricFox_OS','3','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 ('27352','Rigid_Nightmare_Terror_Card','Rigid Nightmare Terror 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(bMaxSPrate, 5);','','');
+REPLACE INTO `item_db` VALUES ('27361','Contaminated_Wanderer_Card','Contaminated Wanderer 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','bonus2(bAddSize,Size_Medium, 30); bonus2(bAddSize,Size_Large, 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;');
REPLACE INTO `item_db` VALUES ('28001','Katar_Of_Evil_Slayer','Evil Slayer Ripper Katar','4','16','20','10','1200','120','0','0','1','1','4096','56','2','34','3','100',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_Demon,10; bonus2 bAddRace,RC_Undead,10; if(getrefine()>8) { bonus bAtkRate,5; } if(getrefine()>11) { bonus bAtkRate,7; }','','');
REPLACE INTO `item_db` VALUES ('28002','Half_BF_Katar2','Half BF Katar2','4','16','20','10','0','130','0','0','1','0','4096','63','2','34','3','80',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1; bonus bDex,1; bonus bLuk,1; bonus2 bAddRace,RC_DemiPlayer,35; bonus bCritAtkRate,10; bonus bAspdRate,3; bonus bUnbreakableWeapon,0;','','');
@@ -10997,6 +11042,7 @@ REPLACE INTO `item_db` VALUES ('29589','GH_Cursed_Gemstone_','GH_Cursed_Gemstone
REPLACE INTO `item_db` VALUES ('29590','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 ('29591','Cursed_Emerald','Cursed_Emerald','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('29592','Shinee_Opal','Shinee_Opal','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31022','Abandoned_Teddy_Bear_Card','Abandoned Teddy Bear 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(bMaxSPrate, 20); bonus2(bAddEff2, Eff_Curse, 20);','','');
REPLACE INTO `item_db` VALUES ('31172','Roast_Memory','Roast_Memory','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31186','C_Black_Cat','C_Black_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 ('31195','Choco_Minihat','Choco_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','','','');
@@ -11290,6 +11336,7 @@ REPLACE INTO `item_db` VALUES ('1000016','HighpriestStone_Top2','HighpriestStone
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 ('1000103','Barmil_Ticket','Barmil Ticket','3','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','','','');
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','','','');
@@ -11302,3 +11349,4 @@ REPLACE INTO `item_db` VALUES ('1000221','GuillcrossStone_Robe2','GuillcrossSton
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','','','');
+REPLACE INTO `item_db` VALUES ('1000227','Cloud_Cotton','Cloud Cotton','3','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','','','');
diff --git a/sql-files/main.sql b/sql-files/main.sql
index 4e75ccc8b..7aebd73fd 100644
--- a/sql-files/main.sql
+++ b/sql-files/main.sql
@@ -51,7 +51,7 @@ CREATE TABLE IF NOT EXISTS `acc_reg_str_db` (
`account_id` INT UNSIGNED NOT NULL DEFAULT '0',
`key` VARCHAR(32) BINARY NOT NULL DEFAULT '',
`index` INT UNSIGNED NOT NULL DEFAULT '0',
- `value` VARCHAR(254) NOT NULL DEFAULT '0',
+ `value` VARCHAR(255) NOT NULL DEFAULT '0',
PRIMARY KEY (`account_id`,`key`,`index`),
KEY `account_id` (`account_id`)
) ENGINE=MyISAM;
@@ -275,7 +275,7 @@ CREATE TABLE IF NOT EXISTS `char_reg_str_db` (
`char_id` INT UNSIGNED NOT NULL DEFAULT '0',
`key` VARCHAR(32) BINARY NOT NULL DEFAULT '',
`index` INT UNSIGNED NOT NULL DEFAULT '0',
- `value` VARCHAR(254) NOT NULL DEFAULT '0',
+ `value` VARCHAR(255) NOT NULL DEFAULT '0',
PRIMARY KEY (`char_id`,`key`,`index`),
KEY `char_id` (`char_id`)
) ENGINE=MyISAM;
@@ -372,7 +372,7 @@ CREATE TABLE IF NOT EXISTS `global_acc_reg_str_db` (
`account_id` INT UNSIGNED NOT NULL DEFAULT '0',
`key` VARCHAR(32) BINARY NOT NULL DEFAULT '',
`index` INT UNSIGNED NOT NULL DEFAULT '0',
- `value` VARCHAR(254) NOT NULL DEFAULT '0',
+ `value` VARCHAR(255) NOT NULL DEFAULT '0',
PRIMARY KEY (`account_id`,`key`,`index`),
KEY `account_id` (`account_id`)
) ENGINE=MyISAM;
@@ -617,7 +617,7 @@ CREATE TABLE IF NOT EXISTS `inventory` (
--
CREATE TABLE IF NOT EXISTS `ipbanlist` (
- `list` VARCHAR(13) NOT NULL DEFAULT '',
+ `list` VARCHAR(39) NOT NULL DEFAULT '',
`btime` DATETIME NULL,
`rtime` DATETIME NULL,
`reason` VARCHAR(255) NOT NULL DEFAULT '',
@@ -630,7 +630,7 @@ CREATE TABLE IF NOT EXISTS `ipbanlist` (
CREATE TABLE IF NOT EXISTS `login` (
`account_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
- `userid` VARCHAR(23) NOT NULL DEFAULT '',
+ `userid` VARCHAR(23) NOT NULL,
`user_pass` VARCHAR(32) NOT NULL DEFAULT '',
`sex` ENUM('M','F','S') NOT NULL DEFAULT 'M',
`email` VARCHAR(39) NOT NULL DEFAULT '',
@@ -646,7 +646,7 @@ CREATE TABLE IF NOT EXISTS `login` (
`pincode` VARCHAR(4) NOT NULL DEFAULT '',
`pincode_change` INT UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (`account_id`),
- KEY `name` (`userid`)
+ UNIQUE KEY `name` (`userid`)
) ENGINE=MyISAM AUTO_INCREMENT=2000000;
-- added standard accounts for servers, VERY INSECURE!!!
@@ -655,14 +655,25 @@ CREATE TABLE IF NOT EXISTS `login` (
INSERT IGNORE INTO `login` (`account_id`, `userid`, `user_pass`, `sex`, `email`) VALUES ('1', 's1', 'p1', 'S','athena@athena.com');
--
--- Table structure for table `mapreg`
+-- Table structure for table `map_reg_num_db`
--
-CREATE TABLE IF NOT EXISTS `mapreg` (
- `varname` VARCHAR(32) BINARY NOT NULL,
+CREATE TABLE IF NOT EXISTS `map_reg_num_db` (
+ `key` VARCHAR(32) BINARY NOT NULL DEFAULT '',
+ `index` INT UNSIGNED NOT NULL DEFAULT '0',
+ `value` INT NOT NULL DEFAULT '0',
+ PRIMARY KEY (`key`, `index`)
+) ENGINE=MyISAM;
+
+--
+-- Table structure for table `map_reg_str_db`
+--
+
+CREATE TABLE IF NOT EXISTS `map_reg_str_db` (
+ `key` VARCHAR(32) BINARY NOT NULL DEFAULT '',
`index` INT UNSIGNED NOT NULL DEFAULT '0',
- `value` VARCHAR(255) NOT NULL,
- PRIMARY KEY (`varname`,`index`)
+ `value` VARCHAR(255) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`key`, `index`)
) ENGINE=MyISAM;
--
@@ -936,6 +947,10 @@ INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1570309293); -- 2019-10-0
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1570870260); -- 2019-10-21--14-21.sql
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1574463539); -- 2019-11-22--23-58.sql
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1579817630); -- 2020-01-24--01-09.sql
+INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1584838560); -- 2020-03-22--01-56.sql
+INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1584842940); -- 2020-03-22--03-09.sql
+INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1588301040); -- 2020-05-01--04-44.sql
+INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1589145060); -- 2020-05-10--23-11.sql
--
-- Table structure for table `storage`
diff --git a/sql-files/mob_db.sql b/sql-files/mob_db.sql
index 2fdd722a1..68f365d7b 100644
--- a/sql-files/mob_db.sql
+++ b/sql-files/mob_db.sql
@@ -1095,3 +1095,4 @@ REPLACE INTO `mob_db` VALUES (2081,'E_HYDRA','Suspicious Hydra','Strange Hydra',
REPLACE INTO `mob_db` VALUES (2082,'G_PIRANHA','Piranha','Piranha',75,4522,1,0,0,1,182,223,2,10,69,45,30,30,66,35,10,12,1,5,61,12949,200,768,768,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (2210,'XMAS_LUNATIC','Xmas Lunatic','Xmas Lunatic',1,100,1,0,0,1,1,1,0,0,10,1,1,1,1,1,10,12,0,2,20,131,200,1456,456,336,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 (2308,'KO_KAGE','Zanzou','Zanzou',1,50,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,7,20,0,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db` VALUES (2248,'GOLDPORING','Golden Poring','Golden Poring',1,15,1,0,0,0,0,0,127,5,1,1,1,1,999,1,10,12,1,3,21,129,400,1872,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
diff --git a/sql-files/mob_db_re.sql b/sql-files/mob_db_re.sql
index 713054e9c..ff2bd6304 100644
--- a/sql-files/mob_db_re.sql
+++ b/sql-files/mob_db_re.sql
@@ -178,7 +178,7 @@ REPLACE INTO `mob_db` VALUES (1094,'AMBERNITE','Ambernite','Ambernite',19,340,1,
REPLACE INTO `mob_db` VALUES (1095,'ANDRE','Andre','Andre',33,724,1,216,243,1,51,21,55,16,11,20,40,10,24,10,10,12,0,4,22,4481,300,1288,288,384,0,0,0,0,0,0,0,955,9000,910,1000,938,500,993,50,1001,4,1002,350,757,28,0,0,0,0,4043,1);
REPLACE INTO `mob_db` VALUES (1096,'ANGELING','Angeling','Angeling',77,19800,1,3366,2693,1,391,145,72,238,58,50,33,105,80,200,10,12,1,8,86,14261,200,1072,672,672,0,0,0,0,0,0,0,2254,100,2324,60,610,500,2282,1,509,2000,512,28,714,40,0,0,0,0,4054,1);
REPLACE INTO `mob_db` VALUES (1097,'ANT_EGG','Ant Egg','Ant Egg',28,530,1,180,203,0,1,1,68,45,5,1,65,5,10,30,10,12,0,0,60,0,1000,1001,199,1,0,0,0,0,0,0,0,1010,320,935,2000,909,2000,938,650,713,2000,1002,200,0,0,0,0,0,0,4013,1);
-REPLACE INTO `mob_db` VALUES (1098,'ANUBIS','Anubis','Anubis',105,38826,1,6026,2725,1,984,415,103,48,88,67,40,128,107,55,10,12,2,7,49,13973,150,1250,720,576,0,0,0,0,0,0,0,12735,10,1625,10,15042,100,984,105,1045,4365,2617,1,1614,3,0,0,0,0,4138,1);
+REPLACE INTO `mob_db` VALUES (1098,'ANUBIS','Anubis','Anubis',105,38826,1,6026,2725,1,984,415,103,48,88,67,40,128,107,55,10,12,2,7,49,13973,150,1250,720,576,0,0,0,0,0,0,0,12735,10,1625,10,15042,50,984,105,1045,4365,2617,1,1614,3,0,0,0,0,4138,1);
REPLACE INTO `mob_db` VALUES (1099,'ARGIOPE','Argiope','Argiope',75,3105,1,890,912,1,321,50,88,32,60,23,40,30,24,30,10,12,2,4,25,14229,300,1792,792,336,0,0,0,0,0,0,0,1042,5335,912,1200,757,175,2406,5,511,1500,719,10,0,0,0,0,0,0,4114,1);
REPLACE INTO `mob_db` VALUES (1100,'ARGOS','Argos','Argos',47,1005,1,360,405,1,96,33,58,8,38,17,25,5,26,15,10,12,2,4,25,12693,300,1468,468,768,0,0,0,0,0,0,0,1025,9000,911,1200,1042,500,757,61,511,670,508,250,10017,15,0,0,0,0,4075,1);
REPLACE INTO `mob_db` VALUES (1101,'BAPHOMET_','Baphomet Jr.','Baphomet Jr.',57,2035,1,510,548,1,195,33,70,25,52,60,36,17,57,25,10,12,0,6,27,14229,100,868,480,120,0,0,0,0,0,0,0,923,500,984,63,1464,2,607,50,610,100,508,1300,2405,50,0,0,0,0,4129,1);
@@ -1634,7 +1634,7 @@ REPLACE INTO `mob_db` VALUES (2769,'C1_MAGMARING','Swift Magmaring','Swift Magma
REPLACE INTO `mob_db` VALUES (2770,'C2_LUNATIC','Solid Lunatic','Solid Lunatic',3,550,1,90,195,1,23,5,18,0,10,3,3,0,8,5,10,12,0,2,60,129,200,1456,456,336,0,0,0,0,0,0,0,705,6500,949,1000,512,10000,601,5000,515,10000,2262,1100,622,20,0,0,0,0,4006,1);
REPLACE INTO `mob_db` VALUES (2771,'C3_LUNATIC','Lunatic Ringleader','Lunatic Ringleader',3,275,1,90,195,1,23,5,18,0,10,3,3,0,8,5,10,12,0,2,60,129,200,1456,456,336,0,0,0,0,0,0,0,705,6500,949,1000,2262,4,512,2000,601,600,515,1100,622,20,0,0,0,0,4006,1);
REPLACE INTO `mob_db` VALUES (2772,'C4_LUDE','Furious Lude','Furious Lude',101,57870,1,5075,11400,2,468,135,90,53,97,49,55,82,83,55,10,12,0,1,29,14469,150,960,960,480,0,0,0,0,0,0,0,7225,3200,7220,5723,1059,1000,2282,10,757,10,12001,100,6246,300,0,0,0,0,4193,1);
-REPLACE INTO `mob_db` VALUES (2773,'C5_LUCIOLA_VESPA','Elusive Luciola Vespa','Elusive Luciola Vespa',109,62330,1,7365,16245,1,761,283,59,55,88,89,55,32,143,59,10,12,1,4,24,30613,110,1000,864,432,0,0,0,0,0,0,0,2744,2,6224,1,15043,9000,518,300,992,160,526,200,943,3000,0,0,0,0,4445,1);
+REPLACE INTO `mob_db` VALUES (2773,'C5_LUCIOLA_VESPA','Elusive Luciola Vespa','Elusive Luciola Vespa',109,62330,1,7365,16245,1,761,283,59,55,88,89,55,32,143,59,10,12,1,4,24,30613,110,1000,864,432,0,0,0,0,0,0,0,2744,2,6224,1,15043,25,518,300,992,160,526,200,943,3000,0,0,0,0,4445,1);
REPLACE INTO `mob_db` VALUES (2774,'C1_LOLI_RURI','Swift Loli Ruri','Swift Loli Ruri',109,76400,1,8370,18825,2,1297,539,53,44,111,50,47,79,95,79,10,12,2,6,87,14725,125,1632,1632,576,0,0,0,0,0,0,0,7206,800,7219,3000,7214,5044,985,100,7019,1,2718,5,15038,100,0,0,0,0,4191,1);
REPLACE INTO `mob_db` VALUES (2775,'C2_LIVE_PEACH_TREE','Solid Enchanted Peach T','Solid Enchanted Peach T',92,87770,1,4495,12930,7,504,169,109,40,76,52,55,40,92,50,10,12,1,3,42,8325,410,672,672,480,0,0,0,0,0,0,0,7164,4365,7939,100,526,1000,604,400,532,100,603,5,0,0,0,0,0,0,4217,1);
REPLACE INTO `mob_db` VALUES (2776,'C3_LITTLE_PORING','Baby Poring Ringleader','Baby Poring Ringleader',1,200,1,90,150,1,14,3,2,5,6,1,1,0,6,5,10,12,0,3,21,131,400,1872,672,480,0,0,0,0,0,0,0,909,9000,1202,100,938,1000,512,5000,507,1000,512,500,507,1000,0,0,0,0,4545,100);
@@ -1806,14 +1806,45 @@ REPLACE INTO `mob_db` VALUES (2957,'FORGOTTEN_NAME','Forgotten Name','Forgotten
REPLACE INTO `mob_db` VALUES (2958,'FATAL_DAYS','Fatal Days','Fatal Days',120,24240,1,2052,2026,2,1025,403,84,41,100,71,63,85,115,37,10,12,1,6,67,14469,170,720,384,480,0,0,0,0,0,0,0,1038,2500,1050,2500,6672,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (2959,'TORTUROUS_REDEEMER','Torturous Redeemer','Torturous Redeemer',120,103342,1,10599,8378,1,1253,500,144,28,133,69,72,55,165,44,10,12,1,7,62,14757,200,672,420,360,0,0,0,0,0,0,0,923,2000,6672,10000,6672,10000,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (2961,'E_TORTUROUS_REDEEMER','Torturous Redeemer','Torturous Redeemer',120,103342,1,1,1,1,1,1,144,28,1,1,1,1,1,1,10,12,1,7,62,14757,200,672,420,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db` VALUES (2963,'WOODIE','Woodie','Woodie',1,60,1,18,10,1,13,3,2,5,6,1,1,0,6,5,10,12,0,3,21,131,400,1872,672,480,0,0,0,0,0,0,0,7203,2000,907,2000,7201,2000,1019,2000,756,200,6670,5000,0,0,0,0,0,0,4558,300);
+REPLACE INTO `mob_db` VALUES (2995,'XM_TEDDY_BEAR','Abandoned Teddy Bear','Abandoned Teddy Bear',148,180000,1,6666,7332,1,1347,577,106,44,44,166,44,44,166,44,10,12,0,6,69,13205,150,780,780,504,0,0,0,0,0,0,0,7317,1900,615,150,12074,100,12734,1000,12738,100,0,0,0,0,0,0,0,0,31022,1);
REPLACE INTO `mob_db` VALUES (2996,'XM_CELINE_KIMI','Celine Kimi','Celine Kimi',160,66666666,1,4444444,4033332,2,5636,8303,479,444,144,166,44,444,166,166,10,12,2,1,28,13973,100,1056,1056,480,444444,616,10000,617,10000,22534,10000,22534,4000,18549,4000,7642,4000,19701,100,13442,100,712,10000,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (3029,'GRIM_REAPER_ANKOU','Grim Reaper Ankou','Grim Reaper Ankou',159,50000000,1553,300000,330000,1,1500,2500,200,70,200,100,200,200,220,100,10,12,2,1,89,133,200,900,864,480,0,0,0,0,0,0,0,607,500,603,200,604,200,22537,10000,522,200,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (3074,'TIMEHOLDER','Time Holder','Time Holder',170,25000000,1,2291250,1938750,1,5250,2100,288,265,224,152,251,257,402,77,10,12,2,6,80,14261,100,398,384,288,2291250,0,0,0,0,0,0,1095,3000,2121,10,7054,3000,22515,3000,18874,20,16024,5,15089,3,0,0,0,0,4625,1);
+REPLACE INTO `mob_db` VALUES (3162,'ELEPHANT','Elephant','Elephant',48,1080,1,184,207,1,184,48,70,30,40,45,32,19,42,20,10,12,0,2,23,131,150,1028,528,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db` VALUES (3163,'GORILLA','Gorilla','Gorilla',48,1080,1,184,207,1,184,48,70,30,40,45,32,19,42,20,10,12,0,2,23,131,190,1028,528,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db` VALUES (3164,'LION','Lion','Lion',48,1080,1,184,207,1,184,48,70,30,40,45,32,19,42,20,10,12,0,2,23,131,150,1028,528,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db` VALUES (3165,'RHINO','Rhino','Rhino',48,1080,1,184,207,1,184,48,70,30,40,45,32,19,42,20,10,12,0,2,23,131,150,1028,528,360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (3169,'J_REB_SHECIL1','Shooting Target','Shooting Target',1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,20,1,200,4000,2000,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 (3170,'J_REB_SHECIL2','Shooting Target','Shooting Target',1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,20,1,200,4000,2000,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 (3181,'E1_FELOCK','Captain Ferlock','Captain Ferlock',130,3000000,1,3088,333333,10,0,0,0,0,0,0,0,0,0,0,10,12,2,9,47,129,170,1018,1008,300,0,0,0,0,0,0,0,15117,100,20744,100,22047,100,12082,3000,12072,3000,12087,3000,12077,3000,12092,3000,0,0,27182,1);
REPLACE INTO `mob_db` VALUES (3190,'MM_SARAH','Sarah','Sarah',160,100000000,1,0,0,12,1090,2755,276,255,43,161,6,188,225,136,10,12,1,0,20,164,2000,500,500,0,0,0,0,0,0,0,0,15121,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4610,1);
REPLACE INTO `mob_db` VALUES (3202,'ORGANIC_JAKK','Organic Pumpkin','Organic Pumpkin',10,40,1,20,13,1,100,0,160,99,1,1,1,1,999,1,1,1,0,3,21,97,200,398,199,0,0,0,0,0,0,0,0,6804,5000,6804,5000,6804,1000,2267,100,1062,1000,664,100,546,1000,12192,100,0,0,0,0);
REPLACE INTO `mob_db` VALUES (3203,'INORGANIC_JAKK','Inorganic Pumpkin','Inorganic Pumpkin',10,40,1,20,13,1,100,0,160,99,1,1,1,1,999,1,1,1,0,3,21,97,200,398,199,0,0,0,0,0,0,0,0,6805,5000,6805,5000,6805,1000,2267,100,1062,1000,664,100,546,1000,12192,100,0,0,0,0);
+REPLACE INTO `mob_db` VALUES (3261,'BLUE_UNICORN','Blue Unicorn','Blue Unicorn',30,20,1,99,112,1,106,29,36,17,17,26,20,18,36,5,10,12,0,3,25,129,300,1672,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db` VALUES (3306,'PAD_TAMADORA','Tamadora','Tamadora',1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,20,0,0,4000,2000,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 (3317,'PAD_RUBYLIT','Rubylit','Rubylit',1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,20,0,0,4000,2000,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 (3318,'PAD_SAPPHILIT','Sapphilit','Sapphilit',1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,20,0,0,4000,2000,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 (3319,'PAD_EMELIT','Emelit','Emelit',1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,20,0,0,4000,2000,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 (3320,'PAD_TOPALIT','Topalit','Topalit',1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,20,0,0,4000,2000,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 (3321,'PAD_AMELIT','Amelit','Amelit',1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,20,0,0,4000,2000,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 (3349,'PAD_MYTHLIT','Mythlit','Mythlit',1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,20,0,0,4000,2000,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 (3381,'DARK_SOUL','Dark Soul','Dark Soul',10,20,1,0,0,1,20,20,0,0,1,1,1,1,1,1,1,1,1,6,27,129,100,1960,960,504,0,0,0,0,0,0,0,12192,2000,6914,4000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (3382,'WANDERING_SOUL','Wandering Soul','Wandering Soul',1,10,1,0,0,1,10,10,0,0,1,1,1,1,1,1,1,1,1,6,28,129,100,1248,1248,576,0,0,0,0,0,0,0,12192,2000,6915,4000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db` VALUES (3495,'DR_EGGRING','Eggring','Eggring',1,50,1,50,35,1,7,1,2,4,6,1,1,0,6,4,10,12,0,3,22,131,400,1872,672,480,0,0,0,0,0,0,0,909,7000,512,1000,938,400,1010,30,601,500,512,150,512,20,0,0,0,0,4659,20);
+REPLACE INTO `mob_db` VALUES (3496,'DR_LUNATIC','Leaf Lunatic','Leaf Lunatic',3,44,1,50,35,1,12,1,16,0,9,1,2,0,7,4,10,12,0,2,60,129,200,1456,456,336,0,0,0,0,0,0,0,705,7000,949,3000,2262,4,512,1000,601,500,515,3000,1010,30,0,0,0,0,4663,10);
+REPLACE INTO `mob_db` VALUES (3636,'LITTLE_ISIS','Little Isis','Little Isis',59,2092,1,279,298,1,278,81,83,5,58,43,22,5,43,15,10,12,2,6,27,12693,200,1384,768,336,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 (3669,'DIABOLIC2','Diabolic2','Diabolic2',104,10572,1,1086,1073,1,772,283,68,61,103,80,53,65,94,25,10,12,0,6,47,14725,150,1080,780,180,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 (3670,'DELETER_2','Deleter 2','Deleter 2',105,10000,1,1049,1038,1,733,265,114,53,98,72,65,49,68,71,10,12,0,9,43,12429,175,1024,624,336,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 (3731,'SCATLETON','Scatleton','Scatleton',14,140,1,0,0,1,50,13,13,0,10,12,8,5,17,7,10,12,0,6,27,133,300,1600,900,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db` VALUES (3790,'SWEETS_DROPS','Sweets Drops','Sweets Drops',1,20,1,27,20,1,12,1,16,0,1,1,1,1,1,1,10,12,0,3,23,131,440,1372,672,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db` VALUES (3971,'SKELION','Skelion','Skelion',150,13000,1,594,669,1,222,56,88,16,25,16,12,45,33,29,10,12,0,0,20,165,150,960,864,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 (20373,'NIGHTMARE_TERROR_H','Rigid Nightmare Terror','Rigid Nightmare Terror',179,1523377,1,138489,96942,1,1709,725,242,75,81,149,21,186,129,61,12,12,2,6,67,14725,165,1216,816,432,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,27352,10);
+REPLACE INTO `mob_db` VALUES (20420,'WANDER_MAN_H','Corrupted Wanderer','Corrupted Wanderer',187,2387582,1,170542,119379,1,3654,1645,289,102,176,121,34,67,139,77,10,12,0,6,44,14725,100,672,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,27361,10);
+REPLACE INTO `mob_db` VALUES (20423,'BACSOJIN2','Bacsojin','Bacsojin',97,720500,1,801792,542880,3,1414,2036,210,178,118,244,98,126,246,102,10,12,2,7,64,14261,130,960,960,480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+REPLACE INTO `mob_db` VALUES (20424,'MOONLIGHT2','Moonlight Flower','Moonlight Flower',79,324000,1,367488,271440,1,2232,1251,254,81,86,102,93,82,157,120,10,12,1,6,63,14261,150,1276,576,288,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 (20425,'PHREEONI2','Phreeoni','Phreeoni',71,300000,1,127600,180000,1,693,967,269,98,88,70,112,87,122,71,10,12,2,2,60,14261,200,1020,1020,288,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 (20571,'ORK_HERO2','Orc Hero','Orc Hero',50,362000,1,106920,97200,1,662,441,197,70,97,82,107,71,144,43,10,12,2,7,42,14261,150,1678,780,648,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 (20619,'GLOOMUNDERNIGHT2','Gloom Under Night','Gloom Under Night',139,3005000,1,2808000,1800000,3,6592,2785,479,262,191,223,187,155,362,163,10,12,2,0,68,14261,200,2000,2000,576,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 (20696,'EP17_2_CHILD_ADMIN1','Child Admin Beta','Child Admin Beta',1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,20,0,0,4000,2000,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 (20697,'EP17_2_CHILD_ADMIN2','Child Admin Alpha','Child Admin Alpha',1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,20,0,0,4000,2000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
diff --git a/sql-files/mob_skill_db_re.sql b/sql-files/mob_skill_db_re.sql
index 5bdb5aec4..37d8f5165 100644
--- a/sql-files/mob_skill_db_re.sql
+++ b/sql-files/mob_skill_db_re.sql
@@ -10055,6 +10055,14 @@ REPLACE INTO `mob_skill_db` VALUES (2959,'Torturous Redeemer@SM_BASH','attack',5
REPLACE INTO `mob_skill_db` VALUES (2959,'Torturous Redeemer@NPC_FIREATTACK','attack',186,3,1000,0,200000,'yes','target','always',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `mob_skill_db` VALUES (2959,'Torturous Redeemer@WZ_FIREPILLAR','attack',80,5,500,0,10000,'no','around2','always',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `mob_skill_db` VALUES (2959,'Torturous Redeemer@SM_MAGNUM','attack',7,5,500,0,10000,'no','self','always',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db` VALUES (2963,'Woodie@AL_HEAL','attack',28,9,10000,500,5000,'no','self','myhpinrate',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db` VALUES (2963,'Woodie@NPC_FIREATTACK','attack',186,3,2000,500,5000,'no','target','always',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db` VALUES (2963,'Woodie@NPC_GROUNDATTACK','attack',185,3,2000,500,5000,'no','target','always',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db` VALUES (2995,'Abandoned Teddy Bear@NPC_CURSEATTACK','attack',181,4,500,0,5000,'no','self','myhpinrate',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db` VALUES (2995,'Abandoned Teddy Bear@NPC_CURSEATTACK','follow',181,4,500,0,5000,'no','self','myhpinrate',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db` VALUES (2995,'Abandoned Teddy Bear@NPC_CRITICALSLASH','attack',170,1,500,0,5000,'no','target','always',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db` VALUES (2995,'Abandoned Teddy Bear@SA_DISPELL','attack',289,1,50,1000,15000,'no','target','always',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
+REPLACE INTO `mob_skill_db` VALUES (2995,'Abandoned Teddy Bear@BS_HAMMERFALL','attack',110,5,500,1000,5000,'no','target','always',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `mob_skill_db` VALUES (3074,'Time Holder@NPC_AGIUP','attack',350,5,10000,0,10000,'yes','self','myhpltmaxrate','30',NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `mob_skill_db` VALUES (3074,'Time Holder@AL_INCAGI','chase',29,10,2000,700,10000,'no','self','always',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `mob_skill_db` VALUES (3074,'Time Holder@WZ_METEOR','attack',83,11,1000,500,10000,'no','target','always',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
diff --git a/sql-files/upgrades/2020-03-22--01-56.sql b/sql-files/upgrades/2020-03-22--01-56.sql
new file mode 100644
index 000000000..58f090a67
--- /dev/null
+++ b/sql-files/upgrades/2020-03-22--01-56.sql
@@ -0,0 +1,23 @@
+#1584838560
+
+-- This file is part of Hercules.
+-- http://herc.ws - http://github.com/HerculesWS/Hercules
+--
+-- Copyright (C) 2019-2020 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 `ipbanlist` MODIFY `list` VARCHAR(39) NOT NULL DEFAULT '';
+INSERT INTO `sql_updates` (`timestamp`) VALUES (1584838560);
diff --git a/sql-files/upgrades/2020-03-22--03-09.sql b/sql-files/upgrades/2020-03-22--03-09.sql
new file mode 100644
index 000000000..dbdf65c5c
--- /dev/null
+++ b/sql-files/upgrades/2020-03-22--03-09.sql
@@ -0,0 +1,24 @@
+#1584842940
+
+-- This file is part of Hercules.
+-- http://herc.ws - http://github.com/HerculesWS/Hercules
+--
+-- Copyright (C) 2019-2020 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 `login` ALTER `userid` DROP DEFAULT;
+ALTER TABLE `login` DROP INDEX `name`;
+ALTER TABLE `login` ADD CONSTRAINT `name` UNIQUE (`userid`);
+INSERT INTO `sql_updates` (`timestamp`) VALUES (1584842940);
diff --git a/sql-files/upgrades/2020-05-01--04-44.sql b/sql-files/upgrades/2020-05-01--04-44.sql
new file mode 100644
index 000000000..6cb5a30ec
--- /dev/null
+++ b/sql-files/upgrades/2020-05-01--04-44.sql
@@ -0,0 +1,25 @@
+#1588301040
+
+-- This file is part of Hercules.
+-- http://herc.ws - http://github.com/HerculesWS/Hercules
+--
+-- Copyright (C) 2019-2020 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 `acc_reg_str_db` MODIFY `value` VARCHAR(255) NOT NULL DEFAULT '0';
+ALTER TABLE `char_reg_str_db` MODIFY `value` VARCHAR(255) NOT NULL DEFAULT '0';
+ALTER TABLE `global_acc_reg_str_db` MODIFY `value` VARCHAR(255) NOT NULL DEFAULT '0';
+
+INSERT INTO `sql_updates` (`timestamp`) VALUES (1588301040);
diff --git a/sql-files/upgrades/2020-05-10--23-11.sql b/sql-files/upgrades/2020-05-10--23-11.sql
new file mode 100644
index 000000000..9f2755e76
--- /dev/null
+++ b/sql-files/upgrades/2020-05-10--23-11.sql
@@ -0,0 +1,43 @@
+#1589145060
+
+-- This file is part of Hercules.
+-- http://herc.ws - http://github.com/HerculesWS/Hercules
+--
+-- Copyright (C) 2019-2020 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/>.
+
+-- Add separate tables for global integer and string variables.
+CREATE TABLE IF NOT EXISTS `map_reg_num_db` (
+ `key` VARCHAR(32) BINARY NOT NULL DEFAULT '',
+ `index` INT UNSIGNED NOT NULL DEFAULT '0',
+ `value` INT NOT NULL DEFAULT '0',
+ PRIMARY KEY (`key`, `index`)
+) ENGINE=MyISAM;
+CREATE TABLE IF NOT EXISTS `map_reg_str_db` (
+ `key` VARCHAR(32) BINARY NOT NULL DEFAULT '',
+ `index` INT UNSIGNED NOT NULL DEFAULT '0',
+ `value` VARCHAR(255) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`key`, `index`)
+) ENGINE=MyISAM;
+
+-- Copy data from mapreg table to new map_reg_*_db tables.
+INSERT INTO `map_reg_num_db` (`key`, `index`, `value`) SELECT `varname`, `index`, CAST(`value` AS SIGNED) FROM `mapreg` WHERE NOT RIGHT(`varname`, 1)='$';
+INSERT INTO `map_reg_str_db` (`key`, `index`, `value`) SELECT `varname`, `index`, `value` FROM `mapreg` WHERE RIGHT(`varname`, 1)='$';
+
+-- Remove mapreg table.
+DROP TABLE IF EXISTS `mapreg`;
+
+-- Add update timestamp.
+INSERT INTO `sql_updates` (`timestamp`) VALUES (1589145060);
diff --git a/sql-files/upgrades/index.txt b/sql-files/upgrades/index.txt
index 1ddd8b831..fb889c280 100644
--- a/sql-files/upgrades/index.txt
+++ b/sql-files/upgrades/index.txt
@@ -60,3 +60,7 @@
2019-10-12--14-21.sql
2019-11-22--23-58.sql
2020-01-24--01-09.sql
+2020-03-22--01-56.sql
+2020-03-22--03-09.sql
+2020-05-01--04-44.sql
+2020-05-10--23-11.sql
diff --git a/src/char/Makefile.in b/src/char/Makefile.in
index 79ee3e18f..88a99c96c 100644
--- a/src/char/Makefile.in
+++ b/src/char/Makefile.in
@@ -36,6 +36,19 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \
LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \
scanctx.h scanner.h strbuf.h wincompat.h)
+ifeq (@USE_LIBBACKTRACE@,yes)
+ LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace
+ LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \
+ dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \
+ simple.o sort.o state.o)
+ LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \
+ backtrace-supported.h config.h filenames.h internal.h)
+else
+ LIBBACKTRACE_D =
+ LIBBACKTRACE_OBJ =
+ LIBBACKTRACE_H =
+endif
+
MT19937AR_D = $(THIRDPARTY_D)/mt19937ar
MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o
MT19937AR_H = $(MT19937AR_D)/mt19937ar.h
@@ -51,7 +64,7 @@ CHAR_PH =
HAVE_MYSQL=@HAVE_MYSQL@
ifeq ($(HAVE_MYSQL),yes)
- CHAR_SERVER_SQL_DEPENDS=$(CHAR_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(SYSINFO_INC)
+ CHAR_SERVER_SQL_DEPENDS=$(CHAR_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) $(SYSINFO_INC)
else
CHAR_SERVER_SQL_DEPENDS=needs_mysql
endif
@@ -90,7 +103,7 @@ help:
Makefile: Makefile.in
@$(MAKE) -C ../.. src/char/Makefile
-$(SYSINFO_INC): $(CHAR_C) $(CHAR_PH) $(CHAR_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H)
+$(SYSINFO_INC): $(CHAR_C) $(CHAR_PH) $(CHAR_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H)
@echo " MAKE $@"
@$(MAKE) -C ../.. sysinfo
@@ -111,7 +124,7 @@ char-server: ../../char-server@EXEEXT@
../../char-server@EXEEXT@: $(CHAR_SERVER_SQL_DEPENDS) Makefile
@echo " LD $(notdir $@)"
@$(CC) @STATIC@ @LDFLAGS@ -o ../../char-server@EXEEXT@ $(CHAR_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a \
- $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) @LIBS@ @MYSQL_LIBS@
+ $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) @LIBS@ @MYSQL_LIBS@
# missing object files
$(COMMON_D)/obj_all/common.a:
@@ -130,10 +143,14 @@ $(LIBCONFIG_OBJ):
@echo " MAKE $@"
@$(MAKE) -C $(LIBCONFIG_D)
+$(LIBBACKTRACE_OBJ):
+ @echo " MAKE $@"
+ @$(MAKE) -C $(LIBBACKTRACE_D)
+
.SECONDEXPANSION:
# char object files
-obj_sql/%.o: %.c $$(filter %.p.h, $(CHAR_PH)) $(CHAR_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) | obj_sql
+obj_sql/%.o: %.c $$(filter %.p.h, $(CHAR_PH)) $(CHAR_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) | obj_sql
@echo " CC $<"
@$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
diff --git a/src/char/char.c b/src/char/char.c
index aac9ad20c..b3de22c00 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -425,8 +425,6 @@ static struct DBData char_create_charstatus(union DBKey key, va_list args)
static int char_mmo_char_tosql(int char_id, struct mmo_charstatus *p)
{
- int i = 0;
- int count = 0;
int diff = 0;
char save_status[128]; //For displaying save information. [Skotlex]
struct mmo_charstatus *cp;
@@ -591,8 +589,9 @@ static int char_mmo_char_tosql(int char_id, struct mmo_charstatus *p)
//insert here.
StrBuf->Clear(&buf);
StrBuf->Printf(&buf, "INSERT INTO `%s`(`char_id`,`map`,`x`,`y`) VALUES ", memo_db);
- for( i = 0, count = 0; i < MAX_MEMOPOINTS; ++i )
- {
+
+ int count = 0;
+ for (int i = 0; i < MAX_MEMOPOINTS; ++i) {
if( p->memo_point[i].map )
{
if( count )
@@ -624,24 +623,29 @@ static int char_mmo_char_tosql(int char_id, struct mmo_charstatus *p)
StrBuf->Clear(&buf);
StrBuf->Printf(&buf, "INSERT INTO `%s`(`char_id`,`id`,`lv`,`flag`) VALUES ", skill_db);
//insert here.
- for (i = 0, count = 0; i < MAX_SKILL_DB; ++i) {
- if( p->skill[i].id != 0 && p->skill[i].flag != SKILL_FLAG_TEMPORARY ) {
- if( p->skill[i].lv == 0 && ( p->skill[i].flag == SKILL_FLAG_PERM_GRANTED || p->skill[i].flag == SKILL_FLAG_PERMANENT ) )
- continue;
- if( p->skill[i].flag != SKILL_FLAG_PERMANENT && p->skill[i].flag != SKILL_FLAG_PERM_GRANTED && (p->skill[i].flag - SKILL_FLAG_REPLACED_LV_0) == 0 )
- continue;
- if( count )
- StrBuf->AppendStr(&buf, ",");
- StrBuf->Printf(&buf, "('%d','%d','%d','%d')", char_id, p->skill[i].id,
- ( (p->skill[i].flag == SKILL_FLAG_PERMANENT || p->skill[i].flag == SKILL_FLAG_PERM_GRANTED) ? p->skill[i].lv : p->skill[i].flag - SKILL_FLAG_REPLACED_LV_0),
- p->skill[i].flag == SKILL_FLAG_PERM_GRANTED ? p->skill[i].flag : 0);/* other flags do not need to be saved */
- ++count;
- }
+ int count = 0;
+ for (int i = 0; i < MAX_SKILL_DB; ++i) {
+ if (p->skill[i].id == 0)
+ continue;
+ if (p->skill[i].flag == SKILL_FLAG_TEMPORARY)
+ continue;
+ if (p->skill[i].lv == 0 && (p->skill[i].flag == SKILL_FLAG_PERM_GRANTED || p->skill[i].flag == SKILL_FLAG_PERMANENT))
+ continue;
+ if (p->skill[i].flag == SKILL_FLAG_REPLACED_LV_0)
+ continue;
+
+ if (Assert_chk(p->skill[i].flag == SKILL_FLAG_PERMANENT || p->skill[i].flag == SKILL_FLAG_PERM_GRANTED || p->skill[i].flag > SKILL_FLAG_REPLACED_LV_0))
+ continue;
+ if (count != 0)
+ StrBuf->AppendStr(&buf, ",");
+ int saved_lv = (p->skill[i].flag > SKILL_FLAG_REPLACED_LV_0) ? p->skill[i].flag - SKILL_FLAG_REPLACED_LV_0 : p->skill[i].lv;
+ int saved_flag = p->skill[i].flag == SKILL_FLAG_PERM_GRANTED ? p->skill[i].flag : 0; // other flags do not need to be saved
+ StrBuf->Printf(&buf, "('%d','%d','%d','%d')", char_id, p->skill[i].id, saved_lv, saved_flag);
+
+ ++count;
}
- if( count )
- {
- if( SQL_ERROR == SQL->QueryStr(inter->sql_handle, StrBuf->Value(&buf)) )
- {
+ if (count != 0) {
+ if (SQL_ERROR == SQL->QueryStr(inter->sql_handle, StrBuf->Value(&buf))) {
Sql_ShowDebug(inter->sql_handle);
errors++;
}
@@ -651,7 +655,7 @@ static int char_mmo_char_tosql(int char_id, struct mmo_charstatus *p)
}
diff = 0;
- for(i = 0; i < MAX_FRIENDS; i++){
+ for (int i = 0; i < MAX_FRIENDS; i++) {
if(p->friends[i].char_id != cp->friends[i].char_id ||
p->friends[i].account_id != cp->friends[i].account_id){
diff = 1;
@@ -669,8 +673,8 @@ static int char_mmo_char_tosql(int char_id, struct mmo_charstatus *p)
StrBuf->Clear(&buf);
StrBuf->Printf(&buf, "INSERT INTO `%s` (`char_id`, `friend_account`, `friend_id`) VALUES ", friend_db);
- for( i = 0, count = 0; i < MAX_FRIENDS; ++i )
- {
+ int count = 0;
+ for (int i = 0; i < MAX_FRIENDS; ++i) {
if( p->friends[i].char_id > 0 )
{
if( count )
@@ -695,7 +699,7 @@ static int char_mmo_char_tosql(int char_id, struct mmo_charstatus *p)
StrBuf->Clear(&buf);
StrBuf->Printf(&buf, "REPLACE INTO `%s` (`char_id`, `hotkey`, `type`, `itemskill_id`, `skill_lvl`) VALUES ", hotkey_db);
diff = 0;
- for(i = 0; i < ARRAYLENGTH(p->hotkeys); i++){
+ for (int i = 0; i < ARRAYLENGTH(p->hotkeys); i++) {
if(memcmp(&p->hotkeys[i], &cp->hotkeys[i], sizeof(struct hotkey)))
{
if( diff )
@@ -1369,7 +1373,7 @@ static int char_mmo_char_fromsql(int char_id, struct mmo_charstatus *p, bool loa
SqlStmt_ShowDebug(stmt);
}
- if( tmp_skill.flag != SKILL_FLAG_PERM_GRANTED )
+ if (tmp_skill.flag != SKILL_FLAG_PERM_GRANTED)
tmp_skill.flag = SKILL_FLAG_PERMANENT;
for (i = 0; i < MAX_SKILL_DB && SQL_SUCCESS == SQL->StmtNextRow(stmt); ++i) {
@@ -2531,19 +2535,39 @@ static void char_changesex(int account_id, int sex)
}
/**
- * Performs the necessary operations when changing a character's sex, such as
- * correcting the job class and unequipping items, and propagating the
- * information to the guild data.
+ * Performs the necessary operations when changing a character's gender,
+ * such as correcting the job class and unequipping items,
+ * and propagating the information to the guild data.
*
- * @param sex The new sex (SEX_MALE or SEX_FEMALE).
- * @param acc The character's account ID.
- * @param char_id The character ID.
- * @param class The character's current job class.
+ * @param sex The character's new gender (SEX_MALE or SEX_FEMALE).
+ * @param acc The character's account ID.
+ * @param char_id The character ID.
+ * @param class The character's current job class.
* @param guild_id The character's guild ID.
- */
+ *
+ **/
static void char_change_sex_sub(int sex, int acc, int char_id, int class, int guild_id)
{
- // job modification
+ struct SqlStmt *stmt = SQL->StmtMalloc(inter->sql_handle);
+
+ /** If we can't save the data, there's nothing to do. **/
+ if (stmt == NULL) {
+ SqlStmt_ShowDebug(stmt);
+ return;
+ }
+
+ const char *query_inv = "UPDATE `%s` SET `equip`='0' WHERE `char_id`=?";
+
+ /** Don't change gender if resetting the view data fails to prevent character from being unable to login. **/
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, query_inv, inventory_db)
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 0, SQLDT_INT32, &char_id, sizeof(char_id))
+ || SQL_ERROR == SQL->StmtExecute(stmt)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
+ return;
+ }
+
+ /** Correct the job class for gender specific jobs according to the passed gender. **/
if (class == JOB_BARD || class == JOB_DANCER)
class = (sex == SEX_MALE ? JOB_BARD : JOB_DANCER);
else if (class == JOB_CLOWN || class == JOB_GYPSY)
@@ -2559,14 +2583,30 @@ static void char_change_sex_sub(int sex, int acc, int char_id, int class, int gu
else if (class == JOB_KAGEROU || class == JOB_OBORO)
class = (sex == SEX_MALE ? JOB_KAGEROU : JOB_OBORO);
- if (SQL_ERROR == SQL->Query(inter->sql_handle, "UPDATE `%s` SET `equip`='0' WHERE `char_id`='%d'", inventory_db, char_id))
- Sql_ShowDebug(inter->sql_handle);
+#if PACKETVER >= 20141016
+ char gender = (sex == SEX_MALE) ? 'M' : ((sex == SEX_FEMALE) ? 'F' : 'U');
+#else
+ char gender = 'U';
+#endif
- if (SQL_ERROR == SQL->Query(inter->sql_handle, "UPDATE `%s` SET `class`='%d', `weapon`='0', `shield`='0', "
- "`head_top`='0', `head_mid`='0', `head_bottom`='0' WHERE `char_id`='%d'",
- char_db, class, char_id))
- Sql_ShowDebug(inter->sql_handle);
- if (guild_id) // If there is a guild, update the guild_member data [Skotlex]
+ const char *query_char = "UPDATE `%s` SET `class`=?, `weapon`='0', `shield`='0', `head_top`='0', "
+ "`head_mid`='0', `head_bottom`='0', `robe`='0', `sex`=? WHERE `char_id`=?";
+
+ /** Don't update guild data if changing gender fails to prevent data de-synchronisation. **/
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, query_char, char_db)
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 0, SQLDT_INT32, &class, sizeof(class))
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 1, SQLDT_ENUM, &gender, sizeof(gender))
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 2, SQLDT_INT32, &char_id, sizeof(char_id))
+ || SQL_ERROR == SQL->StmtExecute(stmt)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
+ return;
+ }
+
+ SQL->StmtFree(stmt);
+
+ /** Update guild member data if a guild ID was passed. **/
+ if (guild_id != 0)
inter_guild->sex_changed(guild_id, acc, char_id, sex);
}
@@ -2898,13 +2938,13 @@ static void char_global_accreg_to_login_add(const char *key, unsigned int index,
if( val ) {
char *sval = (char*)val;
- len = strlen(sval)+1;
+ len = strlen(sval);
- WFIFOB(chr->login_fd, nlen) = (unsigned char)len;/* won't be higher; the column size is 254 */
+ WFIFOB(chr->login_fd, nlen) = (unsigned char)len; // Won't be higher; the column size is 255.
nlen += 1;
- safestrncpy(WFIFOP(chr->login_fd,nlen), sval, len);
- nlen += len;
+ safestrncpy(WFIFOP(chr->login_fd, nlen), sval, len + 1);
+ nlen += len + 1;
}
} else {
WFIFOB(chr->login_fd, nlen) = val ? 0 : 1;
@@ -3500,45 +3540,68 @@ static void char_ask_name_ack(int fd, int acc, const char *name, int type, int r
}
/**
- * Changes a character's sex.
- * The information is updated on database, and the character is kicked if it
- * currently is online.
+ * Changes a character's gender.
+ * The information is updated on database, and the character is kicked if it currently is online.
*
- * @param char_id The character's ID.
- * @param sex The new sex.
+ * @param char_id The character ID
+ * @param sex The character's new gender (SEX_MALE or SEX_FEMALE).
* @retval 0 in case of success.
* @retval 1 in case of failure.
- */
+ *
+ **/
static int char_changecharsex(int char_id, int sex)
{
- int class = 0, guild_id = 0, account_id = 0;
- char *data;
+ struct SqlStmt *stmt = SQL->StmtMalloc(inter->sql_handle);
- // get character data
- if (SQL_ERROR == SQL->Query(inter->sql_handle, "SELECT `account_id`,`class`,`guild_id` FROM `%s` WHERE `char_id` = '%d'", char_db, char_id)) {
- Sql_ShowDebug(inter->sql_handle);
+ /** If we can't load the data, there's nothing to do. **/
+ if (stmt == NULL) {
+ SqlStmt_ShowDebug(stmt);
return 1;
}
- if (SQL->NumRows(inter->sql_handle) != 1 || SQL_ERROR == SQL->NextRow(inter->sql_handle)) {
- SQL->FreeResult(inter->sql_handle);
+
+ const char *query = "SELECT `account_id`, `class`, `guild_id` FROM `%s` WHERE `char_id`=?";
+ int account_id = 0;
+ int class = 0;
+ int guild_id = 0;
+
+ /** Abort changing gender if there was an error while loading the data. **/
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, query, char_db)
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 0, SQLDT_INT32, &char_id, sizeof(char_id))
+ || SQL_ERROR == SQL->StmtExecute(stmt)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 0, SQLDT_INT32, &account_id, sizeof(account_id), NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 1, SQLDT_INT32, &class, sizeof(class), NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 2, SQLDT_INT32, &guild_id, sizeof(guild_id), NULL, NULL)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
return 1;
}
- SQL->GetData(inter->sql_handle, 0, &data, NULL); account_id = atoi(data);
- SQL->GetData(inter->sql_handle, 1, &data, NULL); class = atoi(data);
- SQL->GetData(inter->sql_handle, 2, &data, NULL); guild_id = atoi(data);
- SQL->FreeResult(inter->sql_handle);
- if (SQL_ERROR == SQL->Query(inter->sql_handle, "UPDATE `%s` SET `sex` = '%c' WHERE `char_id` = '%d'", char_db, sex == SEX_MALE ? 'M' : 'F', char_id)) {
- Sql_ShowDebug(inter->sql_handle);
+ /** Abort changing gender if no character was found. **/
+ if (SQL->StmtNumRows(stmt) < 1) {
+ ShowError("char_changecharsex: Requested non-existant character! (ID: %d)\n", char_id);
+ SQL->StmtFree(stmt);
return 1;
}
- char_change_sex_sub(sex, account_id, char_id, class, guild_id);
- // disconnect player if online on char-server
- chr->disconnect_player(account_id);
+ /** Abort changing gender if more than one character was found. **/
+ if (SQL->StmtNumRows(stmt) > 1) {
+ ShowError("char_changecharsex: There are multiple characters with identical ID! (ID: %d)\n", char_id);
+ SQL->StmtFree(stmt);
+ return 1;
+ }
+
+ /** Abort changing gender if fetching the data fails. **/
+ if (SQL_ERROR == SQL->StmtNextRow(stmt)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
+ return 1;
+ }
+
+ SQL->StmtFree(stmt);
+ char_change_sex_sub(sex, account_id, char_id, class, guild_id);
+ chr->disconnect_player(account_id); // Disconnect player if online on char-server.
+ chr->changesex(account_id, sex); // Notify all mapservers about this change.
- // notify all mapservers about this change
- chr->changesex(account_id, sex);
return 0;
}
diff --git a/src/char/int_party.c b/src/char/int_party.c
index c16eea34e..62633b4a8 100644
--- a/src/char/int_party.c
+++ b/src/char/int_party.c
@@ -67,6 +67,7 @@ static int inter_party_check_lv(struct party_data *p)
if (p->party.exp == 1 && inter_party->check_exp_share(p) == 0) {
p->party.exp = 0;
mapif->party_optionchanged(0, &p->party, 0, 0);
+ inter_party->tosql(&p->party, PS_BASIC, 0);
return 0;
}
@@ -577,9 +578,9 @@ static bool inter_party_leave(int party_id, int account_id, int char_id)
if (p->party.member[i].online == 1)
p->party.member[i].online = 0;
+ inter_party->tosql(&p->party, PS_DELMEMBER, i);
memset(&p->party.member[i], 0, sizeof(struct party_member));
inter_party->calc_state(p); /// Count online/offline members and check family state and even share range.
- inter_party->tosql(&p->party, PS_DELMEMBER, i);
if (inter_party->check_empty(p) == 0)
mapif->party_info(-1, &p->party, 0);
diff --git a/src/char/int_pet.c b/src/char/int_pet.c
index 880de668d..8b42bac1d 100644
--- a/src/char/int_pet.c
+++ b/src/char/int_pet.c
@@ -43,97 +43,162 @@ struct inter_pet_interface *inter_pet;
/**
* Saves a pet to the SQL database.
*
- * @remark
- * In case of newly created pet, the pet ID is not updated to reflect the
- * newly assigned ID. The caller must do so.
+ * Table structure:
+ * `pet` (`pet_id`, `class`, `name`, `account_id`, `char_id`, `level`, `egg_id`, `equip`, `intimate`, `hungry`, `rename_flag`, `incubate`, `autofeed`)
+ *
+ * @remark In case of newly created pet, the pet ID is not updated to reflect the newly assigned ID. The caller must do so.
*
* @param p The pet data to save.
- * @return The ID of the saved pet.
- * @retval 0 in case of errors.
- */
+ * @return The ID of the saved pet, or 0 in case of errors.
+ *
+ **/
static int inter_pet_tosql(const struct s_pet *p)
{
- //`pet` (`pet_id`, `class`,`name`,`account_id`,`char_id`,`level`,`egg_id`,`equip`,`intimate`,`hungry`,`rename_flag`,`incubate`)
- char esc_name[NAME_LENGTH*2+1];// escaped pet name
- int pet_id = 0, hungry = 0, intimate = 0;
-
nullpo_ret(p);
- SQL->EscapeStringLen(inter->sql_handle, esc_name, p->name, strnlen(p->name, NAME_LENGTH));
- hungry = cap_value(p->hungry, 0, 100);
- intimate = cap_value(p->intimate, 0, 1000);
-
- if (p->pet_id == 0) {
- // New pet.
- if (SQL_ERROR == SQL->Query(inter->sql_handle, "INSERT INTO `%s` "
- "(`class`,`name`,`account_id`,`char_id`,`level`,`egg_id`,`equip`,`intimate`,`hungry`,`rename_flag`,`incubate`, `autofeed`) "
- "VALUES ('%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')",
- pet_db, p->class_, esc_name, p->account_id, p->char_id, p->level, p->egg_id,
- p->equip, intimate, hungry, p->rename_flag, p->incubate, p->autofeed)) {
- Sql_ShowDebug(inter->sql_handle);
+ struct SqlStmt *stmt = SQL->StmtMalloc(inter->sql_handle);
+
+ if (stmt == NULL) {
+ SqlStmt_ShowDebug(stmt);
+ return 0;
+ }
+
+ int pet_id = 0;
+
+ if (p->pet_id == 0) { // New pet.
+ const char *query = "INSERT INTO `%s` "
+ "(`class`, `name`, `account_id`, `char_id`, `level`, `egg_id`, `equip`, "
+ "`intimate`, `hungry`, `rename_flag`, `incubate`, `autofeed`) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, query, pet_db) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 0, SQLDT_INT32, &p->class_, sizeof(p->class_)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 1, SQLDT_STRING, &p->name, strnlen(p->name, sizeof(p->name))) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 2, SQLDT_INT32, &p->account_id, sizeof(p->account_id)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 3, SQLDT_INT32, &p->char_id, sizeof(p->char_id)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 4, SQLDT_INT16, &p->level, sizeof(p->level)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 5, SQLDT_INT32, &p->egg_id, sizeof(p->egg_id)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 6, SQLDT_INT32, &p->equip, sizeof(p->equip)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 7, SQLDT_INT16, &p->intimate, sizeof(p->intimate)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 8, SQLDT_INT16, &p->hungry, sizeof(p->hungry)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 9, SQLDT_INT8, &p->rename_flag, sizeof(p->rename_flag)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 10, SQLDT_INT8, &p->incubate, sizeof(p->incubate)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 11, SQLDT_INT32, &p->autofeed, sizeof(p->autofeed)) ||
+ SQL_ERROR == SQL->StmtExecute(stmt)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
return 0;
}
+
pet_id = (int)SQL->LastInsertId(inter->sql_handle);
- } else {
- // Update pet.
- if (SQL_ERROR == SQL->Query(inter->sql_handle, "UPDATE `%s` SET `class`='%d',`name`='%s',`account_id`='%d',`char_id`='%d',`level`='%d',`egg_id`='%d',`equip`='%d',`intimate`='%d',`hungry`='%d',`rename_flag`='%d',`incubate`='%d', `autofeed`='%d' WHERE `pet_id`='%d'",
- pet_db, p->class_, esc_name, p->account_id, p->char_id, p->level, p->egg_id,
- p->equip, intimate, hungry, p->rename_flag, p->incubate, p->autofeed, p->pet_id)) {
- Sql_ShowDebug(inter->sql_handle);
+ } else { // Update pet.
+ const char *query = "UPDATE `%s` SET "
+ "`class`=?, `name`=?, `account_id`=?, `char_id`=?, `level`=?, `egg_id`=?, `equip`=?, "
+ "`intimate`=?, `hungry`=?, `rename_flag`=?, `incubate`=?, `autofeed`=? "
+ "WHERE `pet_id`=?";
+
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, query, pet_db) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 0, SQLDT_INT32, &p->class_, sizeof(p->class_)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 1, SQLDT_STRING, &p->name, strnlen(p->name, sizeof(p->name))) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 2, SQLDT_INT32, &p->account_id, sizeof(p->account_id)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 3, SQLDT_INT32, &p->char_id, sizeof(p->char_id)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 4, SQLDT_INT16, &p->level, sizeof(p->level)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 5, SQLDT_INT32, &p->egg_id, sizeof(p->egg_id)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 6, SQLDT_INT32, &p->equip, sizeof(p->equip)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 7, SQLDT_INT16, &p->intimate, sizeof(p->intimate)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 8, SQLDT_INT16, &p->hungry, sizeof(p->hungry)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 9, SQLDT_INT8, &p->rename_flag, sizeof(p->rename_flag)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 10, SQLDT_INT8, &p->incubate, sizeof(p->incubate)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 11, SQLDT_INT32, &p->autofeed, sizeof(p->autofeed)) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 12, SQLDT_INT32, &p->pet_id, sizeof(p->pet_id)) ||
+ SQL_ERROR == SQL->StmtExecute(stmt)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
return 0;
}
+
pet_id = p->pet_id;
}
+ SQL->StmtFree(stmt);
+
if (chr->show_save_log)
ShowInfo("Pet saved %d - %s.\n", pet_id, p->name);
return pet_id;
}
+/**
+ * Loads a pet's data from the SQL database.
+ *
+ * Table structure:
+ * `pet` (`pet_id`, `class`, `name`, `account_id`, `char_id`, `level`, `egg_id`, `equip`, `intimate`, `hungry`, `rename_flag`, `incubate`, `autofeed`)
+ *
+ * @param pet_id The pet's ID.
+ * @param p The pet data to save the SQL data in.
+ * @return Always 0.
+ *
+ **/
static int inter_pet_fromsql(int pet_id, struct s_pet *p)
{
- char* data;
- size_t len;
+ nullpo_ret(p);
+
+ struct SqlStmt *stmt = SQL->StmtMalloc(inter->sql_handle);
+
+ if (stmt == NULL) {
+ SqlStmt_ShowDebug(stmt);
+ return 0;
+ }
#ifdef NOISY
ShowInfo("Loading pet (%d)...\n",pet_id);
#endif
- nullpo_ret(p);
+
memset(p, 0, sizeof(struct s_pet));
- //`pet` (`pet_id`, `class`,`name`,`account_id`,`char_id`,`level`,`egg_id`,`equip`,`intimate`,`hungry`,`rename_flag`,`incubate`, `autofeed`)
+ const char *query = "SELECT "
+ "`class`, `name`, `account_id`, `char_id`, `level`, `egg_id`, `equip`, "
+ "`intimate`, `hungry`, `rename_flag`, `incubate`, `autofeed` "
+ "FROM `%s` WHERE `pet_id`=?";
+
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, query, pet_db) ||
+ SQL_ERROR == SQL->StmtBindParam(stmt, 0, SQLDT_INT32, &pet_id, sizeof(pet_id)) ||
+ SQL_ERROR == SQL->StmtExecute(stmt) ||
+ SQL_ERROR == SQL->StmtBindColumn(stmt, 0, SQLDT_INT32, &p->class_, sizeof(p->class_), NULL, NULL) ||
+ SQL_ERROR == SQL->StmtBindColumn(stmt, 1, SQLDT_STRING, &p->name, sizeof(p->name), NULL, NULL) ||
+ SQL_ERROR == SQL->StmtBindColumn(stmt, 2, SQLDT_INT32, &p->account_id, sizeof(p->account_id), NULL, NULL) ||
+ SQL_ERROR == SQL->StmtBindColumn(stmt, 3, SQLDT_INT32, &p->char_id, sizeof(p->char_id), NULL, NULL) ||
+ SQL_ERROR == SQL->StmtBindColumn(stmt, 4, SQLDT_INT16, &p->level, sizeof(p->level), NULL, NULL) ||
+ SQL_ERROR == SQL->StmtBindColumn(stmt, 5, SQLDT_INT32, &p->egg_id, sizeof(p->egg_id), NULL, NULL) ||
+ SQL_ERROR == SQL->StmtBindColumn(stmt, 6, SQLDT_INT32, &p->equip, sizeof(p->equip), NULL, NULL) ||
+ SQL_ERROR == SQL->StmtBindColumn(stmt, 7, SQLDT_INT16, &p->intimate, sizeof(p->intimate), NULL, NULL) ||
+ SQL_ERROR == SQL->StmtBindColumn(stmt, 8, SQLDT_INT16, &p->hungry, sizeof(p->hungry), NULL, NULL) ||
+ SQL_ERROR == SQL->StmtBindColumn(stmt, 9, SQLDT_INT8, &p->rename_flag, sizeof(p->rename_flag), NULL, NULL) ||
+ SQL_ERROR == SQL->StmtBindColumn(stmt, 10, SQLDT_INT8, &p->incubate, sizeof(p->incubate), NULL, NULL) ||
+ SQL_ERROR == SQL->StmtBindColumn(stmt, 11, SQLDT_INT32, &p->autofeed, sizeof(p->autofeed), NULL, NULL)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
+ return 0;
+ }
- if( SQL_ERROR == SQL->Query(inter->sql_handle, "SELECT `pet_id`, `class`,`name`,`account_id`,`char_id`,`level`,`egg_id`,`equip`,`intimate`,`hungry`,`rename_flag`,`incubate`,`autofeed` FROM `%s` WHERE `pet_id`='%d'", pet_db, pet_id) )
- {
- Sql_ShowDebug(inter->sql_handle);
+ if (SQL->StmtNumRows(stmt) < 1) {
+ ShowError("inter_pet_fromsql: Requested non-existant pet ID: %d\n", pet_id);
+ SQL->StmtFree(stmt);
return 0;
}
- if( SQL_SUCCESS == SQL->NextRow(inter->sql_handle) )
- {
- p->pet_id = pet_id;
- SQL->GetData(inter->sql_handle, 1, &data, NULL); p->class_ = atoi(data);
- SQL->GetData(inter->sql_handle, 2, &data, &len); memcpy(p->name, data, min(len, NAME_LENGTH));
- SQL->GetData(inter->sql_handle, 3, &data, NULL); p->account_id = atoi(data);
- SQL->GetData(inter->sql_handle, 4, &data, NULL); p->char_id = atoi(data);
- SQL->GetData(inter->sql_handle, 5, &data, NULL); p->level = atoi(data);
- SQL->GetData(inter->sql_handle, 6, &data, NULL); p->egg_id = atoi(data);
- SQL->GetData(inter->sql_handle, 7, &data, NULL); p->equip = atoi(data);
- SQL->GetData(inter->sql_handle, 8, &data, NULL); p->intimate = atoi(data);
- SQL->GetData(inter->sql_handle, 9, &data, NULL); p->hungry = atoi(data);
- SQL->GetData(inter->sql_handle, 10, &data, NULL); p->rename_flag = atoi(data);
- SQL->GetData(inter->sql_handle, 11, &data, NULL); p->incubate = atoi(data);
- SQL->GetData(inter->sql_handle, 12, &data, NULL); p->autofeed = atoi(data);
-
- SQL->FreeResult(inter->sql_handle);
-
- p->hungry = cap_value(p->hungry, 0, 100);
- p->intimate = cap_value(p->intimate, 0, 1000);
-
- if (chr->show_save_log)
- ShowInfo("Pet loaded (%d - %s).\n", pet_id, p->name);
+ if (SQL_ERROR == SQL->StmtNextRow(stmt)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
+ return 0;
}
+
+ SQL->StmtFree(stmt);
+ p->pet_id = pet_id;
+
+ if (chr->show_save_log)
+ ShowInfo("Pet loaded %d - %s.\n", pet_id, p->name);
+
return 0;
}
//----------------------------------------------
@@ -160,41 +225,48 @@ static int inter_pet_delete(int pet_id)
return 0;
}
//------------------------------------------------------
+
+/**
+ * Creates a new pet and inserts its data into the `pet` SQL table.
+ *
+ * @param account_id The pet's master's account ID.
+ * @param char_id The pet's master's char ID.
+ * @param pet_class The pet's class/monster ID.
+ * @param pet_lv The pet's level.
+ * @param pet_egg_id The pet's egg's item ID.
+ * @param pet_equip The pet's equipment's item ID.
+ * @param intimate The pet's intimacy value.
+ * @param hungry The pet's hunger value.
+ * @param rename_flag The pet's rename flag.
+ * @param incubate The pet's incubate state.
+ * @param pet_name The pet's name.
+ * @return The created pet's data struct, or NULL in case of errors.
+ *
+ **/
static struct s_pet *inter_pet_create(int account_id, int char_id, int pet_class, int pet_lv, int pet_egg_id,
- int pet_equip, short intimate, short hungry, char rename_flag, char incubate, const char *pet_name)
+ int pet_equip, short intimate, short hungry, char rename_flag,
+ char incubate, const char *pet_name)
{
- nullpo_ret(pet_name);
+ nullpo_retr(NULL, pet_name);
+
memset(inter_pet->pt, 0, sizeof(struct s_pet));
safestrncpy(inter_pet->pt->name, pet_name, NAME_LENGTH);
- if(incubate == 1)
- inter_pet->pt->account_id = inter_pet->pt->char_id = 0;
- else {
- inter_pet->pt->account_id = account_id;
- inter_pet->pt->char_id = char_id;
- }
+ inter_pet->pt->account_id = (incubate == 1) ? 0 : account_id;
+ inter_pet->pt->char_id = (incubate == 1) ? 0 : char_id;
inter_pet->pt->class_ = pet_class;
inter_pet->pt->level = pet_lv;
inter_pet->pt->egg_id = pet_egg_id;
inter_pet->pt->equip = pet_equip;
- inter_pet->pt->intimate = intimate;
- inter_pet->pt->hungry = hungry;
+ inter_pet->pt->intimate = cap_value(intimate, PET_INTIMACY_NONE, PET_INTIMACY_MAX);
+ inter_pet->pt->hungry = cap_value(hungry, PET_HUNGER_STARVING, PET_HUNGER_STUFFED);
inter_pet->pt->rename_flag = rename_flag;
inter_pet->pt->incubate = incubate;
+ inter_pet->pt->pet_id = 0; // Signal NEW pet.
- if(inter_pet->pt->hungry < 0)
- inter_pet->pt->hungry = 0;
- else if(inter_pet->pt->hungry > 100)
- inter_pet->pt->hungry = 100;
- if(inter_pet->pt->intimate < 0)
- inter_pet->pt->intimate = 0;
- else if(inter_pet->pt->intimate > 1000)
- inter_pet->pt->intimate = 1000;
-
- inter_pet->pt->pet_id = 0; //Signal NEW pet.
if ((inter_pet->pt->pet_id = inter_pet->tosql(inter_pet->pt)) != 0)
return inter_pet->pt;
- else //Failed...
- return NULL;
+
+ return NULL;
}
static struct s_pet *inter_pet_load(int account_id, int char_id, int pet_id)
diff --git a/src/char/inter.c b/src/char/inter.c
index 2d8d06a9c..5252b3315 100644
--- a/src/char/inter.c
+++ b/src/char/inter.c
@@ -676,13 +676,13 @@ static int inter_accreg_fromsql(int account_id, int char_id, int fd, int type)
plen += 4;
SQL->GetData(inter->sql_handle, 2, &data, NULL);
- len = strlen(data)+1;
+ len = strlen(data);
- WFIFOB(fd, plen) = (unsigned char)len;/* won't be higher; the column size is 254 */
+ WFIFOB(fd, plen) = (unsigned char)len; // Won't be higher; the column size is 255.
plen += 1;
- safestrncpy(WFIFOP(fd,plen), data, len);
- plen += len;
+ safestrncpy(WFIFOP(fd, plen), data, len + 1);
+ plen += len + 1;
WFIFOW(fd, 14) += 1;
diff --git a/src/char/mapif.c b/src/char/mapif.c
index 9077afae4..ed0133da3 100644
--- a/src/char/mapif.c
+++ b/src/char/mapif.c
@@ -559,7 +559,7 @@ static int mapif_guild_withdraw(int guild_id, int account_id, int char_id, int f
WBUFL(buf, 6) = account_id;
WBUFL(buf, 10) = char_id;
WBUFB(buf, 14) = flag;
- memcpy(WBUFP(buf, 15), mes, 40);
+ safestrncpy(WBUFP(buf, 15), mes, 40);
memcpy(WBUFP(buf, 55), name, NAME_LENGTH);
mapif->sendall(buf, 55 + NAME_LENGTH);
ShowInfo("int_guild: guild withdraw (%d - %d: %s - %s)\n", guild_id, account_id, name, mes);
@@ -2030,7 +2030,8 @@ static int mapif_parse_Registry(int fd)
if (count != 0) {
int cursor = 14, i;
- char key[SCRIPT_VARNAME_LENGTH+1], sval[254];
+ char key[SCRIPT_VARNAME_LENGTH + 1];
+ char sval[SCRIPT_STRING_VAR_LENGTH + 1];
bool isLoginActive = sockt->session_is_active(chr->login_fd);
if (isLoginActive)
@@ -2057,8 +2058,8 @@ static int mapif_parse_Registry(int fd)
/* str */
case 2:
len = RFIFOB(fd, cursor);
- safestrncpy(sval, RFIFOP(fd, cursor + 1), min((int)sizeof(sval), len));
- cursor += len + 1;
+ safestrncpy(sval, RFIFOP(fd, cursor + 1), min((int)sizeof(sval), len + 1));
+ cursor += len + 2;
inter->savereg(account_id, char_id, key, index, (intptr_t)sval, true);
break;
case 3:
diff --git a/src/common/HPMDataCheck.h b/src/common/HPMDataCheck.h
index d2e491ad2..821d68569 100644
--- a/src/common/HPMDataCheck.h
+++ b/src/common/HPMDataCheck.h
@@ -738,7 +738,6 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "PACKET_ZC_REPAIRITEMLIST", sizeof(struct PACKET_ZC_REPAIRITEMLIST), SERVER_TYPE_MAP },
{ "PACKET_ZC_REPAIRITEMLIST_sub", sizeof(struct PACKET_ZC_REPAIRITEMLIST_sub), SERVER_TYPE_MAP },
{ "PACKET_ZC_ROLE_CHANGE", sizeof(struct PACKET_ZC_ROLE_CHANGE), SERVER_TYPE_MAP },
- { "PACKET_ZC_SE_CASHSHOP_OPEN", sizeof(struct PACKET_ZC_SE_CASHSHOP_OPEN), SERVER_TYPE_MAP },
{ "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 },
@@ -859,6 +858,7 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
#define MAP_PC_GROUPS_H
#endif // MAP_PC_GROUPS_H
#ifdef MAP_PC_H
+ { "autocast_data", sizeof(struct autocast_data), SERVER_TYPE_MAP },
{ "autotrade_vending", sizeof(struct autotrade_vending), SERVER_TYPE_MAP },
{ "class_exp_group", sizeof(struct class_exp_group), SERVER_TYPE_MAP },
{ "class_exp_tables", sizeof(struct class_exp_tables), SERVER_TYPE_MAP },
@@ -966,6 +966,7 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "skill_cd_entry", sizeof(struct skill_cd_entry), SERVER_TYPE_MAP },
{ "skill_condition", sizeof(struct skill_condition), SERVER_TYPE_MAP },
{ "skill_interface", sizeof(struct skill_interface), SERVER_TYPE_MAP },
+ { "skill_required_item_data", sizeof(struct skill_required_item_data), SERVER_TYPE_MAP },
{ "skill_timerskill", sizeof(struct skill_timerskill), SERVER_TYPE_MAP },
{ "skill_unit", sizeof(struct skill_unit), SERVER_TYPE_MAP },
{ "skill_unit_group", sizeof(struct skill_unit_group), SERVER_TYPE_MAP },
diff --git a/src/common/Makefile.in b/src/common/Makefile.in
index 033b26ae3..22b974cfd 100644
--- a/src/common/Makefile.in
+++ b/src/common/Makefile.in
@@ -33,6 +33,19 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \
LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \
scanctx.h scanner.h strbuf.h wincompat.h)
+ifeq (@USE_LIBBACKTRACE@,yes)
+ LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace
+ LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \
+ dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \
+ simple.o sort.o state.o)
+ LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \
+ backtrace-supported.h config.h filenames.h internal.h)
+else
+ LIBBACKTRACE_D =
+ LIBBACKTRACE_OBJ =
+ LIBBACKTRACE_H =
+endif
+
MT19937AR_D = $(THIRDPARTY_D)/mt19937ar
MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o
MT19937AR_H = $(MT19937AR_D)/mt19937ar.h
@@ -95,7 +108,7 @@ help:
Makefile: Makefile.in
@$(MAKE) -C ../.. src/common/Makefile
-$(SYSINFO_INC): $(COMMON_C) $(COMMON_PH) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H)
+$(SYSINFO_INC): $(COMMON_C) $(COMMON_PH) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H)
@echo " MAKE $@"
@$(MAKE) -C ../.. sysinfo
@@ -121,7 +134,7 @@ obj_sql/common_sql.a: $(COMMON_SQL_OBJ) Makefile
@echo " AR $@"
@@AR@ rcs obj_sql/common_sql.a $(COMMON_SQL_OBJ)
-common: $(COMMON_OBJ) $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) obj_all/common.a Makefile
+common: $(COMMON_OBJ) $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) obj_all/common.a Makefile
common_sql: $(COMMON_SQL_OBJ) obj_sql/common_sql.a Makefile
@@ -134,14 +147,18 @@ $(LIBCONFIG_OBJ):
@echo " MAKE $@"
@$(MAKE) -C $(LIBCONFIG_D)
+$(LIBBACKTRACE_OBJ):
+ @echo " MAKE $@"
+ @$(MAKE) -C $(LIBBACKTRACE_D)
+
.SECONDEXPANSION:
-obj_all/sysinfo.o: sysinfo.c $(filter sysinfo.p.h, $(COMMON_PH)) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(SYSINFO_INC) | obj_all
+obj_all/sysinfo.o: sysinfo.c $(filter sysinfo.p.h, $(COMMON_PH)) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) $(SYSINFO_INC) | obj_all
-obj_all/%.o: %.c $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) | $(SYSINFO_INC) obj_all
+obj_all/%.o: %.c $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) | $(SYSINFO_INC) obj_all
@echo " CC $<"
@$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
-obj_sql/%.o: %.c $$(filter %.p.h, $(COMMON_PH)) $(COMMON_H) $(COMMON_SQL_H) $(CONFIG_H) $(LIBCONFIG_H) | $(SYSINFO_INC) obj_sql
+obj_sql/%.o: %.c $$(filter %.p.h, $(COMMON_PH)) $(COMMON_H) $(COMMON_SQL_H) $(CONFIG_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) | $(SYSINFO_INC) obj_sql
@echo " CC $<"
@$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
diff --git a/src/common/atomic.h b/src/common/atomic.h
index 518d2e6ab..b9157373f 100644
--- a/src/common/atomic.h
+++ b/src/common/atomic.h
@@ -103,8 +103,9 @@ forceinline volatile int64 InterlockedExchange64(volatile int64 *target, int64 v
// The __sync functions are available on x86 or ARMv6+
#if !defined(__x86_64__) && !defined(__i386__) \
+ && !defined(__ppc64__) && ! defined(__powerpc64__) \
&& ( !defined(__ARM_ARCH_VERSION__) || __ARM_ARCH_VERSION__ < 6 )
-#error Your Target Platfrom is not supported
+#error Target platform currently not supported
#endif
static forceinline int64 InterlockedExchangeAdd64(volatile int64 *addend, int64 increment){
diff --git a/src/common/cbasetypes.h b/src/common/cbasetypes.h
index 0b5613316..06333a7b2 100644
--- a/src/common/cbasetypes.h
+++ b/src/common/cbasetypes.h
@@ -62,16 +62,24 @@
#endif
// Standardize the ARM platform version, if available (the only values we're interested in right now are >= ARMv6)
+#ifdef __ARM_ARCH
+#define __ARM_ARCH_VERSION__ __ARM_ARCH
+#else
#if defined(__ARMV6__) || defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) \
|| defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) // gcc ARMv6
#define __ARM_ARCH_VERSION__ 6
-#elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7S__) // gcc ARMv7
+#elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7S__) // gcc ARMv7
#define __ARM_ARCH_VERSION__ 7
+#elif defined(__ARM_ARCH_8__) || defined(__ARM_ARCH_8A__)
+#define __ARM_ARCH_VERSION__ 8
#elif defined(_M_ARM) // MSVC
#define __ARM_ARCH_VERSION__ _M_ARM
+#elif defined(__TARGET_ARCH_ARM) // RVCT
+#define __ARM_ARCH_VERSION__ __TARGET_ARCH_ARM
#else
#define __ARM_ARCH_VERSION__ 0
#endif
+#endif
// Necessary for __NetBSD_Version__ (defined as VVRR00PP00) on NetBSD
#ifdef __NETBSD__
@@ -95,7 +103,7 @@
// debug function name
#ifndef __NETBSD__
#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
-# if __GNUC__ >= 2
+# if __GNUC__ >= 2 || defined(WIN32)
# define __func__ __FUNCTION__
# else
# define __func__ ""
@@ -410,13 +418,16 @@ typedef char bool;
#define ISALPHA(c) (isalpha((unsigned char)(c)))
#define ISCNTRL(c) (iscntrl((unsigned char)(c)))
#define ISDIGIT(c) (isdigit((unsigned char)(c)))
+#define ISXDIGIT(c) (isxdigit((unsigned char)(c)))
+#define ISBDIGIT(c) ((unsigned char)(c) == '0' || (unsigned char)(c) == '1')
+#define ISODIGIT(c) ((unsigned char)(c) >= '0' && (unsigned char)(c) <= '7')
+#define ISNSEPARATOR(c) ((unsigned char)(c) == '_')
#define ISGRAPH(c) (isgraph((unsigned char)(c)))
#define ISLOWER(c) (islower((unsigned char)(c)))
#define ISPRINT(c) (isprint((unsigned char)(c)))
#define ISPUNCT(c) (ispunct((unsigned char)(c)))
#define ISSPACE(c) (isspace((unsigned char)(c)))
#define ISUPPER(c) (isupper((unsigned char)(c)))
-#define ISXDIGIT(c) (isxdigit((unsigned char)(c)))
#define TOASCII(c) (toascii((unsigned char)(c)))
#define TOLOWER(c) (tolower((unsigned char)(c)))
#define TOUPPER(c) (toupper((unsigned char)(c)))
diff --git a/src/common/core.c b/src/common/core.c
index 54358b85c..5be90a411 100644
--- a/src/common/core.c
+++ b/src/common/core.c
@@ -489,6 +489,7 @@ int main(int argc, char **argv)
iMalloc->init();// needed for Show* in display_title() [FlavioJS]
showmsg->init();
+ nullpo->init();
cmdline->init();
@@ -552,6 +553,7 @@ int main(int argc, char **argv)
cmdline->final();
//sysinfo->final(); Called by iMalloc->final()
+ nullpo->final();
iMalloc->final();
showmsg->final(); // Should be after iMalloc->final()
diff --git a/src/common/hercules.h b/src/common/hercules.h
index 89ea761b4..e62656494 100644
--- a/src/common/hercules.h
+++ b/src/common/hercules.h
@@ -23,11 +23,15 @@
#include "config/core.h"
#include "common/cbasetypes.h"
+#ifdef HERCULES_CORE
+#define HPExport static
+#else // HERCULES_CORE
#ifdef WIN32
- #define HPExport __declspec(dllexport)
-#else
- #define HPExport __attribute__((visibility("default")))
-#endif
+#define HPExport __declspec(dllexport)
+#else // WIN32
+#define HPExport __attribute__((visibility("default")))
+#endif // WIN32
+#endif // HERCULES_CORE
#define HPShared extern
diff --git a/src/common/mmo.h b/src/common/mmo.h
index 687f5a187..e4b5a8bd5 100644
--- a/src/common/mmo.h
+++ b/src/common/mmo.h
@@ -64,7 +64,7 @@
// 20120307 - 2012-03-07aRagexeRE+ - 0x970
#ifndef PACKETVER
- #define PACKETVER 20141022
+ #define PACKETVER 20190530
#endif // PACKETVER
//Uncomment the following line if your client is ragexeRE instead of ragexe (required because of conflicting packets in ragexe vs ragexeRE).
@@ -132,7 +132,9 @@
#endif // PACKETVER_RE && (PACKETVER == 20120410 || PACKETVER == 10120418)
// Comment the following line to disable sc_data saving. [Skotlex]
+#ifndef ENABLE_SC_SAVING
#define ENABLE_SC_SAVING
+#endif
#if PACKETVER_MAIN_NUM >= 20070711 || PACKETVER_RE_NUM >= 20080827 || PACKETVER_AD_NUM >= 20070711 || PACKETVER_SAK_NUM >= 20070628 || defined(PACKETVER_ZERO)
// Comment the following like to disable server-side hot-key saving support. [Skotlex]
@@ -174,7 +176,9 @@
#else
#define MAX_BASE_CARTS 5
#endif
+#ifndef MAX_CARTS
#define MAX_CARTS (MAX_BASE_CARTS + MAX_CARTDECORATION_CARTS)
+#endif
#ifndef MAX_INVENTORY
#if PACKETVER_MAIN_NUM >= 20181219 || PACKETVER_RE_NUM >= 20181219 || PACKETVER_ZERO_NUM >= 20181212
@@ -204,19 +208,31 @@
#endif
//Number of slots carded equipment can have. Never set to less than 4 as they are also used to keep the data of forged items/equipment. [Skotlex]
//Note: The client seems unable to receive data for more than 4 slots due to all related packets having a fixed size.
+#ifndef MAX_SLOTS
#define MAX_SLOTS 4
+#endif
//Max amount of a single stacked item
+#ifndef MAX_AMOUNT
#define MAX_AMOUNT 30000
+#endif
+#ifndef MAX_ZENY
#define MAX_ZENY INT_MAX
+#endif
//Official Limit: 2.1b ( the var that stores the money doesn't go much higher than this by default )
+#ifndef MAX_BANK_ZENY
#define MAX_BANK_ZENY INT_MAX
+#endif
#ifndef MAX_LEVEL
#define MAX_LEVEL 175
#endif
+#ifndef MAX_FAME
#define MAX_FAME 1000000000
+#endif
+#ifndef MAX_CART
#define MAX_CART 100
+#endif
#ifndef MAX_SKILL_DB
#define MAX_SKILL_DB 1314 ///< Maximum number of skills in the skill DB (compacted array size)
#endif
@@ -380,7 +396,10 @@ STATIC_ASSERT(MAX_ITEM_OPTIONS <= 5, "This value is limited by the client and da
#define JOBL_BABY 0x2000
#define JOBL_THIRD 0x4000
-#define SCRIPT_VARNAME_LENGTH 32 ///< Maximum length of a script variable
+#define SCRIPT_VARNAME_LENGTH 32 ///< Maximum length of a script variable's name including affixes and excluding NULL-terminator.
+STATIC_ASSERT(SCRIPT_VARNAME_LENGTH <= 32, "This value is limited by the inter-server communication and database layout and should only be increased if you know the consequences.");
+#define SCRIPT_STRING_VAR_LENGTH 255 ///< Maximum length of strings stored in script variables excluding NULL-terminator.
+STATIC_ASSERT(SCRIPT_STRING_VAR_LENGTH <= 255, "This value is limited by the inter-server communication and database layout and should only be increased if you know the consequences.");
#define INFINITE_DURATION (-1) // Infinite duration for status changes
@@ -1378,6 +1397,27 @@ enum questinfo_type {
QINFO_MERCENARY_CLASS
};
+/** Pet hunger level **/
+enum e_pet_hunger_level {
+ PET_HUNGER_STARVING = 0,
+ PET_HUNGER_VERY_HUNGRY = 10,
+ PET_HUNGER_HUNGRY = 25,
+ PET_HUNGER_NEUTRAL = 75,
+ PET_HUNGER_SATISFIED = 90,
+ PET_HUNGER_STUFFED = 100
+};
+
+/** Pet intimacy level **/
+enum e_pet_intimacy_level {
+ PET_INTIMACY_NONE = 0,
+ PET_INTIMACY_AWKWARD = 1,
+ PET_INTIMACY_SHY = 100,
+ PET_INTIMACY_NEUTRAL = 250,
+ PET_INTIMACY_CORDIAL = 750,
+ PET_INTIMACY_LOYAL = 900,
+ PET_INTIMACY_MAX = 1000
+};
+
/* packet size constant for itemlist */
#if MAX_INVENTORY > MAX_STORAGE && MAX_INVENTORY > MAX_CART
#define MAX_ITEMLIST MAX_INVENTORY
diff --git a/src/common/nullpo.c b/src/common/nullpo.c
index dfb938708..11741745c 100644
--- a/src/common/nullpo.c
+++ b/src/common/nullpo.c
@@ -23,18 +23,106 @@
#include "nullpo.h"
#include "common/showmsg.h"
+#include "common/strlib.h"
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
-#ifdef HAVE_EXECINFO
+#if defined(HAVE_LIBBACKTRACE)
+#include "libbacktrace/backtrace.h"
+#include "libbacktrace/backtrace-supported.h"
+# if defined(WIN32)
+# include <windows.h>
+# elif defined(__sun)
+# include <limits.h>
+# elif defined(__linux) || defined(__linux__)
+# include <unistd.h>
+# include <limits.h>
+# elif defined(__APPLE__) && defined(__MACH__)
+# include <mach-o/dyld.h>
+# elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__)
+# include <sys/types.h>
+# include <sys/sysctl.h>
+# endif
+#elif defined(HAVE_EXECINFO)
#include <execinfo.h>
-#endif // HAVE_EXECINFO
+#endif // HAVE_LIBBACKTRACE
+
static struct nullpo_interface nullpo_s;
struct nullpo_interface *nullpo;
+#ifdef HAVE_LIBBACKTRACE
+static char executable_path[PATH_MAX];
+
+static void nullpo_error_callback(void *data, const char *msg, int errnum)
+{
+ ShowError("Error: %s (%d)", msg, errnum);
+}
+
+static int nullpo_print_callback(void *data, uintptr_t pc, const char *filename, int lineno, const char *function)
+{
+ ShowError("0x%lx %s\n",
+ (unsigned long) pc,
+ function == NULL ? "???" : function);
+ ShowError("\t%s:%d\n",
+ filename == NULL ? "???" : filename,
+ lineno);
+ return 0;
+}
+
+static void nullpo_backtrace_print(struct backtrace_state *state)
+{
+ backtrace_full(state, 0, nullpo_print_callback, nullpo_error_callback, state);
+}
+
+static bool nullpo_backtrace_get_executable_path(char *buf, size_t length)
+{
+#if defined(WIN32)
+ char *exe_path = NULL;
+ if (_get_pgmptr(&exe_path) != 0)
+ return false;
+ safestrncpy(buf, exe_path, length);
+ return true;
+#elif defined(__sun)
+ if (length < MAX_PATH)
+ return false;
+ if (realpath(getexecname(), buf) == NULL)
+ return false;
+ buf[length - 1] = '\0';
+ return true;
+#elif defined(__linux) || defined(__linux__)
+ ssize_t len = readlink("/proc/self/exe", buf, length);
+ if (len <= 0 || len == length)
+ return false;
+ buf[len] = '\0';
+ return true;
+#elif defined(__APPLE__) && defined(__MACH__)
+ uint32_t len = (uint32_t)length;
+ if (_NSGetExecutablePath(buf, &len) != 0)
+ return false; // buffer too small (!)
+ // resolve symlinks, ., .. if possible
+ char *canonical_path = realpath(buf, NULL);
+ if (canonical_path != NULL) {
+ safestrncpy(buf, canonical_path, length);
+ free(canonical_path);
+ }
+ return true;
+#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__)
+ int mib[4];
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PROC;
+ mib[2] = KERN_PROC_PATHNAME;
+ mib[3] = -1;
+ if (sysctl(mib, 4, buf, &length, NULL, 0) != 0)
+ return false;
+ return true;
+#endif
+ return false;
+}
+#endif // HAVE_LIBBACKTRACE
+
/**
* Reports failed assertions or NULL pointers
*
@@ -46,12 +134,6 @@ struct nullpo_interface *nullpo;
*/
static void assert_report(const char *file, int line, const char *func, const char *targetname, const char *title)
{
-#ifdef HAVE_EXECINFO
- void *array[10];
- int size;
- char **strings;
- int i;
-#endif // HAVE_EXECINFO
if (file == NULL)
file = "??";
@@ -60,21 +142,46 @@ static void assert_report(const char *file, int line, const char *func, const ch
ShowError("--- %s --------------------------------------------\n", title);
ShowError("%s:%d: '%s' in function `%s'\n", file, line, targetname, func);
-#ifdef HAVE_EXECINFO
- size = (int)backtrace(array, 10);
- strings = backtrace_symbols(array, size);
- for (i = 0; i < size; i++)
+#ifdef HAVE_LIBBACKTRACE
+ if (nullpo->backtrace_state != NULL)
+ nullpo_backtrace_print(nullpo->backtrace_state);
+#elif defined(HAVE_EXECINFO)
+ void *array[10];
+ int size = (int)backtrace(array, 10);
+ char **strings = backtrace_symbols(array, size);
+ for (int i = 0; i < size; i++)
ShowError("%s\n", strings[i]);
free(strings);
-#endif // HAVE_EXECINFO
+#endif // HAVE_LIBBACKTRACE
ShowError("--- end %s ----------------------------------------\n", title);
}
+static void nullpo_init(void)
+{
+#ifdef HAVE_LIBBACKTRACE
+ if (!nullpo_backtrace_get_executable_path(executable_path, sizeof executable_path)) {
+ safestrncpy(executable_path, "hercules", sizeof executable_path);
+ }
+ nullpo->backtrace_state = backtrace_create_state(executable_path, BACKTRACE_SUPPORTS_THREADS, nullpo_error_callback, NULL);
+#endif
+}
+
+static void nullpo_final(void)
+{
+ // FIXME: libbacktrace doesn't provide a backtrace_free_state, and it's unsafe to pass the state to
+ // backtrace_free (the function itself uses the state internally). For the time being, we'll leave the state
+ // allocated until program termination as shown in their examples.
+}
+
/**
*
**/
void nullpo_defaults(void)
{
nullpo = &nullpo_s;
+ nullpo->init = nullpo_init;
+ nullpo->final = nullpo_final;
nullpo->assert_report = assert_report;
+
+ nullpo->backtrace_state = NULL;
}
diff --git a/src/common/nullpo.h b/src/common/nullpo.h
index fc5386243..3eb002834 100644
--- a/src/common/nullpo.h
+++ b/src/common/nullpo.h
@@ -28,6 +28,8 @@
// if need disable asserts checks this line can be commented
#define ASSERT_CHECK
+struct backtrace_state;
+
/** Assert */
#if defined(ASSERT_CHECK)
@@ -148,7 +150,12 @@
struct nullpo_interface {
+ void (*init) (void);
+ void (*final) (void);
+
void (*assert_report) (const char *file, int line, const char *func, const char *targetname, const char *title);
+
+ struct backtrace_state *backtrace_state;
};
#ifdef HERCULES_CORE
diff --git a/src/common/packets/packets2020_len_main.h b/src/common/packets/packets2020_len_main.h
index 3349c9872..215f59727 100644
--- a/src/common/packets/packets2020_len_main.h
+++ b/src/common/packets/packets2020_len_main.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2018-2020 Hercules Dev Team
- * Copyright (C) 2018-2020 Andrei Karas (4144)
+ * Copyright (C) 2018-2020 Hercules Dev Team
+ * Copyright (C) 2018-2020 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -4617,7 +4617,9 @@ packetLen(0x0b6f, 177)
#endif
// Packet: 0x0b70
-#if PACKETVER >= 20200122
+#if PACKETVER >= 20200318
+packetLen(0x0b70, -1)
+#elif PACKETVER >= 20200122
packetLen(0x0b70, 8)
#endif
@@ -4627,9 +4629,81 @@ packetLen(0x0b71, 177)
#endif
// Packet: 0x0b72
-#if PACKETVER >= 20200122
+#if PACKETVER >= 20200318
+packetLen(0x0b72, -1)
+#elif PACKETVER >= 20200122
packetLen(0x0b72, 4)
#endif
+// Packet: 0x0b73
+#if PACKETVER >= 20200212
+packetLen(0x0b73, 8)
+#endif
+
+// Packet: 0x0b74
+#if PACKETVER >= 20200304
+packetLen(0x0b74, 1026)
+#endif
+
+// Packet: 0x0b75
+#if PACKETVER >= 20200304
+packetLen(0x0b75, 1026)
+#endif
+
+// Packet: 0x0b76
+#if PACKETVER >= 20200401
+packetLen(0x0b76, 77)
+#endif
+
+// Packet: 0x0b77
+#if PACKETVER >= 20200506
+packetLen(0x0b77, -1)
+#endif
+
+// Packet: 0x0b78
+#if PACKETVER >= 20200506
+packetLen(0x0b78, -1)
+#endif
+
+// Packet: 0x0b79
+#if PACKETVER >= 20200506
+packetLen(0x0b79, -1)
+#endif
+
+// Packet: 0x0b7a
+#if PACKETVER >= 20200506
+packetLen(0x0b7a, -1)
+#endif
+
+// Packet: 0x0b7b
+#if PACKETVER >= 20200701
+packetLen(0x0b7b, 118)
+#endif
+
+// Packet: 0x0b7c
+#if PACKETVER >= 20200701
+packetLen(0x0b7c, -1)
+#endif
+
+// Packet: 0x0b7d
+#if PACKETVER >= 20200701
+packetLen(0x0b7d, -1)
+#endif
+
+// Packet: 0x0b7e
+#if PACKETVER >= 20200701
+packetLen(0x0b7e, 60)
+#endif
+
+// Packet: 0x0b7f
+#if PACKETVER >= 20200701
+packetLen(0x0b7f, 10)
+#endif
+
+// Packet: 0x0b80
+#if PACKETVER >= 20200701
+packetLen(0x0b80, 10)
+#endif
+
#endif /* COMMON_PACKETS2020_LEN_MAIN_H */
diff --git a/src/common/packets/packets2020_len_re.h b/src/common/packets/packets2020_len_re.h
index b33278c1c..7296d86c5 100644
--- a/src/common/packets/packets2020_len_re.h
+++ b/src/common/packets/packets2020_len_re.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2018-2020 Hercules Dev Team
- * Copyright (C) 2018-2020 Andrei Karas (4144)
+ * Copyright (C) 2018-2020 Hercules Dev Team
+ * Copyright (C) 2018-2020 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -4623,7 +4623,9 @@ packetLen(0x0b6f, 177)
#endif
// Packet: 0x0b70
-#if PACKETVER >= 20200122
+#if PACKETVER >= 20200709
+packetLen(0x0b70, -1)
+#elif PACKETVER >= 20200122
packetLen(0x0b70, 8)
#endif
@@ -4633,9 +4635,81 @@ packetLen(0x0b71, 177)
#endif
// Packet: 0x0b72
-#if PACKETVER >= 20200122
+#if PACKETVER >= 20200709
+packetLen(0x0b72, -1)
+#elif PACKETVER >= 20200122
packetLen(0x0b72, 4)
#endif
+// Packet: 0x0b73
+#if PACKETVER >= 20200212
+packetLen(0x0b73, 8)
+#endif
+
+// Packet: 0x0b74
+#if PACKETVER >= 20200304
+packetLen(0x0b74, 1026)
+#endif
+
+// Packet: 0x0b75
+#if PACKETVER >= 20200304
+packetLen(0x0b75, 1026)
+#endif
+
+// Packet: 0x0b76
+#if PACKETVER >= 20200709
+packetLen(0x0b76, 77)
+#endif
+
+// Packet: 0x0b77
+#if PACKETVER >= 20200709
+packetLen(0x0b77, -1)
+#endif
+
+// Packet: 0x0b78
+#if PACKETVER >= 20200709
+packetLen(0x0b78, -1)
+#endif
+
+// Packet: 0x0b79
+#if PACKETVER >= 20200709
+packetLen(0x0b79, -1)
+#endif
+
+// Packet: 0x0b7a
+#if PACKETVER >= 20200709
+packetLen(0x0b7a, -1)
+#endif
+
+// Packet: 0x0b7b
+#if PACKETVER >= 20200709
+packetLen(0x0b7b, 118)
+#endif
+
+// Packet: 0x0b7c
+#if PACKETVER >= 20200709
+packetLen(0x0b7c, -1)
+#endif
+
+// Packet: 0x0b7d
+#if PACKETVER >= 20200709
+packetLen(0x0b7d, -1)
+#endif
+
+// Packet: 0x0b7e
+#if PACKETVER >= 20200709
+packetLen(0x0b7e, 60)
+#endif
+
+// Packet: 0x0b7f
+#if PACKETVER >= 20200709
+packetLen(0x0b7f, 10)
+#endif
+
+// Packet: 0x0b80
+#if PACKETVER >= 20200709
+packetLen(0x0b80, 10)
+#endif
+
#endif /* COMMON_PACKETS2020_LEN_RE_H */
diff --git a/src/common/packets/packets2020_len_zero.h b/src/common/packets/packets2020_len_zero.h
index 153b66286..cba80e90c 100644
--- a/src/common/packets/packets2020_len_zero.h
+++ b/src/common/packets/packets2020_len_zero.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2018-2020 Hercules Dev Team
- * Copyright (C) 2018-2020 Andrei Karas (4144)
+ * Copyright (C) 2018-2020 Hercules Dev Team
+ * Copyright (C) 2018-2020 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -4617,7 +4617,9 @@ packetLen(0x0b6f, 177)
#endif
// Packet: 0x0b70
-#if PACKETVER >= 20200129
+#if PACKETVER >= 20200401
+packetLen(0x0b70, -1)
+#elif PACKETVER >= 20200129
packetLen(0x0b70, 8)
#endif
@@ -4627,9 +4629,81 @@ packetLen(0x0b71, 177)
#endif
// Packet: 0x0b72
-#if PACKETVER >= 20200129
+#if PACKETVER >= 20200401
+packetLen(0x0b72, -1)
+#elif PACKETVER >= 20200129
packetLen(0x0b72, 4)
#endif
+// Packet: 0x0b73
+#if PACKETVER >= 20200212
+packetLen(0x0b73, 8)
+#endif
+
+// Packet: 0x0b74
+#if PACKETVER >= 20200304
+packetLen(0x0b74, 1026)
+#endif
+
+// Packet: 0x0b75
+#if PACKETVER >= 20200304
+packetLen(0x0b75, 1026)
+#endif
+
+// Packet: 0x0b76
+#if PACKETVER >= 20200401
+packetLen(0x0b76, 77)
+#endif
+
+// Packet: 0x0b77
+#if PACKETVER >= 20200506
+packetLen(0x0b77, -1)
+#endif
+
+// Packet: 0x0b78
+#if PACKETVER >= 20200506
+packetLen(0x0b78, -1)
+#endif
+
+// Packet: 0x0b79
+#if PACKETVER >= 20200506
+packetLen(0x0b79, -1)
+#endif
+
+// Packet: 0x0b7a
+#if PACKETVER >= 20200506
+packetLen(0x0b7a, -1)
+#endif
+
+// Packet: 0x0b7b
+#if PACKETVER >= 20200701
+packetLen(0x0b7b, 118)
+#endif
+
+// Packet: 0x0b7c
+#if PACKETVER >= 20200701
+packetLen(0x0b7c, -1)
+#endif
+
+// Packet: 0x0b7d
+#if PACKETVER >= 20200701
+packetLen(0x0b7d, -1)
+#endif
+
+// Packet: 0x0b7e
+#if PACKETVER >= 20200701
+packetLen(0x0b7e, 60)
+#endif
+
+// Packet: 0x0b7f
+#if PACKETVER >= 20200701
+packetLen(0x0b7f, 10)
+#endif
+
+// Packet: 0x0b80
+#if PACKETVER >= 20200701
+packetLen(0x0b80, 10)
+#endif
+
#endif /* COMMON_PACKETS2020_LEN_ZERO_H */
diff --git a/src/common/packets/packets_len_main.h b/src/common/packets/packets_len_main.h
index 7b93b35b0..365b0af6f 100644
--- a/src/common/packets/packets_len_main.h
+++ b/src/common/packets/packets_len_main.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2018-2020 Hercules Dev Team
- * Copyright (C) 2018-2020 Andrei Karas (4144)
+ * Copyright (C) 2018-2020 Hercules Dev Team
+ * Copyright (C) 2018-2020 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/common/packets/packets_len_re.h b/src/common/packets/packets_len_re.h
index 23a507886..302381722 100644
--- a/src/common/packets/packets_len_re.h
+++ b/src/common/packets/packets_len_re.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2018-2020 Hercules Dev Team
- * Copyright (C) 2018-2020 Andrei Karas (4144)
+ * Copyright (C) 2018-2020 Hercules Dev Team
+ * Copyright (C) 2018-2020 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/common/packets/packets_len_zero.h b/src/common/packets/packets_len_zero.h
index 9f1595459..c07f89e3f 100644
--- a/src/common/packets/packets_len_zero.h
+++ b/src/common/packets/packets_len_zero.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2018-2020 Hercules Dev Team
- * Copyright (C) 2018-2020 Andrei Karas (4144)
+ * Copyright (C) 2018-2020 Hercules Dev Team
+ * Copyright (C) 2018-2020 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/login/Makefile.in b/src/login/Makefile.in
index 464b33e56..7252eea04 100644
--- a/src/login/Makefile.in
+++ b/src/login/Makefile.in
@@ -36,6 +36,19 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \
LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \
scanctx.h scanner.h strbuf.h wincompat.h)
+ifeq (@USE_LIBBACKTRACE@,yes)
+ LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace
+ LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \
+ dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \
+ simple.o sort.o state.o)
+ LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \
+ backtrace-supported.h config.h filenames.h internal.h)
+else
+ LIBBACKTRACE_D =
+ LIBBACKTRACE_OBJ =
+ LIBBACKTRACE_H =
+endif
+
MT19937AR_D = $(THIRDPARTY_D)/mt19937ar
MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o
MT19937AR_H = $(MT19937AR_D)/mt19937ar.h
@@ -47,7 +60,7 @@ LOGIN_PH = lclif.p.h
HAVE_MYSQL=@HAVE_MYSQL@
ifeq ($(HAVE_MYSQL),yes)
- LOGIN_SERVER_SQL_DEPENDS=$(LOGIN_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(SYSINFO_INC)
+ LOGIN_SERVER_SQL_DEPENDS=$(LOGIN_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) $(SYSINFO_INC)
else
LOGIN_SERVER_SQL_DEPENDS=needs_mysql
endif
@@ -86,7 +99,7 @@ help:
Makefile: Makefile.in
@$(MAKE) -C ../.. src/login/Makefile
-$(SYSINFO_INC): $(LOGIN_C) $(LOGIN_PH) $(LOGIN_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H)
+$(SYSINFO_INC): $(LOGIN_C) $(LOGIN_PH) $(LOGIN_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H)
@echo " MAKE $@"
@$(MAKE) -C ../.. sysinfo
@@ -107,7 +120,7 @@ login-server: ../../login-server@EXEEXT@
../../login-server@EXEEXT@: $(LOGIN_SERVER_SQL_DEPENDS) Makefile
@echo " LD $(notdir $@)"
@$(CC) @STATIC@ @LDFLAGS@ -o ../../login-server@EXEEXT@ $(LOGIN_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a \
- $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) @LIBS@ @MYSQL_LIBS@
+ $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) @LIBS@ @MYSQL_LIBS@
# missing object files
$(COMMON_D)/obj_all/common.a:
@@ -126,10 +139,14 @@ $(LIBCONFIG_OBJ):
@echo " MAKE $@"
@$(MAKE) -C $(LIBCONFIG_D)
+$(LIBBACKTRACE_OBJ):
+ @echo " MAKE $@"
+ @$(MAKE) -C $(LIBBACKTRACE_D)
+
.SECONDEXPANSION:
# login object files
-obj_sql/%.o: %.c $$(filter %.p.h, $(LOGIN_PH)) $(LOGIN_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) | obj_sql
+obj_sql/%.o: %.c $$(filter %.p.h, $(LOGIN_PH)) $(LOGIN_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) | obj_sql
@echo " CC $<"
@$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
diff --git a/src/login/account.c b/src/login/account.c
index 3632c257a..ec0bc81e8 100644
--- a/src/login/account.c
+++ b/src/login/account.c
@@ -632,7 +632,8 @@ static void account_mmo_save_accreg2(AccountDB *self, int fd, int account_id, in
sql_handle = db->accounts;
if (count) {
int cursor = 14, i;
- char key[SCRIPT_VARNAME_LENGTH+1], sval[254];
+ char key[SCRIPT_VARNAME_LENGTH + 1];
+ char sval[SCRIPT_STRING_VAR_LENGTH + 1];
for (i = 0; i < count; i++) {
unsigned int index;
@@ -657,8 +658,8 @@ static void account_mmo_save_accreg2(AccountDB *self, int fd, int account_id, in
/* str */
case 2:
len = RFIFOB(fd, cursor);
- safestrncpy(sval, RFIFOP(fd, cursor + 1), min((int)sizeof(sval), len));
- cursor += len + 1;
+ safestrncpy(sval, RFIFOP(fd, cursor + 1), min((int)sizeof(sval), len + 1));
+ cursor += len + 2;
if( SQL_ERROR == SQL->Query(sql_handle, "REPLACE INTO `%s` (`account_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%s')", db->global_acc_reg_str_db, account_id, key, index, sval) )
Sql_ShowDebug(sql_handle);
break;
@@ -719,13 +720,13 @@ static void account_mmo_send_accreg2(AccountDB *self, int fd, int account_id, in
plen += 4;
SQL->GetData(sql_handle, 2, &data, NULL);
- len = strlen(data)+1;
+ len = strlen(data);
- WFIFOB(fd, plen) = (unsigned char)len;/* won't be higher; the column size is 254 */
+ WFIFOB(fd, plen) = (unsigned char)len; // Won't be higher; the column size is 255.
plen += 1;
- safestrncpy(WFIFOP(fd,plen), data, len);
- plen += len;
+ safestrncpy(WFIFOP(fd, plen), data, len + 1);
+ plen += len + 1;
WFIFOW(fd, 14) += 1;
diff --git a/src/login/login.c b/src/login/login.c
index 4201a8b4e..32c935d75 100644
--- a/src/login/login.c
+++ b/src/login/login.c
@@ -1406,10 +1406,10 @@ static void login_client_login_mobile_otp_request(int fd, struct login_session_d
static void login_char_server_connection_status(int fd, struct login_session_data* sd, uint8 status) __attribute__((nonnull (2)));
static void login_char_server_connection_status(int fd, struct login_session_data* sd, uint8 status)
{
- WFIFOHEAD(fd,3);
- WFIFOW(fd,0) = 0x2711;
- WFIFOB(fd,2) = status;
- WFIFOSET(fd,3);
+ WFIFOHEAD(fd, 3);
+ WFIFOW(fd, 0) = 0x2711;
+ WFIFOB(fd, 2) = status;
+ WFIFOSET2(fd, 3);
}
// CA_CHARSERVERCONNECT
@@ -1758,7 +1758,7 @@ static bool login_config_read_permission_hash(const char *filename, struct confi
static void login_clear_dnsbl_servers(void)
{
while (VECTOR_LENGTH(login->config->dnsbl_servers) > 0) {
- aFree(&VECTOR_POP(login->config->dnsbl_servers));
+ aFree(VECTOR_POP(login->config->dnsbl_servers));
}
VECTOR_CLEAR(login->config->dnsbl_servers);
}
diff --git a/src/map/Makefile.in b/src/map/Makefile.in
index 6dbebb5ad..75093662f 100644
--- a/src/map/Makefile.in
+++ b/src/map/Makefile.in
@@ -36,6 +36,19 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \
LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \
scanctx.h scanner.h strbuf.h wincompat.h)
+ifeq (@USE_LIBBACKTRACE@,yes)
+ LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace
+ LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \
+ dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \
+ simple.o sort.o state.o)
+ LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \
+ backtrace-supported.h config.h filenames.h internal.h)
+else
+ LIBBACKTRACE_D =
+ LIBBACKTRACE_OBJ =
+ LIBBACKTRACE_H =
+endif
+
MT19937AR_D = $(THIRDPARTY_D)/mt19937ar
MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o
MT19937AR_H = $(MT19937AR_D)/mt19937ar.h
@@ -60,7 +73,7 @@ MAP_PH = refine.p.h
HAVE_MYSQL=@HAVE_MYSQL@
ifeq ($(HAVE_MYSQL),yes)
- MAP_SERVER_SQL_DEPENDS=$(MAP_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(SYSINFO_INC)
+ MAP_SERVER_SQL_DEPENDS=$(MAP_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) $(SYSINFO_INC)
else
MAP_SERVER_SQL_DEPENDS=needs_mysql
endif
@@ -99,7 +112,7 @@ help:
Makefile: Makefile.in
@$(MAKE) -C ../.. src/map/Makefile
-$(SYSINFO_INC): $(MAP_C) $(MAP_PH) $(MAP_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H)
+$(SYSINFO_INC): $(MAP_C) $(MAP_PH) $(MAP_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H)
@echo " MAKE $@"
@$(MAKE) -C ../.. sysinfo
@@ -120,7 +133,7 @@ map-server: ../../map-server@EXEEXT@
../../map-server@EXEEXT@: $(MAP_SERVER_SQL_DEPENDS) Makefile
@echo " LD $(notdir $@)"
@$(CC) @STATIC@ @LDFLAGS@ -o ../../map-server@EXEEXT@ $(MAP_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a \
- $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) @LIBS@ @MYSQL_LIBS@
+ $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) @LIBS@ @MYSQL_LIBS@
# missing object files
$(COMMON_D)/obj_all/common.a:
@@ -139,10 +152,14 @@ $(LIBCONFIG_OBJ):
@echo " MAKE $@"
@$(MAKE) -C $(LIBCONFIG_D)
+$(LIBBACKTRACE_OBJ):
+ @echo " MAKE $@"
+ @$(MAKE) -C $(LIBBACKTRACE_D)
+
.SECONDEXPANSION:
# map object files
-obj_sql/%.o: %.c $$(filter %.p.h, $(MAP_PH)) $(MAP_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) | obj_sql
+obj_sql/%.o: %.c $$(filter %.p.h, $(MAP_PH)) $(MAP_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) | obj_sql
@echo " CC $<"
@$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
diff --git a/src/map/achievement.c b/src/map/achievement.c
index e6a9ae3be..0b0d9749b 100644
--- a/src/map/achievement.c
+++ b/src/map/achievement.c
@@ -194,6 +194,8 @@ static void achievement_progress_add(struct map_session_data *sd, const struct a
// Check if the Achievement is complete.
if (achievement->check_complete(sd, ad)) {
achievement->validate_achieve(sd, ad->id);
+ if ((ach = achievement->ensure(sd, ad)) == NULL)
+ return;
ach->completed_at = time(NULL);
}
@@ -232,6 +234,8 @@ static void achievement_progress_set(struct map_session_data *sd, const struct a
if (achievement->check_complete(sd, ad)) {
achievement->validate_achieve(sd, ad->id);
+ if ((ach = achievement->ensure(sd, ad)) == NULL)
+ return;
ach->completed_at = time(NULL);
}
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 707522423..9fb2540ef 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -962,39 +962,10 @@ ACMD(option)
*------------------------------------------*/
ACMD(hide)
{
- if (pc_isinvisible(sd)) {
- sd->sc.option &= ~OPTION_INVISIBLE;
- if (sd->disguise != -1 )
- status->set_viewdata(&sd->bl, sd->disguise);
- else
- status->set_viewdata(&sd->bl, sd->status.class);
- clif->message(fd, msg_fd(fd,10)); // Invisible: Off
-
- // increment the number of pvp players on the map
- map->list[sd->bl.m].users_pvp++;
-
- if( map->list[sd->bl.m].flag.pvp && !map->list[sd->bl.m].flag.pvp_nocalcrank ) {
- // register the player for ranking calculations
- sd->pvp_timer = timer->add( timer->gettick() + 200, pc->calc_pvprank_timer, sd->bl.id, 0 );
- }
- //bugreport:2266
- map->foreachinmovearea(clif->insight, &sd->bl, AREA_SIZE, sd->bl.x, sd->bl.y, BL_ALL, &sd->bl);
- } else {
- clif->clearunit_area(&sd->bl, CLR_OUTSIGHT);
- sd->sc.option |= OPTION_INVISIBLE;
- sd->vd.class = INVISIBLE_CLASS;
- clif->message(fd, msg_fd(fd,11)); // Invisible: On
-
- // decrement the number of pvp players on the map
- map->list[sd->bl.m].users_pvp--;
-
- if( map->list[sd->bl.m].flag.pvp && !map->list[sd->bl.m].flag.pvp_nocalcrank && sd->pvp_timer != INVALID_TIMER ) {
- // unregister the player for ranking
- timer->delete( sd->pvp_timer, pc->calc_pvprank_timer );
- sd->pvp_timer = INVALID_TIMER;
- }
- }
- clif->changeoption(&sd->bl);
+ if (pc_isinvisible(sd))
+ pc->unhide(sd, true);
+ else
+ pc->hide(sd, true);
return true;
}
@@ -1197,17 +1168,17 @@ ACMD(item)
memset(item_name, '\0', sizeof(item_name));
- if (!strcmpi(info->command,"itembound") && (!*message || (
- sscanf(message, "\"%99[^\"]\" %12d %12d", item_name, &number, &bound) < 2 &&
- sscanf(message, "%99s %12d %12d", item_name, &number, &bound) < 2
- ))) {
- clif->message(fd, msg_fd(fd,295)); // Please enter an item name or ID (usage: @itembound <item name/ID> <quantity> <bound_type>).
+ if (!strcmpi(info->command, "itembound") && (!*message || (
+ sscanf(message, "\"%99[^\"]\" %12d %12d", item_name, &number, &bound) < 1 &&
+ sscanf(message, "%99s %12d %12d", item_name, &number, &bound) < 1
+ ))) {
+ clif->message(fd, msg_fd(fd, 295)); // Please enter an item name or ID (usage: @itembound <item name/ID> <quantity> <bound_type>).
return false;
} else if (!*message
- || ( sscanf(message, "\"%99[^\"]\" %12d", item_name, &number) < 1
- && sscanf(message, "%99s %12d", item_name, &number) < 1
- )) {
- clif->message(fd, msg_fd(fd,983)); // Please enter an item name or ID (usage: @item <item name/ID> <quantity>).
+ || (sscanf(message, "\"%99[^\"]\" %12d", item_name, &number) < 1
+ && sscanf(message, "%99s %12d", item_name, &number) < 1
+ )) {
+ clif->message(fd, msg_fd(fd, 983)); // Please enter an item name or ID (usage: @item <item name/ID> <quantity>).
return false;
}
@@ -1215,33 +1186,33 @@ ACMD(item)
number = 1;
if ((item_data = itemdb->search_name(item_name)) == NULL &&
- (item_data = itemdb->exists(atoi(item_name))) == NULL)
+ (item_data = itemdb->exists(atoi(item_name))) == NULL)
{
- clif->message(fd, msg_fd(fd,19)); // Invalid item ID or name.
+ clif->message(fd, msg_fd(fd, 19)); // Invalid item ID or name.
return false;
}
- if(!strcmpi(info->command,"itembound") ) {
- if( !(bound >= IBT_MIN && bound <= IBT_MAX) ) {
- clif->message(fd, msg_fd(fd,298)); // Invalid bound type
+ if (!strcmpi(info->command, "itembound")) {
+ if (!(bound >= IBT_MIN && bound <= IBT_MAX)) {
+ clif->message(fd, msg_fd(fd, 298)); // Invalid bound type
return false;
}
- switch( (enum e_item_bound_type)bound ) {
- case IBT_CHARACTER:
- case IBT_ACCOUNT:
- break; /* no restrictions */
- case IBT_PARTY:
- if( !sd->status.party_id ) {
- clif->message(fd, msg_fd(fd,1498)); //You can't add a party bound item to a character without party!
- return false;
- }
- break;
- case IBT_GUILD:
- if( !sd->status.guild_id ) {
- clif->message(fd, msg_fd(fd,1499)); //You can't add a guild bound item to a character without guild!
- return false;
- }
- break;
+ switch ((enum e_item_bound_type)bound) {
+ case IBT_CHARACTER:
+ case IBT_ACCOUNT:
+ break; /* no restrictions */
+ case IBT_PARTY:
+ if (!sd->status.party_id) {
+ clif->message(fd, msg_fd(fd, 1498)); //You can't add a party bound item to a character without party!
+ return false;
+ }
+ break;
+ case IBT_GUILD:
+ if (!sd->status.guild_id) {
+ clif->message(fd, msg_fd(fd, 1499)); //You can't add a guild bound item to a character without guild!
+ return false;
+ }
+ break;
}
}
@@ -1249,8 +1220,8 @@ ACMD(item)
get_count = number;
//Check if it's stackable.
if (!itemdb->isstackable2(item_data)) {
- if( bound && (item_data->type == IT_PETEGG || item_data->type == IT_PETARMOR) ) {
- clif->message(fd, msg_fd(fd,498)); // Cannot create bounded pet eggs or pet armors.
+ if (bound && (item_data->type == IT_PETEGG || item_data->type == IT_PETARMOR)) {
+ clif->message(fd, msg_fd(fd, 498)); // Cannot create bounded pet eggs or pet armors.
return false;
}
get_count = 1;
@@ -1270,7 +1241,7 @@ ACMD(item)
}
if (flag == 0)
- clif->message(fd, msg_fd(fd,18)); // Item created.
+ clif->message(fd, msg_fd(fd, 18)); // Item created.
return true;
}
@@ -1283,37 +1254,37 @@ ACMD(item2)
struct item_data *item_data;
char item_name[100];
int item_id, number = 0, bound = 0;
- int identify = 0, refine_level = 0, attr = 0;
+ int identify = 1, refine_level = 0, attr = ATTR_NONE;
int c1 = 0, c2 = 0, c3 = 0, c4 = 0;
memset(item_name, '\0', sizeof(item_name));
- if (!strcmpi(info->command,"itembound2") && (!*message || (
+ if (!strcmpi(info->command, "itembound2") && (!*message || (
sscanf(message, "\"%99[^\"]\" %12d %12d %12d %12d %12d %12d %12d %12d %12d", item_name, &number, &identify, &refine_level, &attr, &c1, &c2, &c3, &c4, &bound) < 10 &&
- sscanf(message, "%99s %12d %12d %12d %12d %12d %12d %12d %12d %12d", item_name, &number, &identify, &refine_level, &attr, &c1, &c2, &c3, &c4, &bound) < 10 ))) {
- clif->message(fd, msg_fd(fd,296)); // Please enter all parameters (usage: @itembound2 <item name/ID> <quantity>
- clif->message(fd, msg_fd(fd,297)); // <identify_flag> <refine> <attribute> <card1> <card2> <card3> <card4> <bound_type>).
+ sscanf(message, "%99s %12d %12d %12d %12d %12d %12d %12d %12d %12d", item_name, &number, &identify, &refine_level, &attr, &c1, &c2, &c3, &c4, &bound) < 10))) {
+ clif->message(fd, msg_fd(fd, 296)); // Please enter all parameters (usage: @itembound2 <item name/ID> <quantity>
+ clif->message(fd, msg_fd(fd, 297)); // <identify_flag> <refine> <attribute> <card1> <card2> <card3> <card4> <bound_type>).
return false;
} else if (!*message
- || ( sscanf(message, "\"%99[^\"]\" %12d %12d %12d %12d %12d %12d %12d %12d", item_name, &number, &identify, &refine_level, &attr, &c1, &c2, &c3, &c4) < 9
- && sscanf(message, "%99s %12d %12d %12d %12d %12d %12d %12d %12d", item_name, &number, &identify, &refine_level, &attr, &c1, &c2, &c3, &c4) < 9
- )) {
- clif->message(fd, msg_fd(fd,984)); // Please enter all parameters (usage: @item2 <item name/ID> <quantity>
- clif->message(fd, msg_fd(fd,985)); // <identify_flag> <refine> <attribute> <card1> <card2> <card3> <card4>).
+ || (sscanf(message, "\"%99[^\"]\" %12d %12d %12d %12d %12d %12d %12d %12d", item_name, &number, &identify, &refine_level, &attr, &c1, &c2, &c3, &c4) < 1
+ && sscanf(message, "%99s %12d %12d %12d %12d %12d %12d %12d %12d", item_name, &number, &identify, &refine_level, &attr, &c1, &c2, &c3, &c4) < 1
+ )) {
+ clif->message(fd, msg_fd(fd, 984)); // Please enter all parameters (usage: @item2 <item name/ID> <quantity>
+ clif->message(fd, msg_fd(fd, 985)); // <identify_flag> <refine> <attribute> <card1> <card2> <card3> <card4>).
return false;
}
if (number <= 0)
number = 1;
- if( !strcmpi(info->command,"itembound2") && !(bound >= IBT_MIN && bound <= IBT_MAX) ) {
- clif->message(fd, msg_fd(fd,298)); // Invalid bound type
+ if (!strcmpi(info->command, "itembound2") && !(bound >= IBT_MIN && bound <= IBT_MAX)) {
+ clif->message(fd, msg_fd(fd, 298)); // Invalid bound type
return false;
}
item_id = 0;
if ((item_data = itemdb->search_name(item_name)) != NULL ||
- (item_data = itemdb->exists(atoi(item_name))) != NULL)
+ (item_data = itemdb->exists(atoi(item_name))) != NULL)
item_id = item_data->nameid;
if (item_id > 500) {
@@ -1321,11 +1292,11 @@ ACMD(item2)
int loop, get_count, i;
loop = 1;
get_count = number;
- if( !strcmpi(info->command,"itembound2") )
- bound = 1;
- if( !itemdb->isstackable2(item_data) ) {
- if( bound && (item_data->type == IT_PETEGG || item_data->type == IT_PETARMOR) ) {
- clif->message(fd, msg_fd(fd,498)); // Cannot create bounded pet eggs or pet armors.
+ if (!strcmpi(info->command, "itembound2"))
+ bound = IBT_ACCOUNT;
+ if (!itemdb->isstackable2(item_data)) {
+ if (bound && (item_data->type == IT_PETEGG || item_data->type == IT_PETARMOR)) {
+ clif->message(fd, msg_fd(fd, 498)); // Cannot create bounded pet eggs or pet armors.
return false;
}
loop = number;
@@ -1338,7 +1309,8 @@ ACMD(item2)
refine_level = 0;
} else {
identify = 1;
- refine_level = attr = 0;
+ refine_level = 0;
+ attr = ATTR_NONE;
}
refine_level = cap_value(refine_level, 0, MAX_REFINE);
for (i = 0; i < loop; i++) {
@@ -1358,9 +1330,9 @@ ACMD(item2)
}
if (flag == 0)
- clif->message(fd, msg_fd(fd,18)); // Item created.
+ clif->message(fd, msg_fd(fd, 18)); // Item created.
} else {
- clif->message(fd, msg_fd(fd,19)); // Invalid item ID or name.
+ clif->message(fd, msg_fd(fd, 19)); // Invalid item ID or name.
return false;
}
@@ -2744,42 +2716,49 @@ ACMD(guildlevelup)
return true;
}
-/*==========================================
+/**
+ * Creates a pet egg in the character's inventory.
*
- *------------------------------------------*/
+ * @code{.herc}
+ * @makeegg <pet>
+ * @endcode
+ *
+ **/
ACMD(makeegg)
{
- struct item_data *item_data;
- int id, pet_id;
-
- if (!*message) {
- clif->message(fd, msg_fd(fd,1015)); // Please enter a monster/egg name/ID (usage: @makeegg <pet>).
+ if (*message == '\0') {
+ clif->message(fd, msg_fd(fd, 1015)); // Please enter a monster/egg name/ID (usage: @makeegg <pet>).
return false;
}
- if ((item_data = itemdb->search_name(message)) != NULL) // for egg name
+ struct item_data *item_data = itemdb->search_name(message);
+ int id;
+
+ if (item_data != NULL) { // Egg name.
id = item_data->nameid;
- else
- if ((id = mob->db_searchname(message)) != 0) // for monster name
- ;
- else
- id = atoi(message);
+ } else {
+ id = mob->db_searchname(message); // Monster name.
+
+ if (id == 0)
+ id = atoi(message); // Egg/monster ID.
+ }
+
+ int pet_id = pet->search_petDB_index(id, PET_CLASS);
- pet_id = pet->search_petDB_index(id, PET_CLASS);
- if (pet_id < 0)
+ if (pet_id == INDEX_NOT_FOUND)
pet_id = pet->search_petDB_index(id, PET_EGG);
- if (pet_id >= 0) {
- sd->catch_target_class = pet->db[pet_id].class_;
- intif->create_pet(
- sd->status.account_id, sd->status.char_id,
- pet->db[pet_id].class_, mob->db(pet->db[pet_id].class_)->lv,
- pet->db[pet_id].EggID, 0, (short)pet->db[pet_id].intimate,
- 100, 0, 1, pet->db[pet_id].jname);
- } else {
- clif->message(fd, msg_fd(fd,180)); // The monster/egg name/id doesn't exist.
+
+ if (pet_id == INDEX_NOT_FOUND) {
+ clif->message(fd, msg_fd(fd, 180)); // The monster/egg name/ID doesn't exist.
return false;
}
+ sd->catch_target_class = pet->db[pet_id].class_;
+ intif->create_pet(sd->status.account_id, sd->status.char_id, pet->db[pet_id].class_,
+ mob->db(pet->db[pet_id].class_)->lv, pet->db[pet_id].EggID, 0,
+ (short)pet->db[pet_id].intimate, PET_HUNGER_STUFFED,
+ 0, 1,pet->db[pet_id].jname);
+
return true;
}
@@ -2798,72 +2777,86 @@ ACMD(hatch)
return true;
}
-/*==========================================
+/**
+ * Sets a pet's intimacy value.
*
- *------------------------------------------*/
+ * @code{.herc}
+ * @petfriendly <0-1000>
+ * @endcode
+ *
+ **/
ACMD(petfriendly)
{
- int friendly;
- struct pet_data *pd;
-
- if (!*message || (friendly = atoi(message)) < 0) {
- clif->message(fd, msg_fd(fd,1016)); // Please enter a valid value (usage: @petfriendly <0-1000>).
+ if (*message == '\0' || (atoi(message) == 0 && isdigit(*message) == 0)) {
+ clif->message(fd, msg_fd(fd, 1016)); // Please enter a valid value (usage: @petfriendly <0-1000>).
return false;
}
- pd = sd->pd;
- if (!pd) {
- clif->message(fd, msg_fd(fd,184)); // Sorry, but you have no pet.
+ int friendly = atoi(message);
+
+ if (friendly < PET_INTIMACY_NONE || friendly > PET_INTIMACY_MAX) {
+ clif->message(fd, msg_fd(fd, 1016)); // Please enter a valid value (usage: @petfriendly <0-1000>).
return false;
}
- if (friendly < 0 || friendly > 1000)
- {
- clif->message(fd, msg_fd(fd,37)); // An invalid number was specified.
+ struct pet_data *pd = sd->pd;
+
+ if (sd->status.pet_id == 0 || pd == NULL) {
+ clif->message(fd, msg_fd(fd, 184)); // Sorry, but you have no pet.
return false;
}
- if (friendly == pd->pet.intimate) {
- clif->message(fd, msg_fd(fd,183)); // Pet intimacy is already at maximum.
+ if (friendly == pd->pet.intimate && friendly == PET_INTIMACY_MAX) {
+ clif->message(fd, msg_fd(fd, 183)); // Pet intimacy is already at maximum.
return false;
}
- pet->set_intimate(pd, friendly);
- clif->send_petstatus(sd);
- clif->message(fd, msg_fd(fd,182)); // Pet intimacy changed.
+ if (friendly != pd->pet.intimate) // No need to update the pet's status if intimacy value won't change.
+ pet->set_intimate(pd, friendly);
+
+ clif->message(fd, msg_fd(fd, 182)); // Pet intimacy changed. (Send message regardless of value has changed or not.)
+
return true;
}
-/*==========================================
+/**
+ * Sets a pet's hunger value.
*
- *------------------------------------------*/
+ * @code{.herc}
+ * @pethungry <0-100>
+ * @endcode
+ *
+ **/
ACMD(pethungry)
{
- int hungry;
- struct pet_data *pd;
-
- if (!*message || (hungry = atoi(message)) < 0) {
- clif->message(fd, msg_fd(fd,1017)); // Please enter a valid number (usage: @pethungry <0-100>).
+ if (*message == '\0' || (atoi(message) == 0 && isdigit(*message) == 0)) {
+ clif->message(fd, msg_fd(fd, 1017)); // Please enter a valid number (usage: @pethungry <0-100>).
return false;
}
- pd = sd->pd;
- if (!sd->status.pet_id || !pd) {
- clif->message(fd, msg_fd(fd,184)); // Sorry, but you have no pet.
+ int hungry = atoi(message);
+
+ if (hungry < PET_HUNGER_STARVING || hungry > PET_HUNGER_STUFFED) {
+ clif->message(fd, msg_fd(fd, 1017)); // Please enter a valid number (usage: @pethungry <0-100>).
return false;
}
- if (hungry < 0 || hungry > 100) {
- clif->message(fd, msg_fd(fd,37)); // An invalid number was specified.
+
+ struct pet_data *pd = sd->pd;
+
+ if (sd->status.pet_id == 0 || pd == NULL) {
+ clif->message(fd, msg_fd(fd, 184)); // Sorry, but you have no pet.
return false;
}
- if (hungry == pd->pet.hungry) {
- clif->message(fd, msg_fd(fd,186)); // Pet hunger is already at maximum.
+
+ if (hungry == pd->pet.hungry && hungry == PET_HUNGER_STUFFED) {
+ clif->message(fd, msg_fd(fd, 186)); // Pet hunger is already at maximum.
return false;
}
- pd->pet.hungry = hungry;
- clif->send_petstatus(sd);
- clif->message(fd, msg_fd(fd,185)); // Pet hunger changed.
+ if (hungry != pd->pet.hungry) // No need to update the pet's status if hunger value won't change.
+ pet->set_hunger(pd, hungry);
+
+ clif->message(fd, msg_fd(fd, 185)); // Pet hunger changed. (Send message regardless of value has changed or not.)
return true;
}
@@ -2885,6 +2878,15 @@ ACMD(petrename)
}
pd->pet.rename_flag = 0;
+
+ int i;
+
+ ARR_FIND(0, sd->status.inventorySize, i, sd->status.inventory[i].card[0] == CARD0_PET
+ && pd->pet.pet_id == MakeDWord(sd->status.inventory[i].card[1], sd->status.inventory[i].card[2]));
+
+ if (i != sd->status.inventorySize)
+ sd->status.inventory[i].card[3] = pet->get_card4_value(pd->pet.rename_flag, pd->pet.intimate);
+
intif->save_petdata(sd->status.account_id, &pd->pet);
clif->send_petstatus(sd);
clif->message(fd, msg_fd(fd,187)); // You can now rename your pet.
@@ -4100,6 +4102,8 @@ ACMD(mapinfo)
strcat(atcmd_output, msg_fd(fd, 1292)); // PrivateAirshipStartable |
if (map->list[m_id].flag.pairship_endable)
strcat(atcmd_output, msg_fd(fd, 1293)); // PrivateAirshipEndable |
+ if (map->list[m_id].flag.nopet != 0)
+ strcat(atcmd_output, msg_fd(fd, 853)); // NoPet |
clif->message(fd, atcmd_output);
switch (list) {
@@ -4123,16 +4127,36 @@ ACMD(mapinfo)
for (i = 0; i < map->list[m_id].npc_num;) {
struct npc_data *nd = map->list[m_id].npc[i];
switch(nd->dir) {
- case 0: strcpy(direction, msg_fd(fd,1101)); break; // North
- case 1: strcpy(direction, msg_fd(fd,1102)); break; // North West
- case 2: strcpy(direction, msg_fd(fd,1103)); break; // West
- case 3: strcpy(direction, msg_fd(fd,1104)); break; // South West
- case 4: strcpy(direction, msg_fd(fd,1105)); break; // South
- case 5: strcpy(direction, msg_fd(fd,1106)); break; // South East
- case 6: strcpy(direction, msg_fd(fd,1107)); break; // East
- case 7: strcpy(direction, msg_fd(fd,1108)); break; // North East
- case 9: strcpy(direction, msg_fd(fd,1109)); break; // North
- default: strcpy(direction, msg_fd(fd,1110)); break; // Unknown
+ case UNIT_DIR_NORTH:
+ strcpy(direction, msg_fd(fd, 1101)); // North
+ break;
+ case UNIT_DIR_NORTHWEST:
+ strcpy(direction, msg_fd(fd, 1102)); // North West
+ break;
+ case UNIT_DIR_WEST:
+ strcpy(direction, msg_fd(fd, 1103)); // West
+ break;
+ case UNIT_DIR_SOUTHWEST:
+ strcpy(direction, msg_fd(fd, 1104)); // South West
+ break;
+ case UNIT_DIR_SOUTH:
+ strcpy(direction, msg_fd(fd, 1105)); // South
+ break;
+ case UNIT_DIR_SOUTHEAST:
+ strcpy(direction, msg_fd(fd, 1106)); // South East
+ break;
+ case UNIT_DIR_EAST:
+ strcpy(direction, msg_fd(fd, 1107)); // East
+ break;
+ case UNIT_DIR_NORTHEAST:
+ strcpy(direction, msg_fd(fd, 1108)); // North East
+ break;
+ case 9: // is this actually used? [skyleo]
+ strcpy(direction, msg_fd(fd, 1109)); // North
+ break;
+ default:
+ strcpy(direction, msg_fd(fd, 1110)); // Unknown
+ break;
}
if(strcmp(nd->name,nd->exname) == 0)
safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1111), // NPC %d: %s | Direction: %s | Sprite: %d | Location: %d %d
@@ -4483,6 +4507,7 @@ ACMD(loadnpc)
// add to list of script sources and run it
npc->addsrcfile(message);
npc->parsesrcfile(message,true);
+ npc->motd = npc->name2id("HerculesMOTD");
npc->read_event_script();
clif->message(fd, msg_fd(fd,262));
@@ -4517,6 +4542,7 @@ ACMD(unloadnpc)
npc->unload_duplicates(nd, (flag != 0));
npc->unload(nd, true, (flag != 0));
+ npc->motd = npc->name2id("HerculesMOTD");
npc->read_event_script();
clif->message(fd, msg_fd(fd, 112)); /// Npc Disabled.
return true;
@@ -4572,6 +4598,7 @@ ACMD(reloadnpc)
clif->message(fd, msg_fd(fd, 1386)); /// File unloaded. Be aware that...
npc->addsrcfile(file_path);
npc->parsesrcfile(file_path, true);
+ npc->motd = npc->name2id("HerculesMOTD");
npc->read_event_script();
clif->message(fd, msg_fd(fd, 262)); /// Script loaded.
return true;
@@ -5651,6 +5678,8 @@ ACMD(useskill)
return false;
}
+ pc->autocast_clear(sd);
+
if (skill_id >= HM_SKILLBASE && skill_id < HM_SKILLBASE+MAX_HOMUNSKILL
&& sd->hd && homun_alive(sd->hd)) // (If used with @useskill, put the homunc as dest)
bl = &sd->hd->bl;
@@ -6899,7 +6928,7 @@ ACMD(identify)
}
}
}
-
+
if (num == 0)
clif->message(fd,msg_fd(fd,1238)); // There are no items to appraise.
else if (!identifyall)
@@ -7845,39 +7874,61 @@ ACMD(monsterignore)
return true;
}
-/*==========================================
- * @fakename
- * => Gives your character a fake name. [Valaris]
- *------------------------------------------*/
+
+/**
+ * Temporarily changes the character's name to the specified string.
+ *
+ * @code{.herc}
+ * @fakename {<options>} {<fake_name>}
+ * @endcode
+ *
+ **/
ACMD(fakename)
{
- if (!*message)
- {
- if (sd->fakename[0])
- {
+ if (*message == '\0') {
+ if (sd->fakename[0] != '\0') {
sd->fakename[0] = '\0';
+ sd->fakename_options = FAKENAME_OPTION_NONE;
clif->blname_ack(0, &sd->bl);
- if( sd->disguise )
+
+ if (sd->disguise != 0) // Another packet should be sent so the client updates the name for sd.
clif->blname_ack(sd->fd, &sd->bl);
- clif->message(sd->fd, msg_fd(fd,1307)); // Returned to real name.
+
+ clif->message(sd->fd, msg_fd(fd, 1307)); // Returned to real name.
return true;
}
- clif->message(sd->fd, msg_fd(fd,1308)); // You must enter a name.
+ clif->message(sd->fd, msg_fd(fd, 1308)); // You must enter a name.
return false;
}
- if (strlen(message) < 2)
- {
- clif->message(sd->fd, msg_fd(fd,1309)); // Fake name must be at least two characters.
+ int options = FAKENAME_OPTION_NONE;
+ char buf[NAME_LENGTH] = {'\0'};
+ const char *fake_name = NULL;
+
+ if (sscanf(message, "%d %23[^\n]", &options, buf) == 2) {
+ fake_name = buf;
+ } else {
+ options = FAKENAME_OPTION_NONE;
+ fake_name = message;
+ }
+
+ if (strlen(fake_name) < 2) {
+ clif->message(sd->fd, msg_fd(fd, 1309)); // Fake name must be at least two characters.
return false;
}
- safestrncpy(sd->fakename, message, sizeof(sd->fakename));
+ if (options < FAKENAME_OPTION_NONE)
+ options = FAKENAME_OPTION_NONE;
+
+ safestrncpy(sd->fakename, fake_name, sizeof(sd->fakename));
+ sd->fakename_options = options;
clif->blname_ack(0, &sd->bl);
- if (sd->disguise) // Another packet should be sent so the client updates the name for sd
+
+ if (sd->disguise != 0) // Another packet should be sent so the client updates the name for sd.
clif->blname_ack(sd->fd, &sd->bl);
- clif->message(sd->fd, msg_fd(fd,1310)); // Fake name enabled.
+
+ clif->message(sd->fd, msg_fd(fd, 1310)); // Fake name enabled.
return true;
}
@@ -8519,7 +8570,7 @@ ACMD(itemlist)
if( it->card[0] == CARD0_PET ) {
// pet egg
- if (it->card[3])
+ if ((it->card[3] & 1) != 0)
StrBuf->Printf(&buf, msg_fd(fd,1348), (unsigned int)MakeDWord(it->card[1], it->card[2])); // -> (pet egg, pet id: %u, named)
else
StrBuf->Printf(&buf, msg_fd(fd,1349), (unsigned int)MakeDWord(it->card[1], it->card[2])); // -> (pet egg, pet id: %u, unnamed)
@@ -8876,13 +8927,17 @@ ACMD(accinfo)
/* [Ind] */
ACMD(set)
{
- char reg[SCRIPT_VARNAME_LENGTH+1], val[254];
+ char reg[SCRIPT_VARNAME_LENGTH + 1];
+ char val[SCRIPT_STRING_VAR_LENGTH + 1];
struct script_data* data;
int toset = 0;
bool is_str = false;
size_t len;
- if (!*message || (toset = sscanf(message, "%32s %253[^\n]", reg, val)) < 1) {
+ char format[20];
+ safesnprintf(format, sizeof(format), "%%%ds %%%d[^\\n]", SCRIPT_VARNAME_LENGTH, SCRIPT_STRING_VAR_LENGTH);
+
+ if (*message == '\0' || (toset = sscanf(message, format, reg, val)) < 1) {
clif->message(fd, msg_fd(fd,1367)); // Usage: @set <variable name> <value>
clif->message(fd, msg_fd(fd,1368)); // Usage: ex. "@set PoringCharVar 50"
clif->message(fd, msg_fd(fd,1369)); // Usage: ex. "@set PoringCharVarSTR$ Super Duper String"
@@ -10525,9 +10580,9 @@ static bool atcommand_exec(const int fd, struct map_session_data *sd, const char
clif->message(fd, msg_fd(fd,143));
return false;
}
+ if (sd->block_action.commands) // *pcblock script command
+ return false;
}
- if (sd->block_action.commands) // *pcblock script command
- return false;
if (*message == atcommand->char_symbol)
is_atcommand = false;
diff --git a/src/map/atcommand.h b/src/map/atcommand.h
index 66827b3b2..f3a5155ab 100644
--- a/src/map/atcommand.h
+++ b/src/map/atcommand.h
@@ -54,6 +54,16 @@ typedef enum {
COMMAND_CHARCOMMAND = 2,
} AtCommandType;
+/** @fakename display option flags **/
+enum fakename_option_flag {
+ FAKENAME_OPTION_NONE = 0x00,
+ FAKENAME_OPTION_SHOW_PARTYNAME = 0x01,
+ FAKENAME_OPTION_SHOW_GUILDNAME = 0x02,
+ FAKENAME_OPTION_SHOW_GUILDPOSITION = 0x04,
+ FAKENAME_OPTION_SHOW_CLANPOSITION = 0x08,
+ FAKENAME_OPTION_SHOW_TITLE = 0x10
+};
+
/**
* Typedef
**/
diff --git a/src/map/battle.c b/src/map/battle.c
index 40e7d3161..a571a555d 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -2832,18 +2832,18 @@ static int64 battle_calc_damage(struct block_list *src, struct block_list *bl, s
d->dmg_lv = ATK_BLOCK;
if(src_skill_id == MH_STEINWAND){
if (--group->val2<=0)
- skill->del_unitgroup(group,ALC_MARK);
+ skill->del_unitgroup(group);
if( (group->val3 - damage) > 0 )
group->val3 -= (int)cap_value(damage, INT_MIN, INT_MAX);
else
- skill->del_unitgroup(group,ALC_MARK);
+ skill->del_unitgroup(group);
return 0;
}
if( skill_id == SO_ELEMENTAL_SHIELD ) {
if ( ( group->val2 - damage) > 0 ) {
group->val2 -= (int)cap_value(damage,INT_MIN,INT_MAX);
} else
- skill->del_unitgroup(group,ALC_MARK);
+ skill->del_unitgroup(group);
return 0;
}
/**
@@ -2853,12 +2853,12 @@ static int64 battle_calc_damage(struct block_list *src, struct block_list *bl, s
if ( ( group->val2 - damage) > 0 ) {
group->val2 -= (int)cap_value(damage,INT_MIN,INT_MAX);
} else
- skill->del_unitgroup(group,ALC_MARK);
+ skill->del_unitgroup(group);
if (--group->val3<=0)
- skill->del_unitgroup(group,ALC_MARK);
+ skill->del_unitgroup(group);
#else
if (--group->val2<=0)
- skill->del_unitgroup(group,ALC_MARK);
+ skill->del_unitgroup(group);
#endif
return 0;
}
@@ -3231,12 +3231,11 @@ static int64 battle_calc_damage(struct block_list *src, struct block_list *bl, s
if (!damage) return 0;
if( (sce = sc->data[SC_LIGHTNINGWALK]) && flag&BF_LONG && rnd()%100 < sce->val1 ) {
- int dx[8]={0,-1,-1,-1,0,1,1,1};
- int dy[8]={1,1,0,-1,-1,-1,0,1};
- uint8 dir = map->calc_dir(bl, src->x, src->y);
- if( unit->movepos(bl, src->x-dx[dir], src->y-dy[dir], 1, 1) ) {
- clif->slide(bl,src->x-dx[dir],src->y-dy[dir]);
- unit->setdir(bl, dir);
+ enum unit_dir dir = map->calc_dir(bl, src->x, src->y);
+ Assert_ret(dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX);
+ if (unit->movepos(bl, src->x - dirx[dir], src->y - diry[dir], 1, 1)) {
+ clif->slide(bl, src->x - dirx[dir], src->y - diry[dir]);
+ unit->set_dir(bl, dir);
}
d->dmg_lv = ATK_DEF;
status_change_end(bl, SC_LIGHTNINGWALK, INVALID_TIMER);
@@ -3751,7 +3750,7 @@ static struct Damage battle_calc_magic_attack(struct block_list *src, struct blo
if (sc){
if( sc->data[SC_TELEKINESIS_INTENSE] && s_ele == ELE_GHOST )
- ad.damage += sc->data[SC_TELEKINESIS_INTENSE]->val3;
+ ad.damage += ad.damage * sc->data[SC_TELEKINESIS_INTENSE]->val3 / 100;
}
switch(skill_id){
case MG_FIREBOLT:
@@ -4125,13 +4124,6 @@ static struct Damage battle_calc_misc_attack(struct block_list *src, struct bloc
case NPC_EVILLAND:
md.damage = skill->calc_heal(src,target,skill_id,skill_lv,false);
break;
- case RK_DRAGONBREATH:
- case RK_DRAGONBREATH_WATER:
- md.damage = ((status_get_hp(src) / 50) + (status_get_max_sp(src) / 4)) * skill_lv;
- RE_LVL_MDMOD(150);
- if (sd) md.damage = md.damage * (95 + 5 * pc->checkskill(sd,RK_DRAGONTRAINING)) / 100;
- md.flag |= BF_LONG|BF_WEAPON;
- break;
/**
* Ranger
**/
@@ -4959,6 +4951,12 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
break;
}
break;
+ case RK_DRAGONBREATH:
+ case RK_DRAGONBREATH_WATER:
+ wd.damage = ((status_get_hp(src) / 50) + (status_get_max_sp(src) / 4)) * skill_lv;
+ wd.damage = wd.damage * status->get_lv(src) / 150;
+ if (sd) wd.damage = wd.damage * (95 + 5 * pc->checkskill(sd, RK_DRAGONTRAINING)) / 100;
+ break;
default:
{
i = (flag.cri
@@ -5858,10 +5856,10 @@ static void battle_reflect_damage(struct block_list *target, struct block_list *
if( wd->flag & BF_SHORT ) {
if( !is_boss(src) ) {
if( sc->data[SC_DEATHBOUND] && skill_id != WS_CARTTERMINATION ) {
- uint8 dir = map->calc_dir(target,src->x,src->y),
- t_dir = unit->getdir(target);
+ enum unit_dir dir = map->calc_dir(target, src->x, src->y);
+ enum unit_dir t_dir = unit->getdir(target);
- if( !map->check_dir(dir,t_dir) ) {
+ if (map->check_dir(dir, t_dir) == 0) {
int64 rd1 = damage * sc->data[SC_DEATHBOUND]->val2 / 100; // Amplify damage.
trdamage += rdamage = rd1 - (damage = rd1 * 30 / 100); // not normalized as intended.
@@ -5929,21 +5927,21 @@ static void battle_reflect_damage(struct block_list *target, struct block_list *
delay += 100;/* gradual increase so the numbers don't clip in the client */
}
if( sc->data[SC_LG_REFLECTDAMAGE] && rnd()%100 < (30 + 10*sc->data[SC_LG_REFLECTDAMAGE]->val1) ) {
- bool change = false;
-
NORMALIZE_RDAMAGE(damage * sc->data[SC_LG_REFLECTDAMAGE]->val2 / 100);
trdamage -= rdamage;/* wont count towards total */
- if( sd && !sd->state.autocast ) {
- change = true;
- sd->state.autocast = 1;
+ enum autocast_type ac_type;
+
+ if (sd != NULL) {
+ ac_type = sd->auto_cast_current.type;
+ sd->auto_cast_current.type = AUTOCAST_TEMP;
}
map->foreachinshootrange(battle->damage_area,target,skill->get_splash(LG_REFLECTDAMAGE,1),BL_CHAR,tick,target,delay,wd->dmotion,rdamage,status_get_race(target));
- if( change )
- sd->state.autocast = 0;
+ if (sd != NULL)
+ sd->auto_cast_current.type = ac_type;
delay += 150;/* gradual increase so the numbers don't clip in the client */
@@ -6133,7 +6131,7 @@ static int battle_damage_area(struct block_list *bl, va_list ap)
else
status_fix_damage(src,bl,damage,0);
clif->damage(bl,bl,amotion,dmotion,damage,1,BDT_ENDURE,0);
- if (src->type != BL_PC || !BL_UCCAST(BL_PC, src)->state.autocast)
+ if (src->type != BL_PC || BL_UCCAST(BL_PC, src)->auto_cast_current.type != AUTOCAST_TEMP)
skill->additional_effect(src, bl, CR_REFLECTSHIELD, 1, BF_WEAPON|BF_SHORT|BF_NORMAL,ATK_DEF,tick);
map->freeblock_unlock();
}
@@ -6229,10 +6227,10 @@ static enum damage_lv battle_weapon_attack(struct block_list *src, struct block_
status_change_end(src, SC_CLOAKINGEXCEED, INVALID_TIMER);
}
if( tsc && tsc->data[SC_AUTOCOUNTER] && status->check_skilluse(target, src, KN_AUTOCOUNTER, 1) ) {
- uint8 dir = map->calc_dir(target,src->x,src->y);
- int t_dir = unit->getdir(target);
+ enum unit_dir dir = map->calc_dir(target, src->x, src->y);
+ enum unit_dir t_dir = unit->getdir(target);
int dist = distance_bl(src, target);
- if(dist <= 0 || (!map->check_dir(dir,t_dir) && dist <= tstatus->rhw.range+1)) {
+ if(dist <= 0 || (map->check_dir(dir, t_dir) == 0 && dist <= tstatus->rhw.range + 1)) {
uint16 skill_lv = tsc->data[SC_AUTOCOUNTER]->val1;
clif->skillcastcancel(target); //Remove the casting bar. [Skotlex]
clif->damage(src, target, sstatus->amotion, 1, 0, 1, BDT_NORMAL, 0); //Display MISS.
@@ -6342,7 +6340,7 @@ static enum damage_lv battle_weapon_attack(struct block_list *src, struct block_
skill_id = AB_DUPLELIGHT_MELEE;
else
skill_id = AB_DUPLELIGHT_MAGIC;
- skill->attack(skill->get_type(skill_id), src, src, target, skill_id, sc->data[SC_DUPLELIGHT]->val1, tick, SD_LEVEL);
+ skill->attack(skill->get_type(skill_id, sc->data[SC_DUPLELIGHT]->val1), src, src, target, skill_id, sc->data[SC_DUPLELIGHT]->val1, tick, SD_LEVEL);
}
}
@@ -6457,10 +6455,10 @@ static enum damage_lv battle_weapon_attack(struct block_list *src, struct block_
}
}
- sd->state.autocast = 1;
+ sd->auto_cast_current.type = AUTOCAST_TEMP;
skill->consume_requirement(sd,r_skill,r_lv,3);
skill->castend_type(type, src, target, r_skill, r_lv, tick, flag);
- sd->state.autocast = 0;
+ sd->auto_cast_current.type = AUTOCAST_NONE;
sd->ud.canact_tick = tick + skill->delay_fix(src, r_skill, r_lv);
clif->status_change(src, status->get_sc_icon(SC_POSTDELAY), status->get_sc_relevant_bl_types(SC_POSTDELAY), 1, skill->delay_fix(src, r_skill, r_lv), 0, 0, 1);
}
@@ -6601,10 +6599,6 @@ static int battle_check_target(struct block_list *src, struct block_list *target
m = target->m;
- if (flag & BCT_ENEMY && (map->getcell(m, src, src->x, src->y, CELL_CHKBASILICA) || map->getcell(m, src, target->x, target->y, CELL_CHKBASILICA))) {
- return -1;
- }
-
//t_bl/s_bl hold the 'master' of the attack, while src/target are the actual
//objects involved.
if( (t_bl = battle->get_master(target)) == NULL )
@@ -6613,6 +6607,11 @@ static int battle_check_target(struct block_list *src, struct block_list *target
if( (s_bl = battle->get_master(src)) == NULL )
s_bl = src;
+ if ((flag & BCT_ENEMY) != 0 && (status_get_mode(s_bl) & MD_BOSS) == 0 && (map->getcell(m, src, src->x, src->y, CELL_CHKBASILICA) != 0
+ || map->getcell(m, src, target->x, target->y, CELL_CHKBASILICA) != 0)) {
+ return -1;
+ }
+
if (s_bl->type == BL_PC) {
const struct map_session_data *s_sd = BL_UCCAST(BL_PC, s_bl);
switch (t_bl->type) {
@@ -7085,16 +7084,15 @@ static const struct battle_data {
{ "guild_emperium_check", &battle_config.guild_emperium_check, 1, 0, 1, },
{ "guild_exp_limit", &battle_config.guild_exp_limit, 50, 0, 99, },
{ "player_invincible_time", &battle_config.pc_invincible_time, 5000, 0, INT_MAX, },
+ { "pet_catch_rate_official_formula", &battle_config.pet_catch_rate_official_formula, 1, 0, 1, },
{ "pet_catch_rate", &battle_config.pet_catch_rate, 100, 0, INT_MAX, },
{ "pet_rename", &battle_config.pet_rename, 0, 0, 1, },
{ "pet_friendly_rate", &battle_config.pet_friendly_rate, 100, 0, INT_MAX, },
{ "pet_hungry_delay_rate", &battle_config.pet_hungry_delay_rate, 100, 10, INT_MAX, },
- { "pet_hungry_friendly_decrease", &battle_config.pet_hungry_friendly_decrease, 5, 0, INT_MAX, },
{ "pet_status_support", &battle_config.pet_status_support, 0, 0, 1, },
{ "pet_attack_support", &battle_config.pet_attack_support, 0, 0, 1, },
{ "pet_damage_support", &battle_config.pet_damage_support, 0, 0, 1, },
{ "pet_support_min_friendly", &battle_config.pet_support_min_friendly, 900, 0, 950, },
- { "pet_equip_min_friendly", &battle_config.pet_equip_min_friendly, 900, 0, 950, },
{ "pet_support_rate", &battle_config.pet_support_rate, 100, 0, INT_MAX, },
{ "pet_attack_exp_to_master", &battle_config.pet_attack_exp_to_master, 0, 0, 1, },
{ "pet_attack_exp_rate", &battle_config.pet_attack_exp_rate, 100, 0, INT_MAX, },
@@ -7102,7 +7100,7 @@ static const struct battle_data {
{ "pet_max_stats", &battle_config.pet_max_stats, 99, 0, INT_MAX, },
{ "pet_max_atk1", &battle_config.pet_max_atk1, 750, 0, INT_MAX, },
{ "pet_max_atk2", &battle_config.pet_max_atk2, 1000, 0, INT_MAX, },
- { "pet_disable_in_gvg", &battle_config.pet_no_gvg, 0, 0, 1, },
+ { "pet_remove_immediately", &battle_config.pet_remove_immediately, 1, 0, 1, },
{ "skill_min_damage", &battle_config.skill_min_damage, 2|4, 0, 1|2|4, },
{ "finger_offensive_type", &battle_config.finger_offensive_type, 0, 0, 1, },
{ "heal_exp", &battle_config.heal_exp, 0, 0, INT_MAX, },
@@ -7347,6 +7345,7 @@ static const struct battle_data {
{ "searchstore_querydelay", &battle_config.searchstore_querydelay, 10, 0, INT_MAX, },
{ "searchstore_maxresults", &battle_config.searchstore_maxresults, 30, 1, INT_MAX, },
{ "display_party_name", &battle_config.display_party_name, 0, 0, 1, },
+ { "send_party_options", &battle_config.send_party_options, 0x31F9, 0, 0x1FFFF, },
{ "cashshop_show_points", &battle_config.cashshop_show_points, 0, 0, 1, },
{ "mail_show_status", &battle_config.mail_show_status, 0, 0, 2, },
{ "client_limit_unit_lv", &battle_config.client_limit_unit_lv, 0, 0, BL_ALL, },
@@ -7380,12 +7379,12 @@ static const struct battle_data {
{ "item_restricted_consumption_type", &battle_config.item_restricted_consumption_type,1, 0, 1, },
{ "unequip_restricted_equipment", &battle_config.unequip_restricted_equipment, 0, 0, 3, },
{ "max_walk_path", &battle_config.max_walk_path, 17, 1, MAX_WALKPATH, },
- { "item_enabled_npc", &battle_config.item_enabled_npc, 1, 0, 1, },
+ { "item_enabled_npc", &battle_config.item_enabled_npc, 1, 0, 3, },
{ "gm_ignore_warpable_area", &battle_config.gm_ignore_warpable_area, 0, 2, 100, },
{ "packet_obfuscation", &battle_config.packet_obfuscation, 1, 0, 3, },
{ "client_accept_chatdori", &battle_config.client_accept_chatdori, 0, 0, INT_MAX, },
{ "snovice_call_type", &battle_config.snovice_call_type, 0, 0, 1, },
- { "guild_notice_changemap", &battle_config.guild_notice_changemap, 2, 0, 2, },
+ { "guild_notice_changemap", &battle_config.guild_notice_changemap, 7, 0, 7, },
{ "features/banking", &battle_config.feature_banking, 1, 0, 1, },
{ "features/auction", &battle_config.feature_auction, 0, 0, 2, },
{ "idletime_criteria", &battle_config.idletime_criteria, 0x25, 1, INT_MAX, },
@@ -7427,11 +7426,16 @@ static const struct battle_data {
{ "min_item_sell_price", &battle_config.min_item_sell_price, 0, 0, INT_MAX, },
{ "display_fake_hp_when_dead", &battle_config.display_fake_hp_when_dead, 1, 0, 1, },
{ "magicrod_type", &battle_config.magicrod_type, 0, 0, 1, },
+ { "skill_enabled_npc", &battle_config.skill_enabled_npc, 0, 0, INT_MAX, },
{ "features/enable_achievement_system", &battle_config.feature_enable_achievement, 1, 0, 1, },
{ "ping_timer_inverval", &battle_config.ping_timer_interval, 30, 0, 99999999, },
{ "ping_time", &battle_config.ping_time, 20, 0, 99999999, },
{ "option_drop_max_loop", &battle_config.option_drop_max_loop, 10, 1, 100000, },
{ "drop_connection_on_quit", &battle_config.drop_connection_on_quit, 0, 0, 1, },
+ { "display_rate_messages", &battle_config.display_rate_messages, 1, 0, 7, },
+ { "display_config_messages", &battle_config.display_config_messages, 0x1F1, 0, 0x1F7, },
+ { "display_overweight_messages", &battle_config.display_overweight_messages, 3, 0, 3, },
+ { "show_tip_window", &battle_config.show_tip_window, 1, 0, 1, },
{ "features/enable_refinery_ui", &battle_config.enable_refinery_ui, 1, 0, 1, },
{ "features/replace_refine_npcs", &battle_config.replace_refine_npcs, 1, 0, 1, },
{ "batk_min_limit", &battle_config.batk_min, 0, 0, INT_MAX, },
@@ -7450,6 +7454,8 @@ static const struct battle_data {
{ "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, },
+ { "allowed_actions_when_dead", &battle_config.allowed_actions_when_dead, 0, 0, 3, },
+ { "teleport_close_storage", &battle_config.teleport_close_storage, 1, 0, 1, },
};
static bool battle_set_value_sub(int index, int value)
@@ -7682,6 +7688,8 @@ static void do_init_battle(bool minimal)
static void do_final_battle(void)
{
+ if (map->minimal)
+ return;
ers_destroy(battle->delay_damage_ers);
}
diff --git a/src/map/battle.h b/src/map/battle.h
index 2e710f7f8..abf4c0f68 100644
--- a/src/map/battle.h
+++ b/src/map/battle.h
@@ -212,16 +212,15 @@ struct Battle_Config {
int guild_aura;
int pc_invincible_time;
+ int pet_catch_rate_official_formula;
int pet_catch_rate;
int pet_rename;
int pet_friendly_rate;
int pet_hungry_delay_rate;
- int pet_hungry_friendly_decrease;
int pet_status_support;
int pet_attack_support;
int pet_damage_support;
int pet_support_min_friendly; //[Skotlex]
- int pet_equip_min_friendly;
int pet_support_rate;
int pet_attack_exp_to_master;
int pet_attack_exp_rate;
@@ -229,8 +228,8 @@ struct Battle_Config {
int pet_max_stats; //[Skotlex]
int pet_max_atk1; //[Skotlex]
int pet_max_atk2; //[Skotlex]
- int pet_no_gvg; //Disables pets in gvg. [Skotlex]
int pet_equip_required;
+ int pet_remove_immediately;
int skill_min_damage;
int finger_offensive_type;
@@ -472,6 +471,7 @@ struct Battle_Config {
int searchstore_querydelay;
int searchstore_maxresults;
int display_party_name;
+ int send_party_options;
int cashshop_show_points;
int mail_show_status;
int client_limit_unit_lv;
@@ -581,6 +581,8 @@ struct Battle_Config {
int magicrod_type;
+ int skill_enabled_npc;
+
int feature_enable_achievement;
int ping_timer_interval;
@@ -589,6 +591,10 @@ struct Battle_Config {
int option_drop_max_loop;
int drop_connection_on_quit;
+ int display_rate_messages;
+ int display_config_messages;
+ int display_overweight_messages;
+ int show_tip_window;
int enable_refinery_ui;
int replace_refine_npcs;
@@ -608,6 +614,8 @@ struct Battle_Config {
int hit_max;
int autoloot_adjust;
+ int allowed_actions_when_dead;
+ int teleport_close_storage;
};
/* criteria for battle_config.idletime_critera */
diff --git a/src/map/buyingstore.c b/src/map/buyingstore.c
index 2c2fc13ae..fd6e6fd6e 100644
--- a/src/map/buyingstore.c
+++ b/src/map/buyingstore.c
@@ -91,8 +91,9 @@ static void buyingstore_create(struct map_session_data *sd, int zenylimit, unsig
return;
}
- if( !battle_config.feature_buying_store || pc_istrading(sd) || sd->state.prevend || sd->buyingstore.slots == 0 || count > sd->buyingstore.slots || zenylimit <= 0 || zenylimit > sd->status.zeny || !storename[0] )
- {// disabled or invalid input
+ if (battle_config.feature_buying_store == 0 || pc_istrading_except_npc(sd) || sd->state.prevend != 0
+ || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || sd->buyingstore.slots == 0
+ || count > sd->buyingstore.slots || zenylimit <= 0 || zenylimit > sd->status.zeny || *storename == '\0') { // Disabled or invalid input.
sd->buyingstore.slots = 0;
clif->buyingstore_open_failed(sd, BUYINGSTORE_CREATE, 0);
return;
@@ -218,8 +219,8 @@ static void buyingstore_open(struct map_session_data *sd, int account_id)
struct map_session_data* pl_sd;
nullpo_retv(sd);
- if (!battle_config.feature_buying_store || pc_istrading(sd) || sd->state.prevend)
- {// not allowed to sell
+ if (battle_config.feature_buying_store == 0 || pc_istrading_except_npc(sd) || sd->state.prevend != 0
+ || (sd->npc_id != 0 && sd->state.using_megaphone == 0)) { // Not allowed to sell.
return;
}
@@ -255,8 +256,8 @@ static void buyingstore_trade(struct map_session_data* sd, int account_id, unsig
return;
}
- if (!battle_config.feature_buying_store || pc_istrading(sd) || sd->state.prevend)
- {// not allowed to sell
+ if (battle_config.feature_buying_store == 0 || pc_istrading_except_npc(sd) || sd->state.prevend != 0
+ || (sd->npc_id != 0 && sd->state.using_megaphone == 0)) { // Not allowed to sell.
clif->buyingstore_trade_failed_seller(sd, BUYINGSTORE_TRADE_SELLER_FAILED, 0);
return;
}
diff --git a/src/map/chrif.c b/src/map/chrif.c
index b131907e0..ac5fb4dd0 100644
--- a/src/map/chrif.c
+++ b/src/map/chrif.c
@@ -863,6 +863,8 @@ static bool chrif_changesex(struct map_session_data *sd, bool change_account)
nullpo_retr(false, sd);
chrif_check(false);
+ chrif->save(sd, 0);
+
WFIFOHEAD(chrif->fd,44);
WFIFOW(chrif->fd,0) = 0x2b0e;
WFIFOL(chrif->fd,2) = sd->status.account_id;
diff --git a/src/map/clif.c b/src/map/clif.c
index 660c516d7..f44d9a716 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -936,19 +936,25 @@ static void clif_clearunit_area(struct block_list *bl, enum clr_type type)
static int clif_clearunit_delayed_sub(int tid, int64 tick, int id, intptr_t data)
{
struct block_list *bl = (struct block_list *)data;
+ nullpo_ret(bl);
+ Assert_ret(bl->m >= 0 && bl->m < map->count);
+ if (map->list[bl->m].block == NULL) {
+ // avoid error report for missing/removed map
+ ers_free(clif->delay_clearunit_ers, bl);
+ return 0;
+ }
clif->clearunit_area(bl, (enum clr_type) id);
- ers_free(clif->delay_clearunit_ers,bl);
+ ers_free(clif->delay_clearunit_ers, bl);
return 0;
}
static void clif_clearunit_delayed(struct block_list *bl, enum clr_type type, int64 tick)
{
- struct block_list *tbl;
-
nullpo_retv(bl);
- tbl = ers_alloc(clif->delay_clearunit_ers, struct block_list);
- memcpy (tbl, bl, sizeof (struct block_list));
- timer->add(tick, clif->clearunit_delayed_sub, (int)type, (intptr_t)tbl);
+ Assert_retv(bl->type == BL_MOB);
+ struct mob_data *md = ers_alloc(clif->delay_clearunit_ers, struct mob_data);
+ memcpy (md, bl, sizeof (struct mob_data));
+ timer->add(tick, clif->clearunit_delayed_sub, (int)type, (intptr_t)md);
}
/// Gets weapon view info from sd's inventory_data and points (*rhand,*lhand)
@@ -1031,6 +1037,7 @@ static void clif_set_unit_idle2(struct block_list *bl, struct map_session_data *
int g_id = status->get_guild_id(bl);
nullpo_retv(bl);
+ nullpo_retv(vd);
sd = BL_CAST(BL_PC, bl);
p.PacketType = idle_unit2Type;
@@ -1087,6 +1094,7 @@ static void clif_set_unit_idle(struct block_list *bl, struct map_session_data *t
int g_id = status->get_guild_id(bl);
nullpo_retv(bl);
+ nullpo_retv(vd);
#if PACKETVER < 20091103
if (!pc->db_checkid(vd->class)) {
@@ -1197,6 +1205,7 @@ static void clif_spawn_unit2(struct block_list *bl, enum send_target target)
int g_id = status->get_guild_id(bl);
nullpo_retv(bl);
+ nullpo_retv(vd);
sd = BL_CAST(BL_PC, bl);
p.PacketType = spawn_unit2Type;
@@ -1244,6 +1253,7 @@ static void clif_spawn_unit(struct block_list *bl, enum send_target target)
int g_id = status->get_guild_id(bl);
nullpo_retv(bl);
+ nullpo_retv(vd);
#if PACKETVER < 20091103
if (!pc->db_checkid(vd->class)) {
@@ -1357,6 +1367,7 @@ static void clif_set_unit_walking(struct block_list *bl, struct map_session_data
nullpo_retv(bl);
nullpo_retv(ud);
+ nullpo_retv(vd);
sd = BL_CAST(BL_PC, bl);
@@ -1585,10 +1596,33 @@ static bool clif_spawn(struct block_list *bl)
clif->specialeffect(bl,421,AREA);
if (sd->bg_id != 0 && map->list[sd->bl.m].flag.battleground)
clif->sendbgemblem_area(sd);
- for (i = 0; i < sd->sc_display_count; i++) {
- clif->sc_continue(&sd->bl, sd->bl.id, AREA, status->get_sc_icon(sd->sc_display[i]->type), sd->sc_display[i]->val1, sd->sc_display[i]->val2, sd->sc_display[i]->val3);
+ struct status_change *sc = status->get_sc(bl);
+
+ if (sd->sc_display_count > 0 && sc != NULL) {
+ for (i = 0; i < sd->sc_display_count; i++) {
+ enum sc_type type = sd->sc_display[i]->type;
+
+ if (sc->data[type] == NULL)
+ continue;
+
+ int tick = 0;
+ int tid = sc->data[type]->timer;
+ const struct TimerData *td = (tid > 0) ? timer->get(tid) : NULL;
+
+ if (td != NULL)
+ tick = DIFF_TICK32(td->tick, timer->gettick());
+
+ int sc_icon = status->get_sc_icon(type);
+ int sc_types = status->get_sc_relevant_bl_types(type);
+ int val1 = sd->sc_display[i]->val1;
+ int val2 = sd->sc_display[i]->val2;
+ int val3 = sd->sc_display[i]->val3;
+
+ clif->status_change(&sd->bl, sc_icon, sc_types, 1, tick, val1, val2, val3);
+ }
}
+
if (sd->charm_type != CHARM_TYPE_NONE && sd->charm_count > 0)
clif->spiritcharm(sd);
if (sd->status.look.robe != 0)
@@ -2179,6 +2213,9 @@ static void clif_selllist(struct map_session_data *sd)
if( !itemdb_cansell(&sd->status.inventory[i], pc_get_group_level(sd)) )
continue;
+ if (sd->status.inventory[i].favorite != 0)
+ continue; // Cannot Sell Favorite item
+
if( sd->status.inventory[i].expire_time )
continue; // Cannot Sell Rental Items
@@ -2417,23 +2454,26 @@ static void clif_scriptinput(struct map_session_data *sd, int npcid)
/// - close inputstr window
static void clif_scriptinputstr(struct map_session_data *sd, int npcid)
{
- int fd;
- struct block_list *bl = NULL;
-
nullpo_retv(sd);
- if (!sd->state.using_fake_npc && (npcid == npc->fake_nd->bl.id || ((bl = map->id2bl(npcid)) != NULL && (bl->m!=sd->bl.m ||
- bl->x<sd->bl.x-AREA_SIZE-1 || bl->x>sd->bl.x+AREA_SIZE+1 ||
- bl->y<sd->bl.y-AREA_SIZE-1 || bl->y>sd->bl.y+AREA_SIZE+1))))
+ struct block_list *bl = map->id2bl(npcid);
+ int x1 = sd->bl.x - AREA_SIZE - 1;
+ int x2 = sd->bl.x + AREA_SIZE + 1;
+ int y1 = sd->bl.y - AREA_SIZE - 1;
+ int y2 = sd->bl.y + AREA_SIZE + 1;
+ bool out_of_sight = (bl != NULL && (bl->m != sd->bl.m || bl->x < x1 || bl->x > x2 || bl->y < y1 || bl->y > y2));
+
+ if (sd->state.using_fake_npc == 0 && sd->state.using_megaphone == 0
+ && (npcid == npc->fake_nd->bl.id || out_of_sight)) {
clif->sendfakenpc(sd, npcid);
+ }
pc->update_idle_time(sd, BCIDLE_SCRIPT);
- fd=sd->fd;
- WFIFOHEAD(fd, packet_len(0x1d4));
- WFIFOW(fd,0)=0x1d4;
- WFIFOL(fd,2)=npcid;
- WFIFOSET(fd,packet_len(0x1d4));
+ WFIFOHEAD(sd->fd, packet_len(0x1d4));
+ WFIFOW(sd->fd, 0) = 0x1d4;
+ WFIFOL(sd->fd, 2) = (sd->state.using_megaphone == 0) ? npcid : 0;
+ WFIFOSET(sd->fd, packet_len(0x1d4));
}
/// Marks a position on client's minimap (ZC_COMPASS).
@@ -2505,8 +2545,8 @@ static void clif_addcards(struct EQUIPSLOTINFO *buf, struct item *item)
if (item->card[0] == CARD0_PET) { //pet eggs
buf->card[0] = 0;
buf->card[1] = 0;
- buf->card[2] = 0;
- buf->card[3] = item->card[3]; //Pet renamed flag.
+ buf->card[2] = (item->card[3] >> 1); // Pet intimacy level.
+ buf->card[3] = (item->card[3] & 1); // Pet renamed flag.
return;
}
if (item->card[0] == CARD0_FORGE || item->card[0] == CARD0_CREATE) { //Forged/created items
@@ -4900,7 +4940,7 @@ static int clif_damage(struct block_list *src, struct block_list *dst, int sdela
}
if(src == dst) {
- unit->setdir(src,unit->getdir(src));
+ unit->set_dir(src, unit->getdir(src));
}
//Return adjusted can't walk delay for further processing.
@@ -6221,7 +6261,7 @@ static void clif_displaymessage_sprintf(const int fd, const char *mes, ...)
/// 009a <packet len>.W <message>.?B
static void clif_broadcast(struct block_list *bl, const char *mes, int len, int type, enum send_target target)
{
- int lp = (type&BC_COLOR_MASK) ? 4 : 0;
+ int lp = ((type & BC_COLOR_MASK) != 0 || (type & BC_MEGAPHONE) != 0) ? 4 : 0;
unsigned char *buf = NULL;
nullpo_retv(mes);
@@ -6233,6 +6273,8 @@ static void clif_broadcast(struct block_list *bl, const char *mes, int len, int
WBUFL(buf,4) = 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 )
WBUFL(buf,4) = 0x73737373; //If there's "ssss", game client will recognize message as 'WoE broadcast'.
+ else if ((type & BC_MEGAPHONE) != 0)
+ WBUFL(buf, 4) = 0x6363696d; // If there's "micc" at the beginning of the message, the game client will recognize message as 'Megaphone shout'.
memcpy(WBUFP(buf, 4 + lp), mes, len);
clif->send(buf, WBUFW(buf,2), bl, target);
@@ -6763,7 +6805,7 @@ static void clif_item_skill(struct map_session_data *sd, uint16 skill_id, uint16
struct PACKET_ZC_AUTORUN_SKILL *p = WFIFOP(fd, 0);
int type = skill->get_inf(skill_id);
- if (sd->state.itemskill_castonself == 1 && skill->is_item_skill(sd, skill_id, skill_lv))
+ if (sd->auto_cast_current.itemskill_cast_on_self && sd->auto_cast_current.type == AUTOCAST_ITEM)
type = INF_SELF_SKILL;
p->packetType = HEADER_ZC_AUTORUN_SKILL;
@@ -7276,46 +7318,101 @@ static void clif_party_inviteack(struct map_session_data *sd, const char *nick,
#endif
}
-/// Updates party settings.
-/// 0101 <exp option>.L (ZC_GROUPINFO_CHANGE)
-/// 07d8 <exp option>.L <item pick rule>.B <item share rule>.B (ZC_REQ_GROUPINFO_CHANGE_V2)
-/// exp option:
-/// 0 = exp sharing disabled
-/// 1 = exp sharing enabled
-/// 2 = cannot change exp sharing
-///
-/// flag:
-/// 0 = send to party
-/// 1 = send to sd
+/**
+ * Sends party settings to the client.
+ *
+ * 0101 <exp option>.L (ZC_GROUPINFO_CHANGE)
+ * 07d8 <exp option>.L <item pick rule>.B <item share rule>.B (ZC_REQ_GROUPINFO_CHANGE_V2)
+ * <exp option>:
+ * 0 = EXP sharing disabled.
+ * 1 = EXP sharing enabled.
+ * 2 = Cannot change EXP sharing.
+ *
+ * @param p The related party.
+ * @param sd The related character.
+ * @param flag Reason for sending.
+ * @parblock
+ * Possible flags:
+ * 0x01 = Cannot change EXP sharing. (Only set when tried to change options manually.)
+ * 0x02 = Options changed manually.
+ * 0x04 = Options changed automatically.
+ * 0x08 = Member added.
+ * 0x10 = Member removed.
+ * 0x20 = Character logged in.
+ * 0x40 = Character changed map.
+ * 0x80 = Character teleported.
+ * @endparblock
+ *
+ **/
static void clif_party_option(struct party_data *p, struct map_session_data *sd, int flag)
{
- unsigned char buf[16];
+ nullpo_retv(p);
+
+ if (sd == NULL && (flag & 0x01) == 0) {
+ for (int i = 0; i < MAX_PARTY; i++) {
+ if (p->data[i].sd != NULL) {
+ sd = p->data[i].sd;
+ break;
+ }
+ }
+ }
+
+ if (sd == NULL)
+ return;
+
+ int conf = battle_config.send_party_options;
+
+ if (((flag & 0x01) != 0 && (conf & 0x10) == 0)
+ || ((flag & 0x02) != 0 && (conf & 0x08) == 0)
+ || ((flag & 0x04) != 0 && (conf & 0x20) == 0)
+ || ((flag & 0x08) != 0 && (conf & 0x40) == 0)
+ || ((flag & 0x10) != 0 && (conf & 0x80) == 0)
+ || ((flag & 0x20) != 0 && (conf & 0x01) == 0)
+ || ((flag & 0x40) != 0 && (conf & 0x02) == 0)
+ || ((flag & 0x80) != 0 && (conf & 0x04) == 0)) {
+ return;
+ }
+
+ enum send_target target = SELF;
+
+ if (((flag & 0x01) != 0 && (conf & 0x100) != 0)
+ || ((flag & 0x01) == 0 && (flag & 0x02) != 0)
+ || (flag & 0x04) != 0) {
+ target = PARTY;
+ }
+
+ int cmd = 0x101;
+
+ if (((flag & 0x01) != 0 && (conf & 0x02000) != 0)
+ || ((flag & 0x02) != 0 && (conf & 0x01000) != 0)
+ || ((flag & 0x04) != 0 && (conf & 0x04000) != 0)
+ || ((flag & 0x08) != 0 && (conf & 0x08000) != 0)
+ || ((flag & 0x10) != 0 && (conf & 0x10000) != 0)
+ || ((flag & 0x20) != 0 && (conf & 0x00200) != 0)
+ || ((flag & 0x40) != 0 && (conf & 0x00400) != 0)
+ || ((flag & 0x80) != 0 && (conf & 0x00800) != 0)) {
+ cmd = 0x7d8;
+ }
+
#if PACKETVER < 20090603
- const int cmd = 0x101;
-#else
- const int cmd = 0x7d8;
+ if (cmd == 0x7d8)
+ cmd = 0x101;
#endif
- nullpo_retv(p);
+ unsigned char buf[16];
- if(!sd && flag==0){
- int i;
- for(i=0;i<MAX_PARTY && !p->data[i].sd;i++)
- ;
- if (i < MAX_PARTY)
- sd = p->data[i].sd;
+ WBUFW(buf, 0) = cmd;
+ WBUFL(buf, 2) = ((flag & 0x10) != 0) ? 0 : (((flag & 0x01) != 0) ? 2 : p->party.exp);
+
+ if (cmd == 0x7d8) {
+ WBUFB(buf, 6) = ((flag & 0x10) != 0) ? 0 : (((p->party.item & 1) != 0) ? 1 : 0);
+ WBUFB(buf, 7) = ((flag & 0x10) != 0) ? 0 : (((p->party.item & 2) != 0) ? 1 : 0);
}
- if(!sd) return;
- WBUFW(buf,0)=cmd;
- WBUFL(buf,2)=((flag&0x01)?2:p->party.exp);
-#if PACKETVER >= 20090603
- WBUFB(buf,6)=(p->party.item&1)?1:0;
- WBUFB(buf,7)=(p->party.item&2)?1:0;
-#endif
- if(flag==0)
- clif->send(buf,packet_len(cmd),&sd->bl,PARTY);
- else
- clif->send(buf,packet_len(cmd),&sd->bl,SELF);
+
+ clif->send(buf, packet_len(cmd), &sd->bl, target);
+
+ if ((flag & 0x04) != 0)
+ p->state.option_auto_changed = 0;
}
/// 0105 <account id>.L <char name>.24B <result>.B (ZC_DELETE_MEMBER_FROM_GROUP).
@@ -7564,8 +7661,8 @@ static void clif_sendegg(struct map_session_data *sd)
nullpo_retv(sd);
fd = sd->fd;
- if (battle_config.pet_no_gvg && map_flag_gvg2(sd->bl.m)) { //Disable pet hatching in GvG grounds during Guild Wars [Skotlex]
- clif->message(fd, msg_sd(sd, 866)); // "Pets are not allowed in Guild Wars."
+ if (map->list[sd->bl.m].flag.nopet != 0) {
+ clif->message(fd, msg_sd(sd, 866)); // "Pets are disabled in this map."
return;
}
@@ -9379,82 +9476,98 @@ static void clif_send_selforarea(int fd, struct block_list *bl, const void *buf,
}
}
-/// Updates the object's (bl) name on client.
-/// 0095 <id>.L <char name>.24B (ZC_ACK_REQNAME)
-/// 0195 <id>.L <char name>.24B <party name>.24B <guild name>.24B <position name>.24B (ZC_ACK_REQNAMEALL)
-/// 0A30 <id>.L <char name>.24B <party name>.24B <guild name>.24B <position name>.24B <title id>.L (ZC_ACK_REQNAMEALL2)
+/**
+ * Updates a character's name on client.
+ *
+ * @code
+ * 0095 <id>.L <char name>.24B (ZC_ACK_REQNAME)
+ * 0195 <id>.L <char name>.24B <party name>.24B <guild name>.24B <position name>.24B (ZC_ACK_REQNAMEALL)
+ * 0A30 <id>.L <char name>.24B <party name>.24B <guild name>.24B <position name>.24B <title id>.L (ZC_ACK_REQNAMEALL2)
+ * @endcode
+ *
+ * @param fd The incoming file descriptor.
+ * @param bl The related character's block list.
+ *
+ **/
static void clif_pcname_ack(int fd, struct block_list *bl)
{
nullpo_retv(bl);
Assert_retv(bl->type == BL_PC);
- struct PACKET_ZC_ACK_REQNAMEALL packet = { 0 };
- int len = sizeof(struct PACKET_ZC_ACK_REQNAMEALL);
+ struct PACKET_ZC_ACK_REQNAMEALL packet = {0};
+ packet.packet_id = HEADER_ZC_ACK_REQNAMEALL;
packet.gid = bl->id;
const struct map_session_data *ssd = BL_UCCAST(BL_PC, bl);
- if (ssd->fakename[0] != '\0') {
- packet.packet_id = reqName;
- len = sizeof(struct packet_reqname_ack);
- } else {
- packet.packet_id = HEADER_ZC_ACK_REQNAMEALL;
- len = sizeof(struct PACKET_ZC_ACK_REQNAMEALL);
- }
-
- //Requesting your own "shadow" name. [Skotlex]
- if (ssd->fd == fd && ssd->disguise != -1) {
+ if (ssd->fd == fd && ssd->disguise != -1) // Requesting your own "shadow" name.
packet.gid = -bl->id;
- }
- if (ssd->fakename[0] != '\0') {
+ if (ssd->fakename[0] != '\0')
memcpy(packet.name, ssd->fakename, NAME_LENGTH);
- } else {
-#if PACKETVER_MAIN_NUM >= 20150225 || PACKETVER_RE_NUM >= 20141126 || defined(PACKETVER_ZERO)
- // Title System [Dastgir/Hercules]
- if (ssd->status.title_id > 0) {
- packet.title_id = ssd->status.title_id;
- }
-#endif
+ else
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;
- ARR_FIND(0, g->max_member, i, g->member[i].account_id == ssd->status.account_id && g->member[i].char_id == ssd->status.char_id);
- if (i < g->max_member)
- ps = g->member[i].position;
- }
- }
+ const struct party_data *p = NULL;
- if (!battle_config.display_party_name && g == NULL) {
- // do not display party unless the player is also in a guild
- p = NULL;
- }
+ if (ssd->status.party_id != 0)
+ p = party->search(ssd->status.party_id);
+
+ const struct guild *g = NULL;
+ int pos_idx = INDEX_NOT_FOUND;
+
+ if (ssd->status.guild_id != 0 && (g = ssd->guild) != NULL) {
+ int i;
+ int acc_id = ssd->status.account_id;
+ int chr_id = ssd->status.char_id;
+
+ ARR_FIND(0, g->max_member, i, g->member[i].account_id == acc_id && g->member[i].char_id == chr_id);
+
+ if (i < g->max_member)
+ pos_idx = g->member[i].position;
+ }
+
+ if (battle_config.display_party_name == 0 && g == NULL)
+ p = NULL; // Do not display party name, unless the character is also in a guild.
- if (p != NULL) {
+ if (p != NULL) {
+ if ((ssd->fakename[0] != '\0' && (ssd->fakename_options & FAKENAME_OPTION_SHOW_PARTYNAME) != 0)
+ || ssd->fakename[0] == '\0') {
memcpy(packet.party_name, p->party.name, NAME_LENGTH);
}
+ }
- if (g != NULL && ps >= 0 && ps < MAX_GUILDPOSITION) {
+ if (g != NULL && pos_idx >= 0 && pos_idx < MAX_GUILDPOSITION) {
+ if ((ssd->fakename[0] != '\0' && (ssd->fakename_options & FAKENAME_OPTION_SHOW_GUILDNAME) != 0)
+ || ssd->fakename[0] == '\0') {
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) {
+
+ if ((ssd->fakename[0] != '\0' && (ssd->fakename_options & FAKENAME_OPTION_SHOW_GUILDPOSITION) != 0)
+ || ssd->fakename[0] == '\0') {
+ memcpy(packet.position_name, g->position[pos_idx].name, NAME_LENGTH);
+ }
+ } else if (ssd->status.clan_id != 0) {
+ struct clan *c = clan->search(ssd->status.clan_id);
+
+ if (c != 0) {
+ if ((ssd->fakename[0] != '\0' && (ssd->fakename_options & FAKENAME_OPTION_SHOW_CLANPOSITION) != 0)
+ || ssd->fakename[0] == '\0') {
memcpy(packet.position_name, c->name, NAME_LENGTH);
}
}
}
- clif->send_selforarea(fd, bl, &packet, len);
+#if PACKETVER_MAIN_NUM >= 20150225 || PACKETVER_RE_NUM >= 20141126 || defined(PACKETVER_ZERO) // Title system.
+ if (ssd->status.title_id > 0) {
+ if ((ssd->fakename[0] != '\0' && (ssd->fakename_options & FAKENAME_OPTION_SHOW_TITLE) != 0)
+ || ssd->fakename[0] == '\0') {
+ packet.title_id = ssd->status.title_id;
+ }
+ }
+#endif
+
+ clif->send_selforarea(fd, bl, &packet, sizeof(struct PACKET_ZC_ACK_REQNAMEALL));
}
/// Updates the object's (bl) name on client.
@@ -9703,10 +9816,22 @@ static void clif_elemname_ack(int fd, struct block_list *bl)
clif->send_selforarea(fd, bl, &packet, sizeof(struct PACKET_ZC_ACK_REQNAME_TITLE));
}
+static void clif_skillname_ack(int fd, struct block_list *bl)
+{
+}
+
+static void clif_itemname_ack(int fd, struct block_list *bl)
+{
+ nullpo_retv(bl);
+ ShowError("clif_itemname_ack: bad type %u(%d)\n", bl->type, bl->id);
+ Assert_retv(0);
+}
+
static void clif_unknownname_ack(int fd, struct block_list *bl)
{
nullpo_retv(bl);
ShowError("clif_blname_ack: bad type %u(%d)\n", bl->type, bl->id);
+ Assert_retv(0);
}
static void clif_blname_ack(int fd, struct block_list *bl)
@@ -9738,62 +9863,102 @@ static void clif_blname_ack(int fd, struct block_list *bl)
case BL_ELEM:
clif->elemname_ack(fd, bl);
break;
+ case BL_ITEM:
+ clif->itemname_ack(fd, bl);
+ break;
+ case BL_SKILL:
+ clif->skillname_ack(fd, bl);
+ break;
default:
clif->unknownname_ack(fd, bl);
break;
}
}
-//Used to update when a char leaves a party/guild. [Skotlex]
-//Needed because when you send a 0x95 packet, the client will not remove the cached party/guild info that is not sent.
+/**
+ * Updates a character's name on client when leaving a party/guild.
+ *
+ * @code
+ * 0195 <id>.L <char name>.24B <party name>.24B <guild name>.24B <position name>.24B (ZC_ACK_REQNAMEALL)
+ * 0A30 <id>.L <char name>.24B <party name>.24B <guild name>.24B <position name>.24B <title id>.L (ZC_ACK_REQNAMEALL2)
+ * @endcode
+ *
+ * @param ssd The related character.
+ *
+ **/
static void clif_charnameupdate(struct map_session_data *ssd)
{
- int ps = -1;
- struct party_data *p = NULL;
- struct guild *g = NULL;
- struct PACKET_ZC_ACK_REQNAMEALL packet = { 0 };
-
nullpo_retv(ssd);
- if (ssd->fakename[0])
- return; //No need to update as the party/guild was not displayed anyway.
-
+ struct PACKET_ZC_ACK_REQNAMEALL packet = {0};
packet.packet_id = HEADER_ZC_ACK_REQNAMEALL;
packet.gid = ssd->bl.id;
- memcpy(packet.name, ssd->status.name, NAME_LENGTH);
+ if (ssd->fakename[0] != '\0')
+ memcpy(packet.name, ssd->fakename, NAME_LENGTH);
+ else
+ memcpy(packet.name, ssd->status.name, NAME_LENGTH);
- if (!battle_config.display_party_name) {
- if (ssd->status.party_id > 0 && ssd->status.guild_id > 0 && (g = ssd->guild) != NULL)
- p = party->search(ssd->status.party_id);
- } else {
- if (ssd->status.party_id > 0)
- p = party->search(ssd->status.party_id);
- }
+ struct party_data *p = NULL;
+
+ if (ssd->status.party_id != 0)
+ p = party->search(ssd->status.party_id);
- if (ssd->status.guild_id > 0 && (g = ssd->guild) != NULL) {
+ struct guild *g = NULL;
+ int pos_idx = INDEX_NOT_FOUND;
+
+ if (ssd->status.guild_id != 0 && (g = ssd->guild) != NULL) {
int i;
- ARR_FIND(0, g->max_member, i, g->member[i].account_id == ssd->status.account_id && g->member[i].char_id == ssd->status.char_id);
- if( i < g->max_member ) ps = g->member[i].position;
+ int acc_id = ssd->status.account_id;
+ int chr_id = ssd->status.char_id;
+
+ ARR_FIND(0, g->max_member, i, g->member[i].account_id == acc_id && g->member[i].char_id == chr_id);
+
+ if (i < g->max_member)
+ pos_idx = g->member[i].position;
}
- if (p != NULL)
- memcpy(packet.party_name, p->party.name, NAME_LENGTH);
+ if (battle_config.display_party_name == 0 && g == NULL)
+ p = NULL; // Do not display party name, unless the character is also in a guild.
- if (g != NULL && ps >= 0 && ps < MAX_GUILDPOSITION) {
- memcpy(packet.guild_name, g->name,NAME_LENGTH);
- memcpy(packet.position_name, g->position[ps].name, NAME_LENGTH);
+ if (p != NULL) {
+ if ((ssd->fakename[0] != '\0' && (ssd->fakename_options & FAKENAME_OPTION_SHOW_PARTYNAME) != 0)
+ || ssd->fakename[0] == '\0') {
+ memcpy(packet.party_name, p->party.name, NAME_LENGTH);
+ }
}
-#if PACKETVER_MAIN_NUM >= 20150225 || PACKETVER_RE_NUM >= 20141126 || defined(PACKETVER_ZERO)
- // Achievement System [Dastgir/Hercules]
+ if (g != NULL && pos_idx >= 0 && pos_idx < MAX_GUILDPOSITION) {
+ if ((ssd->fakename[0] != '\0' && (ssd->fakename_options & FAKENAME_OPTION_SHOW_GUILDNAME) != 0)
+ || ssd->fakename[0] == '\0') {
+ memcpy(packet.guild_name, g->name,NAME_LENGTH);
+ }
+
+ if ((ssd->fakename[0] != '\0' && (ssd->fakename_options & FAKENAME_OPTION_SHOW_GUILDPOSITION) != 0)
+ || ssd->fakename[0] == '\0') {
+ memcpy(packet.position_name, g->position[pos_idx].name, NAME_LENGTH);
+ }
+ } else if (ssd->status.clan_id != 0) {
+ struct clan *c = clan->search(ssd->status.clan_id);
+
+ if (c != 0) {
+ if ((ssd->fakename[0] != '\0' && (ssd->fakename_options & FAKENAME_OPTION_SHOW_CLANPOSITION) != 0)
+ || ssd->fakename[0] == '\0') {
+ memcpy(packet.position_name, c->name, NAME_LENGTH);
+ }
+ }
+ }
+
+#if PACKETVER_MAIN_NUM >= 20150225 || PACKETVER_RE_NUM >= 20141126 || defined(PACKETVER_ZERO) // Title system.
if (ssd->status.title_id > 0) {
- packet.title_id = ssd->status.title_id;
+ if ((ssd->fakename[0] != '\0' && (ssd->fakename_options & FAKENAME_OPTION_SHOW_TITLE) != 0)
+ || ssd->fakename[0] == '\0') {
+ packet.title_id = ssd->status.title_id;
+ }
}
#endif
- // Update nearby clients
- clif->send(&packet, sizeof(packet), &ssd->bl, AREA);
+ clif->send(&packet, sizeof(packet), &ssd->bl, AREA); // Update nearby clients.
}
/// Taekwon Jump (TK_HIGHJUMP) effect (ZC_HIGHJUMP).
@@ -10318,7 +10483,8 @@ static const char *clif_process_chat_message(struct map_session_data *sd, const
* @param[in] sd The source character.
* @param[in] packet The packet data.
* @param[out] out_name The parsed target name buffer (must be a valid
- * buffer of size NAME_LENGTH).
+ * buffer of size NAME_LENGTH + 1 because the client
+ * can send 24 characters without NULL terminator).
* @param[out] out_message The output message buffer (must be a valid buffer).
* @param[in] out_messagelen The size of out_message.
* @retval true if the validation succeeded and the message is a chat message.
@@ -10328,7 +10494,7 @@ static const char *clif_process_chat_message(struct map_session_data *sd, const
*/
static bool clif_process_whisper_message(struct map_session_data *sd, const struct packet_whisper_message *packet, char *out_name, char *out_message, int out_messagelen)
{
- int namelen = 0, messagelen = 0;
+ int messagelen = 0;
nullpo_retr(false, sd);
nullpo_retr(false, packet);
@@ -10341,15 +10507,6 @@ static bool clif_process_whisper_message(struct map_session_data *sd, const stru
return false;
}
- // validate name
- namelen = (int)strnlen(packet->name, NAME_LENGTH-1); // name length (w/o zero byte)
-
- if (packet->name[namelen] != '\0') {
- // only restriction is that the name must be zero-terminated
- ShowWarning("clif_process_whisper_message: Player '%s' sent an unterminated name!\n", sd->status.name);
- return false;
- }
-
#if PACKETVER >= 20151001
// Packet doesn't include a NUL terminator
messagelen = packet->packet_len - NAME_LENGTH - 4;
@@ -10368,7 +10525,7 @@ static bool clif_process_whisper_message(struct map_session_data *sd, const stru
return false;
}
- safestrncpy(out_name, packet->name, namelen+1); // [!] packet->name is not NUL terminated
+ safestrncpy(out_name, packet->name, NAME_LENGTH + 1); // [!] packet->name is not NUL terminated
safestrncpy(out_message, packet->message, messagelen+1); // [!] packet->message is not necessarily NUL terminated
if (!pc->process_chat_message(sd, out_message))
@@ -10536,366 +10693,556 @@ static void clif_parse_WantToConnection(int fd, struct map_session_data *sd)
chrif->authreq(sd,false);
}
+/**
+ * Displays the common server messages upon login, chaning maps or teleporting to a character.
+ *
+ * @param sd The character who should receive the messages.
+ * @param connect_new Whether the character is logging in.
+ * @param change_map Whether the character is changing maps.
+ *
+ **/
+static void clif_load_end_ack_sub_messages(struct map_session_data *sd, bool connect_new, bool change_map)
+{
+ nullpo_retv(sd);
+
+ /** Display overweight messages. **/
+ if (((battle_config.display_overweight_messages & 0x1) != 0 && connect_new)
+ || ((battle_config.display_overweight_messages & 0x2) != 0 && !connect_new && change_map)) {
+ // Send the character's weight to the client. (With displaying overweight messages.)
+ clif->updatestatus(sd, SP_MAXWEIGHT);
+ clif->updatestatus(sd, SP_WEIGHT);
+ } else {
+ // Send the character's weight to the client. (Without displaying overweight messages.)
+ clif->updatestatus(sd, SP_WEIGHT);
+ clif->updatestatus(sd, SP_MAXWEIGHT);
+ }
+
+ /** Display configuration messages. **/
+ if (((battle_config.display_config_messages & 0x1) != 0 && connect_new)
+ || ((battle_config.display_config_messages & 0x2) != 0 && !connect_new && change_map)
+ || (battle_config.display_config_messages & 0x4) != 0) {
+#if PACKETVER >= 20070918
+ if ((battle_config.display_config_messages & 0x10) != 0)
+ clif->partyinvitationstate(sd);
+
+ if ((battle_config.display_config_messages & 0x20) != 0)
+ clif->equpcheckbox(sd);
+#endif
+
+#if PACKETVER_MAIN_NUM >= 20171025 || PACKETVER_RE_NUM >= 20170920
+ if ((battle_config.display_config_messages & 0x40) != 0)
+ clif->zc_config(sd, CZ_CONFIG_CALL, sd->status.allow_call);
+
+ if ((battle_config.display_config_messages & 0x80) != 0) {
+ if (sd->pd != NULL)
+ clif->zc_config(sd, CZ_CONFIG_PET_AUTOFEEDING, sd->pd->pet.autofeed);
+ else
+ clif->zc_config(sd, CZ_CONFIG_PET_AUTOFEEDING, false);
+ }
+
+ if ((battle_config.display_config_messages & 0x100) != 0) {
+ if (sd->hd != NULL)
+ clif->zc_config(sd, CZ_CONFIG_HOMUNCULUS_AUTOFEEDING, sd->hd->homunculus.autofeed);
+ else
+ clif->zc_config(sd, CZ_CONFIG_HOMUNCULUS_AUTOFEEDING, false);
+ }
+#endif
+ }
+
+ /** Display party options. **/
+ struct party_data *p = NULL;
+
+ if (sd->status.party_id != 0 && (p = party->search(sd->status.party_id)) != NULL) {
+ int flag;
+
+ if (p->state.option_auto_changed != 0)
+ flag = 0x04;
+ else if (connect_new)
+ flag = 0x20;
+ else if (change_map)
+ flag = 0x40;
+ else
+ flag = 0x80;
+
+ clif->party_option(p, sd, flag);
+ }
+
+ /** Display rate modifier messages. **/
+ if (((battle_config.display_rate_messages & 0x1) != 0 && connect_new)
+ || ((battle_config.display_rate_messages & 0x2) != 0 && !connect_new && change_map)
+ || (battle_config.display_rate_messages & 0x4) != 0) {
+ clif->show_modifiers(sd);
+ }
+
+ /** Display guild notice. **/
+ if (sd->guild != NULL) {
+ if (((battle_config.guild_notice_changemap & 0x1) != 0 && connect_new)
+ || ((battle_config.guild_notice_changemap & 0x2) != 0 && !connect_new && change_map)
+ || (battle_config.guild_notice_changemap & 0x4) != 0) {
+ clif->guild_notice(sd, sd->guild);
+ }
+ }
+}
+
+/**
+ * Notification from the client, that it has finished map loading and is about to display player's character. (CZ_NOTIFY_ACTORINIT)
+ *
+ * @code
+ * 007d
+ * @endcode
+ *
+ * @param fd The incoming file descriptor.
+ * @param sd The related character.
+ *
+ **/
static void clif_parse_LoadEndAck(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
-/// Notification from the client, that it has finished map loading and is about to display player's character (CZ_NOTIFY_ACTORINIT).
-/// 007d
static void clif_parse_LoadEndAck(int fd, struct map_session_data *sd)
{
- bool first_time = false;
+ if (sd->state.using_megaphone != 0)
+ sd->state.using_megaphone = 0;
- if(sd->bl.prev != NULL)
+ if (sd->bl.prev != NULL)
return;
- if (!sd->state.active) { //Character loading is not complete yet!
- //Let pc->reg_received reinvoke this when ready.
+ if (sd->state.active == 0) { // Character loading is not complete yet! Let pc->reg_received reinvoke this when ready.
sd->state.connect_new = 0;
return;
}
- if (sd->state.rewarp) { //Rewarp player.
+ if (sd->state.rewarp != 0) { // Rewarp character.
sd->state.rewarp = 0;
clif->changemap(sd, sd->bl.m, sd->bl.x, sd->bl.y);
return;
}
sd->state.warping = 0;
- sd->state.dialog = 0;/* reset when warping, client dialog will go missing */
+ sd->state.dialog = 0; // Reset when warping. Client dialog will go missing.
- // Character Looks
+ // Character looks.
#if PACKETVER < 4
clif->changelook(&sd->bl, LOOK_WEAPON, sd->status.look.weapon);
clif->changelook(&sd->bl, LOOK_SHIELD, sd->status.look.shield);
#else
- clif->changelook(&sd->bl,LOOK_WEAPON,0);
+ clif->changelook(&sd->bl, LOOK_WEAPON, 0);
#endif
- if(sd->vd.cloth_color)
- clif->refreshlook(&sd->bl,sd->bl.id,LOOK_CLOTHES_COLOR,sd->vd.cloth_color,SELF);
+ if (sd->vd.cloth_color != 0)
+ clif->refreshlook(&sd->bl, sd->bl.id, LOOK_CLOTHES_COLOR, sd->vd.cloth_color, SELF);
- if (sd->vd.body_style)
- clif->refreshlook(&sd->bl,sd->bl.id,LOOK_BODY2,sd->vd.body_style,SELF);
+ if (sd->vd.body_style != 0)
+ clif->refreshlook(&sd->bl, sd->bl.id, LOOK_BODY2, sd->vd.body_style, SELF);
- // Send character inventory to the client.
- // call this before pc->checkitem() so that the client isn't called to delete a non-existent item.
+ /**
+ * Send character inventory to the client.
+ * Call this before pc->checkitem() so that the client isn't called to delete a non-existent items.
+ *
+ **/
clif->inventoryList(sd);
// Send the cart inventory, counts & weight to the client.
- if(pc_iscarton(sd)) {
+ if (pc_iscarton(sd)) {
clif->cartList(sd);
clif->updatestatus(sd, SP_CARTINFO);
}
- // Check for and delete unavailable/disabled items.
- pc->checkitem(sd);
+ /**
+ * In official servers, an item's unequip script is executed when entering a zone where the item is restricted,
+ * even if the item won't be unequipped.
+ *
+ **/
+ if (map->list[sd->bl.m].zone != NULL && map->list[sd->bl.m].zone->disabled_items_count != 0) {
+ struct map_zone_data *zone = map->list[sd->bl.m].zone;
+ int dis_items_cnt = zone->disabled_items_count;
+ int handled_equip = 0x00000000;
+
+ for (int i = 0; i < EQI_MAX; i++) {
+ if (sd->equip_index[i] == INDEX_NOT_FOUND)
+ continue;
+
+ int inv_idx = sd->equip_index[i];
+ struct item_data *equip_data = sd->inventory_data[inv_idx];
+
+ if (equip_data == NULL)
+ continue;
+
+ if ((handled_equip & equip_data->equip) != 0)
+ continue; // Equipment takes multiple slots and was already handled.
+
+ handled_equip |= equip_data->equip;
+
+ if (equip_data->unequip_script != NULL) {
+ int idx;
+
+ ARR_FIND(0, dis_items_cnt, idx, zone->disabled_items[idx] == equip_data->nameid);
+
+ if (idx < dis_items_cnt)
+ script->run_item_unequip_script(sd, equip_data, npc->fake_nd->bl.id);
+ }
+
+ if (inv_idx != sd->equip_index[i])
+ continue; // Unequip script execution corrupted the inventory index.
+
+ struct item *equip = &sd->status.inventory[inv_idx];
+
+ if (equip != NULL && !itemdb_isspecial(equip->card[0])) {
+ for (int slot = 0; slot < equip_data->slot; slot++) {
+ if (equip->card[slot] == 0)
+ continue;
+
+ struct item_data *card_data = itemdb->exists(equip->card[slot]);
- // Send the character's weight to the client.
- clif->updatestatus(sd, SP_WEIGHT);
- clif->updatestatus(sd, SP_MAXWEIGHT);
+ if (card_data != NULL && card_data->unequip_script != NULL) {
+ int idx;
- // guild
- // (needs to go before clif_spawn() to show guild emblems correctly)
- if(sd->status.guild_id)
- guild->send_memberinfoshort(sd,1);
+ ARR_FIND(0, dis_items_cnt, idx, zone->disabled_items[idx] == card_data->nameid);
- if(battle_config.pc_invincible_time > 0) {
- pc->setinvincibletimer(sd,battle_config.pc_invincible_time);
+ if (idx < dis_items_cnt)
+ script->run_item_unequip_script(sd, card_data, npc->fake_nd->bl.id);
+ }
+ }
+ }
+ }
}
- if( map->list[sd->bl.m].users++ == 0 && battle_config.dynamic_mobs )
+ // Check for and delete unavailable/disabled items.
+ pc->checkitem(sd);
+
+ // Send character's guild info to the client. Call this before clif->spawn() to show guild emblems correctly.
+ if (sd->status.guild_id != 0)
+ guild->send_memberinfoshort(sd, 1);
+
+ if (battle_config.pc_invincible_time > 0)
+ pc->setinvincibletimer(sd, battle_config.pc_invincible_time);
+
+ if (map->list[sd->bl.m].users++ == 0 && battle_config.dynamic_mobs != 0)
map->spawnmobs(sd->bl.m);
- if( map->list[sd->bl.m].instance_id >= 0 ) {
+ if (map->list[sd->bl.m].instance_id >= 0) {
instance->list[map->list[sd->bl.m].instance_id].users++;
instance->check_idle(map->list[sd->bl.m].instance_id);
}
- if( pc_has_permission(sd,PC_PERM_VIEW_HPMETER) ) {
+ if (pc_has_permission(sd, PC_PERM_VIEW_HPMETER)) {
map->list[sd->bl.m].hpmeter_visible++;
sd->state.hpmeter_visible = 1;
}
- if (!pc_isinvisible(sd)) { // increment the number of pvp players on the map
+ if (!pc_isinvisible(sd)) // Increment the number of pvp players on the map.
map->list[sd->bl.m].users_pvp++;
- }
- sd->state.debug_remove_map = 0; // temporary state to track double remove_map's [FlavioJS]
+ sd->state.debug_remove_map = 0; // Temporary state to track double calls of unit->remove_map(). [FlavioJS]
+ sd->state.callshop = 0; // Reset the callshop flag if the character changes map.
+ map->addblock(&sd->bl); // Add the character to the map.
+ clif->spawn(&sd->bl); // Spawn character client side.
+
+ clif_load_end_ack_sub_messages(sd, (sd->state.connect_new != 0), (sd->state.changemap != 0));
+
+ struct party_data *p = NULL;
- // reset the callshop flag if the player changes map
- sd->state.callshop = 0;
+ if (sd->status.party_id != 0)
+ p = party->search(sd->status.party_id);
- map->addblock(&sd->bl);
- clif->spawn(&sd->bl);
+ // Send character's party info to the client. Call this after clif->spawn() to show HP bars correctly.
+ if (p != NULL) {
+ if (sd->state.connect_new == 0) // Login is handled in party_member_joined().
+ party->send_movemap(sd);
- // Party
- // (needs to go after clif_spawn() to show hp bars correctly)
- if(sd->status.party_id) {
- party->send_movemap(sd);
- clif->party_hp(sd); // Show hp after displacement [LuzZza]
+ clif->party_hp(sd); // Show HP after displacement. [LuzZza]
}
- if( sd->bg_id ) clif->bg_hp(sd); // BattleGround System
+ if (sd->bg_id != 0)
+ clif->bg_hp(sd); // BattleGround system.
+
+ if (map->list[sd->bl.m].flag.pvp != 0 && !pc_isinvisible(sd)) {
+ if (battle_config.pk_mode == 0) { // Remove PVP stuff for pk_mode. [Valaris]
+ if (map->list[sd->bl.m].flag.pvp_nocalcrank == 0)
+ sd->pvp_timer = timer->add(timer->gettick() + 200, pc->calc_pvprank_timer, sd->bl.id, 0);
- if (map->list[sd->bl.m].flag.pvp && !pc_isinvisible(sd)) {
- if(!battle_config.pk_mode) { // remove pvp stuff for pk_mode [Valaris]
- if (!map->list[sd->bl.m].flag.pvp_nocalcrank)
- sd->pvp_timer = timer->add(timer->gettick()+200, pc->calc_pvprank_timer, sd->bl.id, 0);
sd->pvp_rank = 0;
sd->pvp_lastusers = 0;
sd->pvp_point = 5;
sd->pvp_won = 0;
sd->pvp_lost = 0;
}
+
clif->map_property(sd, MAPPROPERTY_FREEPVPZONE);
- } else
- // set flag, if it's a duel [LuzZza]
- if(sd->duel_group)
+ } else if(sd->duel_group != 0) { // Set flag, if it's a duel. [LuzZza]
clif->map_property(sd, MAPPROPERTY_FREEPVPZONE);
+ }
- if (map->list[sd->bl.m].flag.gvg_dungeon)
+ if (map->list[sd->bl.m].flag.gvg_dungeon != 0)
clif->map_property(sd, MAPPROPERTY_FREEPVPZONE); //TODO: Figure out the real packet to send here.
- if( map_flag_gvg2(sd->bl.m) )
+ if (map_flag_gvg2(sd->bl.m))
clif->map_property(sd, MAPPROPERTY_AGITZONE);
- // info about nearby objects
- // must use foreachinarea (CIRCULAR_AREA interferes with foreachinrange)
- map->foreachinarea(clif->getareachar, sd->bl.m, sd->bl.x-AREA_SIZE, sd->bl.y-AREA_SIZE, sd->bl.x+AREA_SIZE, sd->bl.y+AREA_SIZE, BL_ALL, sd);
+ // Info about nearby objects. Must use map->foreachinarea(). (CIRCULAR_AREA interferes with map->foreachinrange().)
+ map->foreachinarea(clif->getareachar, sd->bl.m, sd->bl.x - AREA_SIZE, sd->bl.y - AREA_SIZE,
+ sd->bl.x + AREA_SIZE, sd->bl.y + AREA_SIZE, BL_ALL, sd);
- // pet
- if( sd->pd ) {
- if( battle_config.pet_no_gvg && map_flag_gvg2(sd->bl.m) ) { //Return the pet to egg. [Skotlex]
- clif->message(sd->fd, msg_sd(sd,866)); // "Pets are not allowed in Guild Wars."
- pet->menu(sd, 3); //Option 3 is return to egg.
+ // Spawn pet.
+ if (sd->pd != NULL) {
+ if (map->list[sd->bl.m].flag.nopet != 0) { // Return the pet to egg. [Skotlex]
+ clif->message(sd->fd, msg_sd(sd, 866)); // Pets are not allowed in Guild Wars.
+ pet->menu(sd, 3); // Option 3 is return to egg.
} else {
- map->addblock(&sd->pd->bl);
- clif->spawn(&sd->pd->bl);
- clif->send_petdata(sd,sd->pd,0,0);
- clif->send_petstatus(sd);
- //skill->unit_move(&sd->pd->bl,timer->gettick(),1);
+ pet->spawn(sd, false);
}
}
- //homunculus [blackhole89]
- if( homun_alive(sd->hd) ) {
+ // Spawn homunculus. [blackhole89]
+ if (homun_alive(sd->hd)) {
map->addblock(&sd->hd->bl);
clif->spawn(&sd->hd->bl);
- clif->send_homdata(sd,SP_ACK,0);
- clif->hominfo(sd,sd->hd,1);
- clif->hominfo(sd,sd->hd,0); //for some reason, at least older clients want this sent twice
+ clif->send_homdata(sd, SP_ACK, 0);
+ clif->hominfo(sd,sd->hd, 1);
+ clif->hominfo(sd,sd->hd, 0); // For some reason, at least older clients want this sent twice.
clif->homskillinfoblock(sd);
- if( battle_config.hom_setting&0x8 )
- status_calc_bl(&sd->hd->bl, SCB_SPEED); //Homunc mimic their master's speed on each map change
- if( !(battle_config.hom_setting&0x2) )
- skill->unit_move(&sd->hd->bl,timer->gettick(),1); // apply land skills immediately
+
+ if ((battle_config.hom_setting & 0x8) != 0)
+ status_calc_bl(&sd->hd->bl, SCB_SPEED); // Homunculi mimic their master's speed on each map change.
+
+ if ((battle_config.hom_setting & 0x2) == 0)
+ skill->unit_move(&sd->hd->bl, timer->gettick(), 1); // Apply land skills immediately.
}
- if( sd->md ) {
+ // Spawn mercenary.
+ if (sd->md != NULL) {
map->addblock(&sd->md->bl);
clif->spawn(&sd->md->bl);
clif->mercenary_info(sd);
clif->mercenary_skillblock(sd);
- status_calc_bl(&sd->md->bl, SCB_SPEED); // Mercenary mimic their master's speed on each map change
+ status_calc_bl(&sd->md->bl, SCB_SPEED); // Mercenaries mimic their master's speed on each map change.
}
- if( sd->ed ) {
+ // Spawn elemental.
+ if (sd->ed != NULL) {
map->addblock(&sd->ed->bl);
clif->spawn(&sd->ed->bl);
clif->elemental_info(sd);
- clif->elemental_updatestatus(sd,SP_HP);
- clif->hpmeter_single(sd->fd,sd->ed->bl.id,sd->ed->battle_status.hp,sd->ed->battle_status.max_hp);
- clif->elemental_updatestatus(sd,SP_SP);
- status_calc_bl(&sd->ed->bl, SCB_SPEED); //Elemental mimic their master's speed on each map change
+ clif->elemental_updatestatus(sd, SP_HP);
+ clif->hpmeter_single(sd->fd, sd->ed->bl.id, sd->ed->battle_status.hp, sd->ed->battle_status.max_hp);
+ clif->elemental_updatestatus(sd, SP_SP);
+ status_calc_bl(&sd->ed->bl, SCB_SPEED); // Elementals mimic their master's speed on each map change.
}
- if(sd->state.connect_new) {
- int lv;
+ bool first_time = false;
+
+ if (sd->state.connect_new != 0) {
first_time = true;
sd->state.connect_new = 0;
clif->skillinfoblock(sd);
clif->hotkeysAll(sd);
- clif->updatestatus(sd,SP_BASEEXP);
- clif->updatestatus(sd,SP_NEXTBASEEXP);
- clif->updatestatus(sd,SP_JOBEXP);
- clif->updatestatus(sd,SP_NEXTJOBEXP);
- clif->updatestatus(sd,SP_SKILLPOINT);
+ clif->updatestatus(sd, SP_BASEEXP);
+ clif->updatestatus(sd, SP_NEXTBASEEXP);
+ clif->updatestatus(sd, SP_JOBEXP);
+ clif->updatestatus(sd, SP_NEXTJOBEXP);
+ clif->updatestatus(sd, SP_SKILLPOINT);
clif->initialstatus(sd);
- if (pc_isfalcon(sd))
- clif->status_change(&sd->bl, status->get_sc_icon(SC_FALCON), status->get_sc_relevant_bl_types(SC_FALCON), 1, 0, 0, 0, 0);
- if (pc_isridingpeco(sd) || pc_isridingdragon(sd))
- clif->status_change(&sd->bl, status->get_sc_icon(SC_RIDING), status->get_sc_relevant_bl_types(SC_RIDING), 1, 0, 0, 0, 0);
- else if (pc_isridingwug(sd))
- clif->status_change(&sd->bl, status->get_sc_icon(SC_WUGRIDER), status->get_sc_relevant_bl_types(SC_WUGRIDER), 1, 0, 0, 0, 0);
+ // Unequip items which can't be equipped by the character.
+ for (int i = 0; i < EQI_MAX; i++) {
+ if (sd->equip_index[i] >= 0 && pc->isequip(sd , sd->equip_index[i]) == 0)
+ pc->unequipitem(sd, sd->equip_index[i], PCUNEQUIPITEM_FORCE);
+ }
- if(sd->status.manner < 0)
- sc_start(NULL,&sd->bl,SC_NOCHAT,100,0,0);
+ if (pc_isfalcon(sd)) {
+ int sc_icn = status->get_sc_icon(SC_FALCON);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_FALCON);
+ clif->status_change(&sd->bl, sc_icn, sc_typ, 1, 0, 0, 0, 0);
+ }
- //Auron reported that This skill only triggers when you logon on the map o.O [Skotlex]
- if ((lv = pc->checkskill(sd,SG_KNOWLEDGE)) > 0) {
- int i;
- for (i = 0; i < MAX_PC_FEELHATE; i++) {
+ if (pc_isridingpeco(sd) || pc_isridingdragon(sd)) {
+ int sc_icn = status->get_sc_icon(SC_RIDING);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RIDING);
+ clif->status_change(&sd->bl, sc_icn, sc_typ, 1, 0, 0, 0, 0);
+ } else if (pc_isridingwug(sd)) {
+ int sc_icn = status->get_sc_icon(SC_WUGRIDER);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_WUGRIDER);
+ clif->status_change(&sd->bl, sc_icn, sc_typ, 1, 0, 0, 0, 0);
+ }
+
+ if (sd->status.manner < 0)
+ sc_start(NULL, &sd->bl, SC_NOCHAT, 100, 0, 0);
+
+ int lv = pc->checkskill(sd,SG_KNOWLEDGE);
+
+ // Auron reported that this skill only triggers when you logon on the map. [Skotlex]
+ if (lv > 0) {
+ for (int i = 0; i < MAX_PC_FEELHATE; i++) {
if (sd->bl.m == sd->feel_map[i].m) {
- sc_start(NULL,&sd->bl, SC_KNOWLEDGE, 100, lv, skill->get_time(SG_KNOWLEDGE, lv));
+ sc_start(NULL, &sd->bl, SC_KNOWLEDGE, 100, lv, skill->get_time(SG_KNOWLEDGE, lv));
break;
}
}
}
- if(sd->pd && sd->pd->pet.intimate > 900)
- clif->pet_emotion(sd->pd,(sd->pd->pet.class_ - 100)*100 + 50 + pet->hungry_val(sd->pd));
+ if (sd->pd != NULL && sd->pd->pet.intimate > PET_INTIMACY_LOYAL)
+ clif->pet_emotion(sd->pd, (sd->pd->pet.class_ - 100) * 100 + 50 + pet->hungry_val(sd->pd));
- if(homun_alive(sd->hd))
+ if (homun_alive(sd->hd))
homun->init_timers(sd->hd);
- if (map->night_flag && map->list[sd->bl.m].flag.nightenabled) {
+ if (map->night_flag != 0 && map->list[sd->bl.m].flag.nightenabled != 0) {
+ int sc_icn = status->get_sc_icon(SC_SKE);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_SKE);
+
sd->state.night = 1;
- clif->status_change(&sd->bl, status->get_sc_icon(SC_SKE), status->get_sc_relevant_bl_types(SC_SKE), 1, 0, 0, 0, 0);
+ clif->status_change(&sd->bl, sc_icn, sc_typ, 1, 0, 0, 0, 0);
}
- // Notify everyone that this char logged in [Skotlex].
+ // Notify everyone that this character logged in. [Skotlex]
map->foreachpc(clif->friendslist_toggle_sub, sd->status.account_id, sd->status.char_id, 1);
- //Login Event
+#if PACKETVER >= 20171122
+ if (battle_config.show_tip_window != 0)
+ clif->open_ui_send(sd, ZC_TIPBOX_UI);
+#endif
+
+ // Run OnPCLoginEvent labels.
npc->script_event(sd, NPCE_LOGIN);
} else {
- //For some reason the client "loses" these on warp/map-change.
- clif->updatestatus(sd,SP_STR);
- clif->updatestatus(sd,SP_AGI);
- clif->updatestatus(sd,SP_VIT);
- clif->updatestatus(sd,SP_INT);
- clif->updatestatus(sd,SP_DEX);
- clif->updatestatus(sd,SP_LUK);
-
- if (sd->state.warp_clean) {
- // abort currently running script
+ // For some reason the client "loses" these on warp/map-change.
+ clif->updatestatus(sd, SP_STR);
+ clif->updatestatus(sd, SP_AGI);
+ clif->updatestatus(sd, SP_VIT);
+ clif->updatestatus(sd, SP_INT);
+ clif->updatestatus(sd, SP_DEX);
+ clif->updatestatus(sd, SP_LUK);
+
+ if (sd->state.warp_clean != 0) { // Abort currently running script.
sd->state.using_fake_npc = 0;
sd->state.menu_or_input = 0;
sd->npc_menu = 0;
- if(sd->npc_id)
+
+ if (sd->npc_id != 0)
npc->event_dequeue(sd);
} else {
sd->state.warp_clean = 1;
}
- if( sd->guild && ( battle_config.guild_notice_changemap == 2 || ( battle_config.guild_notice_changemap == 1 && sd->state.changemap ) ) )
- clif->guild_notice(sd,sd->guild);
}
- if( sd->state.changemap ) {// restore information that gets lost on map-change
-#if PACKETVER >= 20070918
- clif->partyinvitationstate(sd);
- clif->equpcheckbox(sd);
-#endif
+ if (sd->state.changemap != 0) { // Restore information that gets lost on map-change.
+ bool flee_penalty = (battle_config.bg_flee_penalty != 100 || battle_config.gvg_flee_penalty != 100);
+ bool is_gvg = (map_flag_gvg2(sd->state.pmap) || map_flag_gvg2(sd->bl.m));
+ bool is_bg = (map->list[sd->state.pmap].flag.battleground != 0 || map->list[sd->bl.m].flag.battleground != 0);
-#if PACKETVER_MAIN_NUM >= 20171025 || PACKETVER_RE_NUM >= 20170920
- if (sd->hd != NULL)
- clif->zc_config(sd, CZ_CONFIG_HOMUNCULUS_AUTOFEEDING, sd->hd->homunculus.autofeed);
- else
- clif->zc_config(sd, CZ_CONFIG_HOMUNCULUS_AUTOFEEDING, false);
-#endif
- if( (battle_config.bg_flee_penalty != 100 || battle_config.gvg_flee_penalty != 100)
- && (map_flag_gvg2(sd->state.pmap) || map_flag_gvg2(sd->bl.m)
- || map->list[sd->state.pmap].flag.battleground || map->list[sd->bl.m].flag.battleground) )
- status_calc_bl(&sd->bl, SCB_FLEE); //Refresh flee penalty
+ if (flee_penalty && (is_gvg || is_bg))
+ status_calc_bl(&sd->bl, SCB_FLEE); // Refresh flee penalty.
+
+ if (map->night_flag != 0 && map->list[sd->bl.m].flag.nightenabled != 0) {
+ if (sd->state.night == 0) { // Display night.
+ int sc_icn = status->get_sc_icon(SC_SKE);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_SKE);
- if( map->night_flag && map->list[sd->bl.m].flag.nightenabled ) {
- //Display night.
- if( !sd->state.night ) {
sd->state.night = 1;
- clif->status_change(&sd->bl, status->get_sc_icon(SC_SKE), status->get_sc_relevant_bl_types(SC_SKE), 1, 0, 0, 0, 0);
+ clif->status_change(&sd->bl, sc_icn, sc_typ, 1, 0, 0, 0, 0);
}
- } else if( sd->state.night ) { //Clear night display.
+ } else if (sd->state.night != 0) { // Clear night display.
sd->state.night = 0;
clif->sc_end(&sd->bl, sd->bl.id, SELF, status->get_sc_icon(SC_SKE));
}
- if( map->list[sd->bl.m].flag.battleground ) {
- clif->map_type(sd, MAPTYPE_BATTLEFIELD); // Battleground Mode
- if( map->list[sd->bl.m].flag.battleground == 2 )
+ if (map->list[sd->bl.m].flag.battleground != 0) {
+ clif->map_type(sd, MAPTYPE_BATTLEFIELD); // Battleground mode.
+
+ if (map->list[sd->bl.m].flag.battleground == 2)
clif->bg_updatescore_single(sd);
}
- if( map->list[sd->bl.m].flag.allowks && !map_flag_ks(sd->bl.m) ) {
+ if (map->list[sd->bl.m].flag.allowks != 0 && !map_flag_ks(sd->bl.m)) {
char output[128];
+
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);
}
- map->iwall_get(sd); // Updates Walls Info on this Map to Client
- status_calc_pc(sd, SCO_NONE);/* some conditions are map-dependent so we must recalculate */
+ map->iwall_get(sd); // Updates walls info on this map to client.
+ status_calc_pc(sd, SCO_NONE); // Some conditions are map-dependent so we must recalculate.
sd->state.changemap = false;
- if (channel->config->local && channel->config->local_autojoin) {
+ if (channel->config->local && channel->config->local_autojoin)
channel->map_join(sd);
- }
- if (channel->config->irc && channel->config->irc_autojoin) {
+
+ if (channel->config->irc && channel->config->irc_autojoin)
channel->irc_join(sd);
- }
}
mail->clear(sd);
-
- clif->maptypeproperty2(&sd->bl,SELF);
-
- /* Guild Aura Init */
- if( sd->state.gmaster_flag ) {
- guild->aura_refresh(sd,GD_LEADERSHIP,guild->checkskill(sd->guild,GD_LEADERSHIP));
- guild->aura_refresh(sd,GD_GLORYWOUNDS,guild->checkskill(sd->guild,GD_GLORYWOUNDS));
- guild->aura_refresh(sd,GD_SOULCOLD,guild->checkskill(sd->guild,GD_SOULCOLD));
- guild->aura_refresh(sd,GD_HAWKEYES,guild->checkskill(sd->guild,GD_HAWKEYES));
+ clif->maptypeproperty2(&sd->bl, SELF);
+
+ if (sd->guild != NULL) {
+ // Init guild aura.
+ if (sd->state.gmaster_flag != 0) {
+ guild->aura_refresh(sd, GD_LEADERSHIP, guild->checkskill(sd->guild, GD_LEADERSHIP));
+ guild->aura_refresh(sd, GD_GLORYWOUNDS, guild->checkskill(sd->guild, GD_GLORYWOUNDS));
+ guild->aura_refresh(sd, GD_SOULCOLD, guild->checkskill(sd->guild, GD_SOULCOLD));
+ guild->aura_refresh(sd, GD_HAWKEYES, guild->checkskill(sd->guild, GD_HAWKEYES));
+ }
}
- if( sd->state.vending ) { /* show we have a vending */
- clif->openvending(sd,sd->bl.id,sd->vending);
- clif->showvendingboard(&sd->bl,sd->message,0);
+ if (sd->state.vending != 0) { // Character is vending.
+ clif->openvending(sd, sd->bl.id, sd->vending);
+ clif->showvendingboard(&sd->bl, sd->message, 0);
}
- if(map->list[sd->bl.m].flag.loadevent) // Lance
+ if (map->list[sd->bl.m].flag.loadevent != 0) // Run OnPCLoadMapEvent labels. [Lance]
npc->script_event(sd, NPCE_LOADMAP);
- if (pc->checkskill(sd, SG_DEVIL) && !pc->nextjobexp(sd)) //blindness [Komurka]
+ if (pc->checkskill(sd, SG_DEVIL) > 0 && pc->nextjobexp(sd) == 0) // Blindness. [Komurka]
clif->sc_end(&sd->bl, sd->bl.id, SELF, status->get_sc_icon(SC_DEVIL1));
- if (sd->sc.opt2) //Client loses these on warp.
+ if (sd->sc.opt2 != 0) // Client loses these on warp.
clif->changeoption(&sd->bl);
- if( sd->sc.data[SC_MONSTER_TRANSFORM] && battle_config.mon_trans_disable_in_gvg && map_flag_gvg2(sd->bl.m) ){
+ if (sd->sc.data[SC_MONSTER_TRANSFORM] != NULL && battle_config.mon_trans_disable_in_gvg != 0
+ && map_flag_gvg2(sd->bl.m)) {
status_change_end(&sd->bl, SC_MONSTER_TRANSFORM, INVALID_TIMER);
- clif->message(sd->fd, msg_sd(sd,1488)); // Transforming into monster is not allowed in Guild Wars.
+ clif->message(sd->fd, msg_sd(sd, 1488)); // Transforming into monster is not allowed in Guild Wars.
}
clif->weather_check(sd);
- // This should be displayed last
- if( sd->guild && first_time )
- clif->guild_notice(sd, sd->guild);
-
- // For automatic triggering of NPCs after map loading (so you don't need to walk 1 step first)
- if (map->getcell(sd->bl.m, &sd->bl, sd->bl.x, sd->bl.y, CELL_CHKNPC))
- npc->touch_areanpc(sd,sd->bl.m,sd->bl.x,sd->bl.y);
+ // For automatic triggering of NPCs after map loading. (So you don't need to walk 1 step first.)
+ if (map->getcell(sd->bl.m, &sd->bl, sd->bl.x, sd->bl.y, CELL_CHKNPC) != 0)
+ npc->touch_areanpc(sd, sd->bl.m, sd->bl.x, sd->bl.y);
else
npc->untouch_areanpc(sd, sd->bl.m, sd->bl.x, sd->bl.y);
- /* it broke at some point (e.g. during a crash), so we make it visibly dead again. */
- if( !sd->status.hp && !pc_isdead(sd) && status->isdead(&sd->bl) )
+ // It broke at some point (e.g. during a crash), so we make it visibly dead again.
+ if (sd->status.hp == 0 && !pc_isdead(sd) && status->isdead(&sd->bl) != 0)
pc_setdead(sd);
- // If player is dead, and is spawned (such as @refresh) send death packet. [Valaris]
- if(pc_isdead(sd))
+ // Send death packet, if character is dead and is spawned (such as @refresh). [Valaris]
+ if (pc_isdead(sd)) {
clif->clearunit_area(&sd->bl, CLR_DEAD);
- else {
+ } else {
skill->usave_trigger(sd);
+
if (battle_config.player_warp_keep_direction == 1)
clif->changed_dir(&sd->bl, SELF); // Visually updates player facing direction
}
- // Trigger skill effects if you appear standing on them
- if(!battle_config.pc_invincible_time)
- skill->unit_move(&sd->bl,timer->gettick(),1);
+ // Trigger skill effects if you appear standing on them.
+ if (battle_config.pc_invincible_time == 0)
+ skill->unit_move(&sd->bl, timer->gettick(), 1);
- // NPC Quest / Event Icon Check [Kisuka]
#if PACKETVER >= 20090218
- quest->questinfo_refresh(sd);
+ quest->questinfo_refresh(sd); // NPC quest/event icon check. [Kisuka]
#endif
+
+ if (first_time) {
+ int i;
+
+ ARR_FIND(0, instance->instances, i, instance->list[i].owner_type == IOT_CHAR && instance->list[i].owner_id == sd->status.account_id);
+
+ if (i < instance->instances) {
+ sd->instances = 1;
+ CREATE(sd->instance, short, 1);
+ sd->instance[0] = instance->list[i].id;
+ clif->instance_join(sd->fd, instance->list[i].id);
+ }
+ }
}
/// Server's tick (ZC_NOTIFY_TIME).
@@ -11117,7 +11464,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) || pc_isvending(sd))
+ else if (pc_cant_act_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
if(sd->sc.data[SC_RUN] || sd->sc.data[SC_WUGDASH])
@@ -11130,7 +11477,7 @@ static void clif_parse_WalkToXY(int fd, struct map_session_data *sd)
//Set last idle time... [Skotlex]
pc->update_idle_time(sd, BCIDLE_WALK);
- unit->walktoxy(&sd->bl, x, y, 4);
+ unit->walk_toxy(&sd->bl, x, y, 4);
}
/// Notification about the result of a disconnect request (ZC_ACK_REQ_DISCONNECT).
@@ -11348,15 +11695,7 @@ static void clif_parse_MapMove(int fd, struct map_session_data *sd)
/// 0 = straight
/// 1 = turned CW
/// 2 = turned CCW
-/// dir:
-/// 0 = north
-/// 1 = northwest
-/// 2 = west
-/// 3 = southwest
-/// 4 = south
-/// 5 = southeast
-/// 6 = east
-/// 7 = northeast
+/// dir: @see enum unit_dir
static void clif_changed_dir(struct block_list *bl, enum send_target target)
{
unsigned char buf[64];
@@ -11487,8 +11826,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 || pc_isvending(sd))
+ if (pc_cant_act_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0)
+ || pc_issit(sd) || (sd->sc.option & OPTION_HIDE) != 0 || pc_isvending(sd)) {
return;
+ }
if (sd->sc.option & OPTION_COSTUME)
return;
@@ -11626,7 +11967,8 @@ static void clif_parse_WisMessage(int fd, struct map_session_data *sd)
struct map_session_data* dstsd;
int i;
- char target[NAME_LENGTH], message[CHAT_SIZE_MAX + 1];
+ char target[NAME_LENGTH + 1]; // Client can send 24 characters without NULL terminator.
+ char message[CHAT_SIZE_MAX + 1];
const struct packet_whisper_message *packet = RP2PTR(fd);
if (!clif->process_whisper_message(sd, packet, target, message, sizeof message))
@@ -11642,7 +11984,7 @@ static void clif_parse_WisMessage(int fd, struct map_session_data *sd)
char *str = target + 4; // Skip the NPC: string part.
struct npc_data *nd;
if ((nd = npc->name2id(str))) {
- char split_data[NUM_WHISPER_VAR][CHAT_SIZE_MAX];
+ char split_data[NUM_WHISPER_VAR][SCRIPT_STRING_VAR_LENGTH + 1];
char *split;
char output[256];
@@ -11787,7 +12129,7 @@ static void clif_parse_TakeItem(int fd, struct map_session_data *sd)
) )
break;
- if (pc_cant_act(sd))
+ if (pc_cant_act_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0))
break;
if (!pc->takeitem(sd, fitem))
@@ -11813,7 +12155,7 @@ static void clif_parse_DropItem(int fd, struct map_session_data *sd)
if (pc_isdead(sd))
break;
- if ( pc_cant_act2(sd) || sd->state.vending )
+ if (pc_cant_act_except_npc_chat(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0))
break;
if (sd->sc.count && (
@@ -11886,7 +12228,7 @@ static void clif_parse_EquipItem(int fd, struct map_session_data *sd)
return; //Out of bounds check.
if( sd->npc_id ) {
- if ( !sd->npc_item_flag )
+ if ((sd->npc_item_flag & ITEMENABLEDNPC_EQUIP) == 0 && sd->state.using_megaphone == 0)
return;
} else if (sd->state.storage_flag != STORAGE_FLAG_CLOSED || sd->sc.opt1)
; //You can equip/unequip stuff while storage is open/under status changes
@@ -11931,7 +12273,7 @@ static void clif_parse_UnequipItem(int fd, struct map_session_data *sd)
}
if( sd->npc_id ) {
- if ( !sd->npc_item_flag )
+ if ((sd->npc_item_flag & ITEMENABLEDNPC_EQUIP) == 0 && sd->state.using_megaphone == 0)
return;
} else if (sd->state.storage_flag != STORAGE_FLAG_CLOSED || sd->sc.opt1)
; //You can equip/unequip stuff while storage is open/under status changes
@@ -12131,7 +12473,7 @@ 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))
+ if (sd->state.trading || (pc_isdead(sd) && (battle_config.allowed_actions_when_dead & PCALLOWACTION_CHAT) == 0) || pc_isvending(sd))
return;
int len = (int)RFIFOW(fd, 2) - 15;
@@ -12179,7 +12521,7 @@ 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))
+ if (sd->state.trading || (pc_isdead(sd) && (battle_config.allowed_actions_when_dead & PCALLOWACTION_CHAT) == 0) || pc_isvending(sd))
return;
int chatid = RFIFOL(fd,2);
@@ -12196,7 +12538,7 @@ 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))
+ if (sd->state.trading || (pc_isdead(sd) && (battle_config.allowed_actions_when_dead & PCALLOWACTION_CHAT) == 0) || pc_isvending(sd))
return;
int len = (int)RFIFOW(fd, 2) - 15;
@@ -12231,7 +12573,7 @@ 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))
+ if (sd->state.trading || (pc_isdead(sd) && (battle_config.allowed_actions_when_dead & PCALLOWACTION_CHAT) == 0) || pc_isvending(sd))
return;
chat->change_owner(sd, RFIFOP(fd,6)); // non null terminated
@@ -12242,7 +12584,7 @@ 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))
+ if (sd->state.trading || (pc_isdead(sd) && (battle_config.allowed_actions_when_dead & PCALLOWACTION_CHAT) == 0) || pc_isvending(sd))
return;
chat->kick(sd, RFIFOP(fd,2)); // non null terminated
@@ -12253,7 +12595,7 @@ 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))
+ if (sd->state.trading || (pc_isdead(sd) && (battle_config.allowed_actions_when_dead & PCALLOWACTION_CHAT) == 0) || pc_isvending(sd))
return;
chat->leave(sd, false);
@@ -12280,12 +12622,12 @@ 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)
{
- if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ if (sd->state.trading || (pc_isdead(sd) && (battle_config.allowed_actions_when_dead & PCALLOWACTION_TRADE) == 0) || pc_isvending(sd))
return;
struct map_session_data *t_sd = map->id2sd(RFIFOL(fd, 2));
- if (sd->chat_id == 0 && pc_cant_act(sd))
+ if (pc_cant_act_except_npc_chat(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0))
return; //You can trade while in a chatroom.
// @noask [LuzZza]
@@ -12310,7 +12652,7 @@ 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))
+ if (sd->state.trading || (pc_isdead(sd) && (battle_config.allowed_actions_when_dead & PCALLOWACTION_TRADE) == 0) || pc_isvending(sd))
return;
trade->ack(sd,RFIFOB(fd,2));
@@ -12321,7 +12663,7 @@ 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))
+ if (sd->state.trading == 0 || (pc_isdead(sd) && (battle_config.allowed_actions_when_dead & PCALLOWACTION_TRADE) == 0) || pc_isvending(sd))
return;
short index = RFIFOW(fd,2);
@@ -12338,8 +12680,9 @@ 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))
+ if ((pc_isdead(sd) && (battle_config.allowed_actions_when_dead & PCALLOWACTION_TRADE) == 0) || pc_isvending(sd))
return;
+
trade->ok(sd);
}
@@ -12348,7 +12691,7 @@ 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))
+ if ((pc_isdead(sd) && (battle_config.allowed_actions_when_dead & PCALLOWACTION_TRADE) == 0) || pc_isvending(sd))
return;
trade->cancel(sd);
@@ -12359,7 +12702,7 @@ 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))
+ if ((pc_isdead(sd) && (battle_config.allowed_actions_when_dead & PCALLOWACTION_TRADE) == 0) || pc_isvending(sd))
return;
trade->commit(sd);
@@ -12379,8 +12722,10 @@ static void clif_parse_PutItemToCart(int fd, struct map_session_data *sd) __attr
static void clif_parse_PutItemToCart(int fd, struct map_session_data *sd)
{
int flag = 0;
- if (pc_istrading(sd) || sd->state.prevend)
+
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || sd->state.prevend != 0)
return;
+
if (!pc_iscarton(sd))
return;
if ( (flag = pc->putitemtocart(sd,RFIFOW(fd,2)-2,RFIFOL(fd,4))) ) {
@@ -12394,8 +12739,9 @@ static void clif_parse_GetItemFromCart(int fd, struct map_session_data *sd) __at
/// 0127 <index>.W <amount>.L
static void clif_parse_GetItemFromCart(int fd, struct map_session_data *sd)
{
- if (pc_istrading(sd) || sd->state.prevend)
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || sd->state.prevend != 0)
return;
+
if (!pc_iscarton(sd))
return;
pc->getitemfromcart(sd,RFIFOW(fd,2)-2,RFIFOL(fd,4));
@@ -12465,7 +12811,7 @@ static void clif_parse_ChangeCart(int fd, struct map_session_data *sd)
if (pc->checkskill(sd, MC_CHANGECART) == 0)
return;
- if (sd->npc_id || sd->state.workinprogress & 1) {
+ if ((sd->npc_id != 0 && sd->state.using_megaphone == 0) || (sd->state.workinprogress & 1) != 0) {
#if PACKETVER >= 20110308
clif->msgtable(sd, MSG_BUSY);
#else
@@ -12652,6 +12998,16 @@ static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill
{
int64 tick = timer->gettick();
+ pc->autocast_set_current(sd, skill_id);
+
+ /**
+ * According to Skotlex' comment below, the client sometimes passes 0 for the skill level.
+ * Even though this seems to only affect guild skills, sd->autocast.skill_lv is used
+ * for the auto-cast data validation if skill_lv is 0.
+ *
+ **/
+ skill->validate_autocast_data(sd, skill_id, (skill_lv == 0) ? sd->auto_cast_current.skill_lv : skill_lv);
+
if (skill_lv < 1)
skill_lv = 1; //No clue, I have seen the client do this with guild skills :/ [Skotlex]
@@ -12672,7 +13028,11 @@ static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill
// Whether skill fails or not is irrelevant, the char ain't idle. [Skotlex]
pc->update_idle_time(sd, BCIDLE_USESKILLTOID);
- if (sd->npc_id || sd->state.workinprogress & 1) {
+ bool allow_self_skill = ((tmp & INF_SELF_SKILL) != 0 && (skill->get_nk(skill_id) & NK_NO_DAMAGE) != 0);
+ allow_self_skill = (allow_self_skill && battle_config.skill_enabled_npc == SKILLENABLEDNPC_SELF);
+
+ if ((sd->npc_id != 0 && sd->state.using_megaphone == 0 && !allow_self_skill && battle_config.skill_enabled_npc != SKILLENABLEDNPC_ALL)
+ || (sd->state.workinprogress & 1) != 0) {
#if PACKETVER >= 20110308
clif->msgtable(sd, MSG_BUSY);
#else
@@ -12681,7 +13041,7 @@ static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill
return;
}
- if (pc_cant_act(sd)
+ if (pc_cant_act_except_npc(sd)
&& skill_id != RK_REFRESH
&& !(skill_id == SR_GENTLETOUCH_CURE && (sd->sc.opt1 == OPT1_STONE || sd->sc.opt1 == OPT1_FREEZE || sd->sc.opt1 == OPT1_STUN))
&& (sd->state.storage_flag != STORAGE_FLAG_CLOSED && !(tmp&INF_SELF_SKILL)) // SELF skills can be used with the storage open, issue: 8027
@@ -12702,10 +13062,10 @@ static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill
target_id = sd->bl.id;
if (sd->ud.skilltimer != INVALID_TIMER) {
- if (skill_id != SA_CASTCANCEL && skill_id != SO_SPELLFIST)
+ if (skill_id != SA_CASTCANCEL && skill_id != SO_SPELLFIST && sd->auto_cast_current.type == AUTOCAST_NONE)
return;
} else if (DIFF_TICK(tick, sd->ud.canact_tick) < 0) {
- if (sd->skillitem != skill_id) {
+ if (sd->auto_cast_current.type == AUTOCAST_NONE) {
clif->skill_fail(sd, skill_id, USESKILL_FAIL_SKILLINTERVAL, 0, 0);
return;
}
@@ -12723,16 +13083,16 @@ static void clif_useSkillToIdReal(int fd, struct map_session_data *sd, int skill
} else if (sd->menuskill_id != SA_AUTOSPELL)
return; //Can't use skills while a menu is open.
}
- if (sd->skillitem == skill_id) {
- if (skill_lv != sd->skillitemlv)
- skill_lv = sd->skillitemlv;
+ if (sd->auto_cast_current.type != AUTOCAST_NONE) {
+ if (skill_lv != sd->auto_cast_current.skill_lv)
+ skill_lv = sd->auto_cast_current.skill_lv;
if (!(tmp&INF_SELF_SKILL))
pc->delinvincibletimer(sd); // Target skills through items cancel invincibility. [Inkfish]
unit->skilluse_id(&sd->bl, target_id, skill_id, skill_lv);
return;
}
- sd->skillitem = sd->skillitemlv = 0;
+ pc->autocast_clear(sd);
if (skill_id >= GD_SKILLBASE && skill_id < GD_MAX) {
if (sd->state.gmaster_flag)
@@ -12793,6 +13153,18 @@ static void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, uin
int64 tick = timer->gettick();
nullpo_retv(sd);
+
+ pc->autocast_set_current(sd, skill_id);
+
+ /**
+ * When using clif_item_skill() to initiate the execution of ground skills,
+ * the client sometimes passes 0 for the skill level in packet 0x0af4.
+ * In that case sd->autocast.skill_lv is used for the auto-cast data validation,
+ * since clif_item_skill() is only used for auto-cast skills.
+ *
+ **/
+ skill->validate_autocast_data(sd, skill_id, (skill_lv == 0) ? sd->auto_cast_current.skill_lv : skill_lv);
+
if( !(skill->get_inf(skill_id)&INF_GROUND_SKILL) )
return; //Using a target skill on the ground? WRONG.
@@ -12806,7 +13178,8 @@ static void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, uin
return;
}
- if (sd->state.workinprogress & 1) {
+ if ((sd->npc_id != 0 && sd->state.using_megaphone == 0 && battle_config.skill_enabled_npc != SKILLENABLEDNPC_ALL)
+ || (sd->state.workinprogress & 1) != 0) {
#if PACKETVER >= 20110308
clif->msgtable(sd, MSG_BUSY);
#else
@@ -12829,11 +13202,11 @@ static void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, uin
safestrncpy(sd->message, RFIFOP(fd, skillmoreinfo), TALKBOX_MESSAGE_SIZE);
}
- if( sd->ud.skilltimer != INVALID_TIMER )
+ if (sd->ud.skilltimer != INVALID_TIMER && sd->auto_cast_current.type == AUTOCAST_NONE)
return;
if( DIFF_TICK(tick, sd->ud.canact_tick) < 0 ) {
- if( sd->skillitem != skill_id ) {
+ if (sd->auto_cast_current.type == AUTOCAST_NONE) {
clif->skill_fail(sd, skill_id, USESKILL_FAIL_SKILLINTERVAL, 0, 0);
return;
}
@@ -12854,13 +13227,13 @@ static void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, uin
pc->delinvincibletimer(sd);
- if( sd->skillitem == skill_id ) {
- if( skill_lv != sd->skillitemlv )
- skill_lv = sd->skillitemlv;
+ if (sd->auto_cast_current.type != AUTOCAST_NONE) {
+ if (skill_lv != sd->auto_cast_current.skill_lv)
+ skill_lv = sd->auto_cast_current.skill_lv;
unit->skilluse_pos(&sd->bl, x, y, skill_id, skill_lv);
} else {
int lv;
- sd->skillitem = sd->skillitemlv = 0;
+ pc->autocast_clear(sd);
if( (lv = pc->checkskill(sd, skill_id)) > 0 ) {
if( skill_lv > lv )
skill_lv = lv;
@@ -12876,7 +13249,7 @@ static void clif_parse_UseSkillToPos(int fd, struct map_session_data *sd) __attr
/// There are various variants of this packet, some of them have padding between fields.
static void clif_parse_UseSkillToPos(int fd, struct map_session_data *sd)
{
- if (pc_cant_act(sd))
+ if (pc_cant_act_except_npc(sd))
return;
if (pc_issit(sd))
return;
@@ -12897,7 +13270,7 @@ static void clif_parse_UseSkillToPosMoreInfo(int fd, struct map_session_data *sd
/// There are various variants of this packet, some of them have padding between fields.
static void clif_parse_UseSkillToPosMoreInfo(int fd, struct map_session_data *sd)
{
- if (pc_cant_act(sd))
+ if (pc_cant_act_except_npc(sd))
return;
if (pc_issit(sd))
return;
@@ -12926,14 +13299,23 @@ static void clif_parse_UseSkillMap(int fd, struct map_session_data *sd)
return;
// It is possible to use teleport with the storage window open issue:8027
- if (pc_cant_act(sd) && (sd->state.storage_flag == STORAGE_FLAG_CLOSED && skill_id != AL_TELEPORT)) {
+ if ((pc_cant_act_except_npc(sd) && sd->state.storage_flag == STORAGE_FLAG_CLOSED && skill_id != AL_TELEPORT)
+ || (sd->npc_id != 0 && sd->state.using_megaphone == 0 && battle_config.skill_enabled_npc != SKILLENABLEDNPC_ALL)) {
clif_menuskill_clear(sd);
return;
}
+
+ pc->autocast_set_current(sd, skill_id);
+
+ /**
+ * Since no skill level was passed use 0 to notify skill_validate_autocast_data() of this special case.
+ *
+ **/
+ skill->validate_autocast_data(sd, skill_id, 0);
pc->delinvincibletimer(sd);
skill->castend_map(sd,skill_id,map_name);
- pc->itemskill_clear(sd);
+ pc->autocast_clear(sd);
}
static void clif_parse_RequestMemo(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
@@ -12961,7 +13343,8 @@ static void clif_parse_ProduceMix(int fd, struct map_session_data *sd)
default:
return;
}
- if (pc_istrading(sd) || pc_isdead(sd) || pc_isvending(sd)) {
+ if (pc_istrading_except_npc(sd) || pc_isdead(sd) || pc_isvending(sd)
+ || (sd->npc_id != 0 && sd->state.using_megaphone == 0)) {
//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);
@@ -12992,7 +13375,8 @@ 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) || pc_isdead(sd) || pc_isvending(sd)) {
+ if (pc_istrading_except_npc(sd) || pc_isdead(sd) || pc_isvending(sd)
+ || (sd->npc_id != 0 && sd->state.using_megaphone == 0)) {
//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);
@@ -13012,7 +13396,8 @@ static void clif_parse_RepairItem(int fd, struct map_session_data *sd)
if (sd->menuskill_id != BS_REPAIRWEAPON)
return;
- if (pc_istrading(sd) || pc_isdead(sd) || pc_isvending(sd)) {
+ if (pc_istrading_except_npc(sd) || pc_isdead(sd) || pc_isvending(sd)
+ || (sd->npc_id != 0 && sd->state.using_megaphone == 0)) {
//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);
@@ -13031,7 +13416,8 @@ static void clif_parse_WeaponRefine(int fd, struct map_session_data *sd)
if (sd->menuskill_id != WS_WEAPONREFINE) //Packet exploit?
return;
- if (pc_istrading(sd) || pc_isdead(sd) || pc_isvending(sd)) {
+ if (pc_istrading_except_npc(sd) || pc_isdead(sd) || pc_isvending(sd)
+ || (sd->npc_id != 0 && sd->state.using_megaphone == 0)) {
//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);
@@ -13118,7 +13504,7 @@ 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))
+ if ((sd->state.trading != 0 || pc_isvending(sd) || pc_isdead(sd)) && sd->state.using_megaphone == 0)
return;
int len = RFIFOW(fd, 2);
@@ -13134,7 +13520,7 @@ static void clif_parse_NpcStringInput(int fd, struct map_session_data *sd)
if (len < 9)
return;
- npcid = RFIFOL(fd, 4);
+ npcid = (sd->state.using_megaphone == 0) ? RFIFOL(fd, 4) : sd->npc_id;
message = RFIFOP(fd, 8);
safestrncpy(sd->npc_str, message, min(message_len,CHATBOX_SIZE));
@@ -13203,7 +13589,8 @@ 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) || pc_isdead(sd) || pc_isvending(sd)) {
+ if (pc_istrading_except_npc(sd) || pc_isdead(sd) || pc_isvending(sd)
+ || (sd->npc_id != 0 && sd->state.using_megaphone == 0)) {
//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);
@@ -13489,7 +13876,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
char name[NAME_LENGTH];
@@ -13512,7 +13899,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
char name[NAME_LENGTH];
@@ -13540,7 +13927,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
struct map_session_data *t_sd;
@@ -13564,7 +13951,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
struct map_session_data *t_sd;
@@ -13597,7 +13984,7 @@ 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)
{
- if (pc_istrading(sd) || pc_isvending(sd)) {
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd)) {
party->reply_invite(sd, RFIFOL(fd, 2), 0);
return;
}
@@ -13608,7 +13995,7 @@ static void clif_parse_ReplyPartyInvite(int fd, struct map_session_data *sd)
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)
{
- if (pc_istrading(sd) || pc_isvending(sd)) {
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd)) {
party->reply_invite(sd, RFIFOL(fd, 2), 0);
return;
}
@@ -13621,7 +14008,7 @@ 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 (pc_istrading(sd) || pc_isvending(sd))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
if (map->list[sd->bl.m].flag.partylock) {
@@ -13637,7 +14024,7 @@ 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 (pc_istrading(sd) || pc_isvending(sd))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
if (map->list[sd->bl.m].flag.partylock) {
@@ -13654,7 +14041,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
struct party_data *p;
@@ -13709,7 +14096,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
party->changeleader(sd, map->id2sd(RFIFOL(fd,2)));
@@ -13724,7 +14111,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
short level = RFIFOW(fd,2);
@@ -13769,7 +14156,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
short level = RFIFOW(fd,2);
@@ -13823,7 +14210,7 @@ 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 (pc_istrading(sd) || pc_isvending(sd))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
if (party->booking_delete(sd))
@@ -13862,7 +14249,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
short job[PARTY_BOOKING_JOBS];
@@ -13881,7 +14268,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
int i;
@@ -13952,7 +14339,7 @@ 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
- if (pc_istrading(sd) || pc_isvending(sd))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
short level = RFIFOW(fd, 2);
@@ -14026,7 +14413,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
short level = RFIFOW(fd, 2);
@@ -14046,7 +14433,7 @@ 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 (pc_istrading(sd) || pc_isvending(sd))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
if (party->booking_delete(sd))
@@ -14085,7 +14472,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
const char *notice = RFIFOP(fd, 2);
@@ -14161,7 +14548,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
int index = RFIFOL(fd, 2);
@@ -14178,7 +14565,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
int gid = RFIFOL(fd, 2);
@@ -14195,7 +14582,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
int index = RFIFOL(fd, 2);
@@ -14274,7 +14661,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
unsigned int aid = RFIFOL(fd, 2);
@@ -14306,7 +14693,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
int index = RFIFOL(fd, 2);
@@ -14384,7 +14771,7 @@ 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 (sd->npc_id || sd->state.buyingstore || sd->state.trading)
+ if ((sd->npc_id != 0 && sd->state.using_megaphone == 0) || sd->state.buyingstore != 0 || sd->state.trading != 0)
return;
vending->close(sd);
@@ -14395,12 +14782,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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isdead(sd))
return;
- if( sd->npc_id ) {// using an NPC
- return;
- }
vending->list(sd,RFIFOL(fd,2));
}
@@ -14462,8 +14846,10 @@ 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)
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0)
+ || pc_isdead(sd) || sd->state.vending != 0 || sd->state.buyingstore != 0) {
return;
+ }
int len = (int)RFIFOW(fd, 2) - 85;
@@ -15126,58 +15512,68 @@ static void clif_parse_ChangePetName(int fd, struct map_session_data *sd)
pet->change_name(sd, RFIFOP(fd,2));
}
+/**
+ * Request to evolve the pet. (CZ_PET_EVOLUTION)
+ *
+ * @code
+ * 09fb <Length>.W <EvolvedPetEggID>.W {<index>.W <amount>.W}*items
+ * @endcode
+ *
+ * @param fd The incoming file descriptor.
+ * @param sd The related character.
+ *
+ **/
static void clif_parse_pet_evolution(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
-/// Request to Evolve the pet (CZ_PET_EVOLUTION) [Dastgir/Hercules]
-/// 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))
+ if (sd->state.trading != 0 || pc_isdead(sd) || pc_isvending(sd))
return;
- const struct PACKET_CZ_PET_EVOLUTION *p = RP2PTR(fd);
- int i = 0, idx, petIndex;
-
- Assert_retv(p->PacketLength >= (uint16)sizeof(struct PACKET_CZ_PET_EVOLUTION));
-
- if (sd->status.pet_id == 0) {
+ if (sd->pd == NULL || sd->status.pet_id == 0) { // No pet.
clif->petEvolutionResult(fd, PET_EVOL_NO_CALLPET);
return;
}
- ARR_FIND(0, sd->status.inventorySize, idx, sd->status.inventory[idx].card[0] == CARD0_PET &&
- sd->status.pet_id == MakeDWord(sd->status.inventory[idx].card[1], sd->status.inventory[idx].card[2]));
+ int inv_index;
+
+ ARR_FIND(0, sd->status.inventorySize, inv_index, sd->status.inventory[inv_index].card[0] == CARD0_PET
+ && sd->status.pet_id == MakeDWord(sd->status.inventory[inv_index].card[1],
+ sd->status.inventory[inv_index].card[2]));
- if (idx == sd->status.inventorySize) {
+ if (inv_index == sd->status.inventorySize) { // No pet egg.
clif->petEvolutionResult(fd, PET_EVOL_NO_PETEGG);
return;
}
- // Not Loyal Yet
- if (sd->pd == NULL || sd->pd->pet.intimate < 900) {
+ if (sd->pd->pet.intimate < PET_INTIMACY_LOYAL) { // Pet isn't loyal.
clif->petEvolutionResult(fd, PET_EVOL_RG_FAMILIAR);
return;
}
- ARR_FIND(0, MAX_PET_DB, petIndex, pet->db[petIndex].class_ == sd->pd->pet.class_);
+ int pet_index;
- if (petIndex == MAX_PET_DB) {
- // Which error?
- clif->petEvolutionResult(fd, PET_EVOL_UNKNOWN);
+ ARR_FIND(0, MAX_PET_DB, pet_index, pet->db[pet_index].class_ == sd->pd->pet.class_);
+
+ if (pet_index == MAX_PET_DB) {
+ clif->petEvolutionResult(fd, PET_EVOL_UNKNOWN); // Which error?
return;
}
+ const struct PACKET_CZ_PET_EVOLUTION *p = RP2PTR(fd);
+
+ Assert_retv(p->PacketLength >= (uint16)sizeof(struct PACKET_CZ_PET_EVOLUTION));
+
// Client side validation is not done as it is insecure.
- for (i = 0; i < VECTOR_LENGTH(pet->db[petIndex].evolve_data); i++) {
- struct pet_evolve_data *ped = &VECTOR_INDEX(pet->db[petIndex].evolve_data, i);
- if (ped->petEggId == p->EvolvedPetEggID) {
- int j;
- int pet_id;
+ for (int i = 0; i < VECTOR_LENGTH(pet->db[pet_index].evolve_data); i++) {
+ struct pet_evolve_data *ped = &VECTOR_INDEX(pet->db[pet_index].evolve_data, i);
+ if (ped->petEggId == p->EvolvedPetEggID) {
if (VECTOR_LENGTH(ped->items) == 0) {
clif->petEvolutionResult(fd, PET_EVOL_NO_RECIPE);
return;
}
- for (j = 0; j < VECTOR_LENGTH(ped->items); j++) {
+
+ for (int j = 0; j < VECTOR_LENGTH(ped->items); j++) {
struct itemlist_entry *list = &VECTOR_INDEX(ped->items, j);
int n = pc->search_inventory(sd, list->id);
@@ -15187,7 +15583,7 @@ static void clif_parse_pet_evolution(int fd, struct map_session_data *sd)
}
}
- for (j = 0; j < VECTOR_LENGTH(ped->items); j++) {
+ for (int j = 0; j < VECTOR_LENGTH(ped->items); j++) {
struct itemlist_entry *list = &VECTOR_INDEX(ped->items, j);
int n = pc->search_inventory(sd, list->id);
@@ -15197,27 +15593,26 @@ static void clif_parse_pet_evolution(int fd, struct map_session_data *sd)
}
}
- // Return to Egg
- pet->return_egg(sd, sd->pd);
+ pet->return_egg(sd, sd->pd); // Return pet to egg.
- if (pc->delitem(sd, idx, 1, 0, DELITEM_NORMAL, LOG_TYPE_EGG) == 1) {
+ if (pc->delitem(sd, inv_index, 1, 0, DELITEM_NORMAL, LOG_TYPE_EGG) == 1) {
clif->petEvolutionResult(fd, PET_EVOL_NO_PETEGG);
return;
}
- pet_id = pet->search_petDB_index(ped->petEggId, PET_EGG);
+ int pet_id = pet->search_petDB_index(ped->petEggId, PET_EGG);
+
if (pet_id >= 0) {
sd->catch_target_class = pet->db[pet_id].class_;
-
- intif->create_pet(
- sd->status.account_id, sd->status.char_id,
- pet->db[pet_id].class_, mob->db(pet->db[pet_id].class_)->lv,
- pet->db[pet_id].EggID, 0, (short)pet->db[pet_id].intimate,
- 100, 0, 1, pet->db[pet_id].jname);
+ intif->create_pet(sd->status.account_id, sd->status.char_id, pet->db[pet_id].class_,
+ mob->db(pet->db[pet_id].class_)->lv, pet->db[pet_id].EggID,
+ 0, (short)pet->db[pet_id].intimate, PET_HUNGER_STUFFED,
+ 0, 1, pet->db[pet_id].jname);
clif->petEvolutionResult(fd, PET_EVOL_SUCCESS);
} else {
clif->petEvolutionResult(fd, PET_EVOL_UNKNOWN);
}
+
return;
}
}
@@ -15290,6 +15685,7 @@ static void clif_parse_GMKick(int fd, struct map_session_data *sd)
}
npc->unload_duplicates(nd, true);
npc->unload(nd, true, true);
+ npc->motd = npc->name2id("HerculesMOTD");
npc->read_event_script();
}
break;
@@ -15786,7 +16182,7 @@ static void clif_friendslist_toggle(struct map_session_data *sd, int account_id,
WFIFOL(fd, 2) = sd->status.friends[i].account_id;
WFIFOL(fd, 6) = sd->status.friends[i].char_id;
WFIFOB(fd, 10) = !online; //Yeah, a 1 here means "logged off", go figure...
-#if PACKETVER_MAIN_NUM >= 20180307 || PACKETVER_RE_NUM >= 20180221
+#if PACKETVER_MAIN_NUM >= 20180307 || PACKETVER_RE_NUM >= 20180221 || PACKETVER_ZERO_NUM >= 20180328
memcpy(WFIFOP(fd, 11), sd->status.friends[i].name, NAME_LENGTH);
#endif // PACKETVER_ZERO
@@ -15811,7 +16207,7 @@ static void clif_friendslist_send(struct map_session_data *sd)
{
int i = 0, n, fd = sd->fd;
-#if PACKETVER_MAIN_NUM >= 20180307 || PACKETVER_RE_NUM >= 20180221
+#if PACKETVER_MAIN_NUM >= 20180307 || PACKETVER_RE_NUM >= 20180221 || PACKETVER_ZERO_NUM >= 20180328
const int offset = 8;
#else
const int offset = 32;
@@ -15823,7 +16219,7 @@ static void clif_friendslist_send(struct map_session_data *sd)
for(i = 0; i < MAX_FRIENDS && sd->status.friends[i].char_id; i++) {
WFIFOL(fd, 4 + offset * i + 0) = sd->status.friends[i].account_id;
WFIFOL(fd, 4 + offset * i + 4) = sd->status.friends[i].char_id;
-#if !(PACKETVER_MAIN_NUM >= 20180307 || PACKETVER_RE_NUM >= 20180221)
+#if !(PACKETVER_MAIN_NUM >= 20180307 || PACKETVER_RE_NUM >= 20180221 || PACKETVER_ZERO_NUM >= 20180328)
memcpy(WFIFOP(fd, 4 + offset * i + 8), &sd->status.friends[i].name, NAME_LENGTH);
#endif
}
@@ -16459,7 +16855,7 @@ static void clif_parse_HomMoveToMaster(int fd, struct map_session_data *sd)
unit->calc_pos(bl, sd->bl.x, sd->bl.y, sd->ud.dir);
ud = unit->bl2ud(bl);
- unit->walktoxy(bl, ud->to_x, ud->to_y, 4);
+ unit->walk_toxy(bl, ud->to_x, ud->to_y, 4);
}
static void clif_parse_HomMoveTo(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
@@ -16483,7 +16879,7 @@ static void clif_parse_HomMoveTo(int fd, struct map_session_data *sd)
else
return;
- unit->walktoxy(bl, x, y, 4);
+ unit->walk_toxy(bl, x, y, 4);
}
static void clif_parse_HomAttack(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
@@ -16540,7 +16936,7 @@ 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)
{
- if (pc_istrading(sd) || pc_isvending(sd))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isvending(sd))
return;
if (!pc_isdead(sd))
@@ -18968,7 +19364,7 @@ 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))
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0) || pc_isdead(sd))
return;
const unsigned int blocksize = sizeof(struct PACKET_CZ_REQ_OPEN_BUYING_STORE_sub);
@@ -19743,9 +20139,9 @@ static int clif_autoshadowspell_list(struct map_session_data *sd)
WFIFOHEAD(fd, 2 * 6 + 4);
WFIFOW(fd,0) = 0x442;
for (i = 0, c = 0; i < MAX_SKILL_DB; i++)
- if( sd->status.skill[i].flag == SKILL_FLAG_PLAGIARIZED && sd->status.skill[i].id > 0 &&
- sd->status.skill[i].id < GS_GLITTERING && skill->get_type(sd->status.skill[i].id) == BF_MAGIC )
- { // Can't auto cast both Extended class and 3rd class skills.
+ if (sd->status.skill[i].flag == SKILL_FLAG_PLAGIARIZED && sd->status.skill[i].id > 0 && sd->status.skill[i].id < GS_GLITTERING
+ && skill->get_type(sd->status.skill[i].id, sd->status.skill[i].lv) == BF_MAGIC) {
+ // Can't auto cast both Extended class and 3rd class skills.
WFIFOW(fd,8+c*2) = sd->status.skill[i].id;
c++;
}
@@ -19806,7 +20202,7 @@ static void clif_parse_SkillSelectMenu(int fd, struct map_session_data *sd)
if (sd->menuskill_id != SC_AUTOSHADOWSPELL)
return;
- if (pc_istrading(sd) || sd->state.prevend) {
+ if (pc_istrading_except_npc(sd) || sd->state.prevend != 0 || (sd->npc_id != 0 && sd->state.using_megaphone == 0)) {
clif->skill_fail(sd, sd->ud.skill_id, 0, 0, 0);
clif_menuskill_clear(sd);
return;
@@ -20037,7 +20433,7 @@ static void clif_parse_cashShopOpen2(int fd, struct map_session_data *sd)
static void clif_cashShopOpen(int fd, struct map_session_data *sd, int tab)
{
-#if PACKETVER_MAIN_NUM >= 20101123 || PACKETVER_RE_NUM >= 20120328 || PACKETVER_ZERO_NUM >= defined(PACKETVER_ZERO)
+#if PACKETVER_MAIN_NUM >= 20101123 || PACKETVER_RE_NUM >= 20120328 || defined(PACKETVER_ZERO)
WFIFOHEAD(fd, sizeof(struct PACKET_ZC_SE_CASHSHOP_OPEN));
struct PACKET_ZC_SE_CASHSHOP_OPEN *p = WFIFOP(fd, 0);
p->packetType = HEADER_ZC_SE_CASHSHOP_OPEN;
@@ -20251,17 +20647,14 @@ static void clif_maptypeproperty2(struct block_list *bl, enum send_target t)
{
#if PACKETVER >= 20121010
struct packet_maptypeproperty2 p;
- struct map_session_data *sd = NULL;
nullpo_retv(bl);
- sd = BL_CAST(BL_PC, bl);
-
p.PacketType = maptypeproperty2Type;
p.type = 0x28;
p.flag.party = map->list[bl->m].flag.pvp ? 1 : 0; //PARTY
p.flag.guild = (map->list[bl->m].flag.battleground || map_flag_gvg(bl->m)) ? 1 : 0; // GUILD
p.flag.siege = (map->list[bl->m].flag.battleground || map_flag_gvg2(bl->m)) ? 1: 0; // SIEGE
- p.flag.mineffect = map_flag_gvg(bl->m) ? 1 : ( (sd && sd->state.lesseffect) ? 1 : 0); // USE_SIMPLE_EFFECT - Forcing /mineffect in castles during WoE (probably redundant? I'm not sure)
+ p.flag.mineffect = map_flag_gvg2(bl->m) ? 1 : 0; // USE_SIMPLE_EFFECT - Automatically enable /mineffect in guild arenas and castles.
p.flag.nolockon = 0; // DISABLE_LOCKON - TODO
p.flag.countpk = map->list[bl->m].flag.pvp ? 1 : 0; // COUNT_PK
p.flag.nopartyformation = map->list[bl->m].flag.partylock ? 1 : 0; // NO_PARTY_FORMATION
@@ -20716,20 +21109,57 @@ static void clif_bank_withdraw(struct map_session_data *sd, enum e_BANKING_WITHD
#endif
}
-/* TODO: official response packet (tried 0x8cb/0x97b but the display was quite screwed up.) */
-/* currently mimicing */
+/**
+ * Sends EXP, drop and death-penalty rates.
+ * 0x097b <packet len>.W <exp>.L <death>.L <drop>.L <DETAIL_EXP_INFO>13B (ZC_PERSONAL_INFOMATION2)
+ * <InfoType>.B <Exp>.L <Death>.L <Drop>.L (DETAIL_EXP_INFO)
+ *
+ * @param sd The character which should receive the messages.
+ *
+ **/
static void clif_show_modifiers(struct map_session_data *sd)
{
nullpo_retv(sd);
- if( sd->status.mod_exp != 100 || sd->status.mod_drop != 100 || sd->status.mod_death != 100 ) {
+#if PACKETVER_MAIN_NUM >= 20120503 || PACKETVER_RE_NUM >= 20120502 || defined(PACKETVER_ZERO)
+ int length = sizeof(struct PACKET_ZC_PERSONAL_INFOMATION) + 4 * sizeof(struct PACKET_ZC_PERSONAL_INFOMATION_SUB);
+ WFIFOHEAD(sd->fd, length);
+ struct PACKET_ZC_PERSONAL_INFOMATION *p = WFIFOP(sd->fd, 0);
+
+ p->packetType = HEADER_ZC_PERSONAL_INFOMATION;
+ p->length = length;
+ // Single values.
+ p->details[0].type = PC_EXP_INFO;
+ p->details[0].exp = 0;
+ p->details[0].death = 0;
+ p->details[0].drop = 0;
+ p->details[1].type = TPLUS_EXP_INFO;
+ p->details[1].exp = 0;
+ p->details[1].death = 0;
+ p->details[1].drop = 0;
+ p->details[2].type = PREMIUM_EXP_INFO;
+ p->details[2].exp = (sd->status.mod_exp - 100) * 1000;
+ p->details[2].death = (sd->status.mod_death - 100) * 1000;
+ p->details[2].drop = (sd->status.mod_drop - 100) * 1000;
+ p->details[3].type = SERVER_EXP_INFO;
+ p->details[3].exp = battle_config.base_exp_rate * 1000;
+ p->details[3].death = battle_config.death_penalty_base * 10;
+ p->details[3].drop = battle_config.item_rate_common * 1000;
+ // Total values.
+ p->total_exp = (battle_config.base_exp_rate * sd->status.mod_exp / 100) * 1000;
+ p->total_death = (battle_config.base_exp_rate * sd->status.mod_death / 100) * 10;
+ p->total_drop = (battle_config.base_exp_rate * sd->status.mod_drop / 100) * 1000;
+
+ WFIFOSET(sd->fd, length);
+#else
+ if (sd->status.mod_exp != 100 || sd->status.mod_drop != 100 || sd->status.mod_death != 100) {
char output[128];
- 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);
+ // Base EXP : %d%% | Base Drop: %d%% | Base Death Penalty: %d%%
+ safesnprintf(output, sizeof(output), msg_sd(sd, 896), 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);
}
-
+#endif // PACKETVER_MAIN_NUM >= 20120503 || PACKETVER_RE_NUM >= 20120502 || defined(PACKETVER_ZERO)
}
static void clif_notify_bounditem(struct map_session_data *sd, unsigned short index)
@@ -21969,7 +22399,10 @@ static void clif_parse_rodex_open_write_mail(int fd, struct map_session_data *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;
+ int8 result = (rodex->isenabled() && (sd->npc_id == 0 || sd->state.using_megaphone != 0)) ? 1 : 0;
+
+ if (result == 1)
+ sd->state.workinprogress |= 2;
clif->rodex_open_write_mail(fd, rPacket->receiveName, result);
}
@@ -22115,7 +22548,7 @@ static void clif_rodex_checkname_result(struct map_session_data *sd, int char_id
sPacket->Class = class_;
sPacket->BaseLevel = base_level;
#if PACKETVER >= 20160316
- strncpy(sPacket->Name, name, NAME_LENGTH);
+ safestrncpy(sPacket->Name, name, NAME_LENGTH);
#endif
WFIFOSET(fd, sizeof(*sPacket));
#endif
@@ -22752,61 +23185,65 @@ static void clif_parse_open_ui_request(int fd, struct map_session_data *sd)
clif->open_ui(sd, p->UIType);
}
-static void clif_open_ui(struct map_session_data *sd, enum cz_ui_types uiType)
+/**
+ * Does the actual packet sending for clif_open_ui().
+ *
+ * @param sd The character who opens the UI.
+ * @param ui_type The UI which should be opened.
+ *
+ **/
+static void clif_open_ui_send(struct map_session_data *sd, enum zc_ui_types ui_type)
{
+ nullpo_retv(sd);
+
#if PACKETVER >= 20150128
struct PACKET_ZC_OPEN_UI p;
-#if PACKETVER_RE_NUM >= 20180307 || PACKETVER_MAIN_NUM >= 20180404 || PACKETVER_ZERO_NUM >= 20180411
- int claimed = 0;
-#endif
-
- nullpo_retv(sd);
p.PacketType = openUiType;
- switch (uiType) {
- case CZ_STYLIST_UI:
- p.UIType = ZC_STYLIST_UI;
-#if PACKETVER >= 20171122
- p.data = 0;
-#endif
- break;
- case CZ_MACRO_REGISTER_UI:
- p.UIType = ZC_CAPTCHA_UI;
+ p.UIType = ui_type;
+
+ switch (ui_type) {
+ case ZC_BANK_UI:
+ case ZC_STYLIST_UI:
+ case ZC_CAPTCHA_UI:
+ case ZC_MACRO_UI:
#if PACKETVER >= 20171122
p.data = 0;
#endif
break;
- case CZ_MACRO_DETECTOR_UI:
- p.UIType = ZC_MACRO_UI;
#if PACKETVER >= 20171122
+ case ZC_TIPBOX_UI:
+ case ZC_RENEWQUEST_UI:
p.data = 0;
-#endif
break;
- case CZ_ATTENDANCE_UI:
- {
+ case ZC_ATTENDANCE_UI:
+ if (battle_config.feature_enable_attendance_system == 0)
+ return;
+
if (clif->attendance_getendtime() < time(NULL)) {
#if PACKETVER >= 20180207
clif->msgtable_color(sd, MSG_ATTENDANCE_UNAVAILABLE, COLOR_RED);
#endif
return;
}
- if (battle_config.feature_enable_attendance_system != 1)
- return;
+
#if PACKETVER_RE_NUM >= 20180307 || PACKETVER_MAIN_NUM >= 20180404 || PACKETVER_ZERO_NUM >= 20180411
- if (clif->attendance_timediff(sd) != true)
+ int claimed = 0;
+
+ if (!clif->attendance_timediff(sd))
++claimed;
else if (sd->status.attendance_count >= VECTOR_LENGTH(clif->attendance_data))
sd->status.attendance_count = 0;
- p.UIType = ZC_ATTENDANCE_UI;
+
p.data = sd->status.attendance_count * 10 + claimed;
#else
ShowWarning("Attendance System available only for PACKETVER_RE_NUM >= 20180307 || PACKETVER_MAIN_NUM >= 20180404 || PACKETVER_ZERO_NUM >= 20180411.\n");
return;
#endif
break;
- }
+#endif
default:
- ShowWarning("clif_open_ui: Requested UI (%u) is not implemented yet.\n", uiType);
+ ShowWarning("clif_open_ui_send: Requested UI (%u) is not implemented yet.\n", ui_type);
return;
}
@@ -22814,6 +23251,37 @@ static void clif_open_ui(struct map_session_data *sd, enum cz_ui_types uiType)
#endif
}
+static void clif_open_ui(struct map_session_data *sd, enum cz_ui_types uiType)
+{
+ nullpo_retv(sd);
+
+ enum zc_ui_types send_ui_type;
+
+ switch (uiType) {
+#if PACKETVER >= 20150128
+ case CZ_STYLIST_UI:
+ send_ui_type = ZC_STYLIST_UI;
+ break;
+ case CZ_MACRO_REGISTER_UI:
+ send_ui_type = ZC_CAPTCHA_UI;
+ break;
+ case CZ_MACRO_DETECTOR_UI:
+ send_ui_type = ZC_MACRO_UI;
+ break;
+#endif
+#if PACKETVER >= 20171122
+ case CZ_ATTENDANCE_UI:
+ send_ui_type = ZC_ATTENDANCE_UI;
+ break;
+#endif
+ default:
+ ShowWarning("clif_open_ui: Requested UI (%u) is not implemented yet.\n", uiType);
+ return;
+ }
+
+ clif->open_ui_send(sd, send_ui_type);
+}
+
static void clif_parse_attendance_reward_request(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_attendance_reward_request(int fd, struct map_session_data *sd)
{
@@ -23232,7 +23700,8 @@ static void clif_parse_npc_expanded_barter_closed(int fd, struct map_session_dat
#if PACKETVER_MAIN_NUM >= 20191120 || PACKETVER_RE_NUM >= 20191106 || PACKETVER_ZERO_NUM >= 20191127
#define NEXT_EXPANDED_BARTER_ITEM(var, count) \
var = (struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub *)((char*)item + \
- sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub) + \
+ sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub) - \
+ sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub2) + \
count * sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub2))
#endif
@@ -23252,7 +23721,11 @@ static void clif_npc_expanded_barter_open(struct map_session_data *sd, struct np
packet->packetType = HEADER_ZC_NPC_EXPANDED_BARTER_OPEN;
struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub *item = &packet->items[0];
- for (int i = 0; i < shop_size && buf_left >= sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub); i++) {
+ // Workaround for fix Visual Studio bug (error C2233)
+ // Here should be sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub)
+ const int ptr_size = sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub) -
+ sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub2);
+ for (int i = 0; i < shop_size && buf_left >= ptr_size; i++) {
if (shop[i].nameid) {
struct item_data *id = itemdb->exists(shop[i].nameid);
if (id == NULL)
@@ -23265,7 +23738,7 @@ static void clif_npc_expanded_barter_open(struct map_session_data *sd, struct np
item->index = i;
item->zeny = shop[i].value;
item->currency_count = 0;
- buf_left -= sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub);
+ buf_left -= ptr_size;
items_count ++;
int count = shop[i].value2;
if (buf_left < sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub2) * count) {
@@ -23294,7 +23767,7 @@ static void clif_npc_expanded_barter_open(struct map_session_data *sd, struct np
packet->items_count = items_count;
packet->packetLength = sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN) +
- sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub) * items_count +
+ ptr_size * items_count +
sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub2) * currencies_count;
clif->send(packet, packet->packetLength, &sd->bl, SELF);
#endif
@@ -23607,12 +24080,15 @@ static void clif_parse_lapineDdukDdak_ack(int fd, struct map_session_data *sd) _
static void clif_parse_lapineDdukDdak_ack(int fd, struct map_session_data *sd)
{
#if PACKETVER >= 20160302
+ if (sd->state.lapine_ui == 0)
+ return;
+
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))
+ if (pc_cant_act_except_lapine(sd))
return;
if (pc->search_inventory(sd, it->nameid) == INDEX_NOT_FOUND)
return;
@@ -23673,6 +24149,55 @@ static void clif_parse_lapineDdukDdak_close(int fd, struct map_session_data *sd)
#endif // PACKETVER >= 20160504
}
+static bool clif_lapineUpgrade_open(struct map_session_data *sd, int item_id)
+{
+#if PACKETVER_MAIN_NUM >= 20170726 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO)
+ nullpo_retr(false, sd);
+ nullpo_retr(false, itemdb->exists(item_id));
+ struct PACKET_ZC_LAPINEUPGRADE_OPEN p;
+
+ p.packetType = HEADER_ZC_LAPINEUPGRADE_OPEN;
+ p.itemId = item_id;
+ clif->send(&p, sizeof(p), &sd->bl, SELF);
+
+ return true;
+#else
+ return false;
+#endif // PACKETVER_MAIN_NUM >= 20170726 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO)
+}
+
+static void clif_parse_lapineUpgrade_close(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
+static void clif_parse_lapineUpgrade_close(int fd, struct map_session_data *sd)
+{
+#if PACKETVER_MAIN_NUM >= 20170111 || PACKETVER_RE_NUM >= 20170111 || defined(PACKETVER_ZERO)
+#endif // PACKETVER_MAIN_NUM >= 20170111 || PACKETVER_RE_NUM >= 20170111 || defined(PACKETVER_ZERO)
+}
+
+static void clif_parse_lapineUpgrade_makeItem(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
+static void clif_parse_lapineUpgrade_makeItem(int fd, struct map_session_data *sd)
+{
+#if PACKETVER_MAIN_NUM >= 20170111 || PACKETVER_RE_NUM >= 20170111 || defined(PACKETVER_ZERO)
+ ShowError("Lapin upgrade not implimented yet");
+ clif->lapineUpgrade_result(sd, LAPINE_UPGRADE_FAILED);
+#endif // PACKETVER_MAIN_NUM >= 20170111 || PACKETVER_RE_NUM >= 20170111 || defined(PACKETVER_ZERO)
+}
+
+static bool clif_lapineUpgrade_result(struct map_session_data *sd, enum lapineUpgrade_result result)
+{
+#if PACKETVER_MAIN_NUM >= 20170726 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO)
+ nullpo_retr(false, sd);
+ struct PACKET_ZC_LAPINEUPGRADE_RESULT p;
+
+ p.packetType = HEADER_ZC_LAPINEUPGRADE_RESULT;
+ p.result = result;
+ clif->send(&p, sizeof(p), &sd->bl, SELF);
+
+ return true;
+#else
+ return false;
+#endif // PACKETVER_MAIN_NUM >= 20170726 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO)
+}
+
/*==========================================
* Main client packet processing function
*------------------------------------------*/
@@ -23951,7 +24476,7 @@ static int do_init_clif(bool minimal)
timer->add_func_list(clif->clearunit_delayed_sub, "clif_clearunit_delayed_sub");
timer->add_func_list(clif->delayquit, "clif_delayquit");
- clif->delay_clearunit_ers = ers_new(sizeof(struct block_list),"clif.c::delay_clearunit_ers",ERS_OPT_CLEAR);
+ clif->delay_clearunit_ers = ers_new(sizeof(struct mob_data), "clif.c::delay_clearunit_ers", ERS_OPT_CLEAR);
clif->delayed_damage_ers = ers_new(sizeof(struct cdelayed_damage),"clif.c::delayed_damage_ers",ERS_OPT_CLEAR);
#if PACKETVER_MAIN_NUM >= 20190403 || PACKETVER_RE_NUM >= 20190320
@@ -24173,6 +24698,8 @@ void clif_defaults(void)
clif->mobname_normal_ack = clif_mobname_normal_ack;
clif->chatname_ack = clif_chatname_ack;
clif->elemname_ack = clif_elemname_ack;
+ clif->skillname_ack = clif_skillname_ack;
+ clif->itemname_ack = clif_itemname_ack;
clif->unknownname_ack = clif_unknownname_ack;
clif->monster_hp_bar = clif_monster_hp_bar;
clif->hpmeter = clif_hpmeter;
@@ -24865,6 +25392,7 @@ void clif_defaults(void)
clif->attendance_timediff = clif_attendance_timediff;
clif->attendance_getendtime = clif_attendance_getendtime;
clif->pOpenUIRequest = clif_parse_open_ui_request;
+ clif->open_ui_send = clif_open_ui_send;
clif->open_ui = clif_open_ui;
clif->pAttendanceRewardRequest = clif_parse_attendance_reward_request;
clif->ui_action = clif_ui_action;
@@ -24916,5 +25444,9 @@ void clif_defaults(void)
clif->lapineDdukDdak_result = clif_lapineDdukDdak_result;
clif->plapineDdukDdak_ack = clif_parse_lapineDdukDdak_ack;
clif->plapineDdukDdak_close = clif_parse_lapineDdukDdak_close;
+ clif->lapineUpgrade_open = clif_lapineUpgrade_open;
+ clif->lapineUpgrade_result = clif_lapineUpgrade_result;
+ clif->pLapineUpgrade_close = clif_parse_lapineUpgrade_close;
+ clif->pLapineUpgrade_makeItem = clif_parse_lapineUpgrade_makeItem;
clif->pReqGearOff = clif_parse_reqGearOff;
}
diff --git a/src/map/clif.h b/src/map/clif.h
index 25ac65af5..ee76e62e8 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -146,6 +146,8 @@ typedef enum broadcast_flags {
BC_WOE = 0x20,
BC_COLOR_MASK = 0x30, // BC_YELLOW|BC_BLUE|BC_WOE
+ BC_MEGAPHONE = 0x40,
+
BC_DEFAULT = BC_ALL|BC_PC|BC_YELLOW
} broadcast_flags;
@@ -733,6 +735,11 @@ enum lapineddukddak_result {
LAPINEDDKUKDDAK_INVALID_ITEM = 7,
};
+enum lapineUpgrade_result {
+ LAPINE_UPGRADE_SUCCESS = 0,
+ LAPINE_UPGRADE_FAILED = 1
+};
+
enum removeGear_flag {
REMOVE_MOUNT_0 = 0, // unused
REMOVE_MOUNT_DRAGON = 1,
@@ -743,6 +750,14 @@ enum removeGear_flag {
REMOVE_MOUNT_CART = 6,
};
+/** Info types for PACKET_ZC_PERSONAL_INFOMATION (0x097b). **/
+enum detail_exp_info_type {
+ PC_EXP_INFO = 0x0, //!< PCBang internet cafe modifiers. (http://pcbang.gnjoy.com/) (Unused.)
+ PREMIUM_EXP_INFO = 0x1, //!< Premium user modifiers. Values aren't displayed in 20161207+ clients.
+ SERVER_EXP_INFO = 0x2, //!< Server rates.
+ TPLUS_EXP_INFO = 0x3, //!< Unknown. Values are displayed as "TPLUS" in kRO. (Unused.)
+};
+
/**
* Clif.c Interface
**/
@@ -952,6 +967,8 @@ struct clif_interface {
void (*mobname_normal_ack) (int fd, struct block_list *bl);
void (*chatname_ack) (int fd, struct block_list *bl);
void (*elemname_ack) (int fd, struct block_list *bl);
+ void (*skillname_ack) (int fd, struct block_list *bl);
+ void (*itemname_ack) (int fd, struct block_list *bl);
void (*unknownname_ack) (int fd, struct block_list *bl);
void (*monster_hp_bar) ( struct mob_data* md, struct map_session_data *sd );
int (*hpmeter) (struct map_session_data *sd);
@@ -1641,6 +1658,7 @@ struct clif_interface {
bool (*attendance_timediff) (struct map_session_data *sd);
time_t (*attendance_getendtime) (void);
void (*pOpenUIRequest) (int fd, struct map_session_data *sd);
+ void (*open_ui_send) (struct map_session_data *sd, enum zc_ui_types ui_type);
void (*open_ui) (struct map_session_data *sd, enum cz_ui_types uiType);
void (*pAttendanceRewardRequest) (int fd, struct map_session_data *sd);
void (*ui_action) (struct map_session_data *sd, int32 UIType, int32 data);
@@ -1688,6 +1706,10 @@ struct clif_interface {
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);
+ bool (*lapineUpgrade_open) (struct map_session_data *sd, int item_id);
+ bool (*lapineUpgrade_result) (struct map_session_data *sd, enum lapineUpgrade_result result);
+ void (*pLapineUpgrade_close) (int fd, struct map_session_data *sd);
+ void (*pLapineUpgrade_makeItem) (int fd, struct map_session_data *sd);
void (*pReqGearOff) (int fd, struct map_session_data *sd);
};
diff --git a/src/map/elemental.c b/src/map/elemental.c
index 1c1d98634..f176bb9e2 100644
--- a/src/map/elemental.c
+++ b/src/map/elemental.c
@@ -788,8 +788,8 @@ static int elemental_ai_sub_timer(struct elemental_data *ed, struct map_session_
return 0; //Already walking to him
if( DIFF_TICK(tick, ed->ud.canmove_tick) < 0 )
return 0; //Can't move yet.
- if( map->search_freecell(&ed->bl, sd->bl.m, &x, &y, MIN_ELEDISTANCE, MIN_ELEDISTANCE, 1)
- && unit->walktoxy(&ed->bl, x, y, 0) )
+ if (map->search_freecell(&ed->bl, sd->bl.m, &x, &y, MIN_ELEDISTANCE, MIN_ELEDISTANCE, 1) != 0
+ && unit->walk_toxy(&ed->bl, x, y, 0) == 0)
return 0;
}
diff --git a/src/map/guild.c b/src/map/guild.c
index f344878e1..a78ea169c 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -887,6 +887,12 @@ static void guild_member_joined(struct map_session_data *sd)
channel->join(g->channel, sd, "", true);
}
+ for (int j = 0; j < g->instances; j++) {
+ if (g->instance[j] >= 0) {
+ clif->instance_join(sd->fd, g->instance[j]);
+ break;
+ }
+ }
}
}
@@ -940,6 +946,13 @@ static int guild_member_added(int guild_id, int account_id, int char_id, int fla
channel->join(g->channel, sd, "", true);
}
+ for (int i = 0; i < g->instances; i++) {
+ if (g->instance[i] >= 0) {
+ clif->instance_join(sd->fd, g->instance[i]);
+ break;
+ }
+ }
+
return 0;
}
@@ -1519,7 +1532,7 @@ static void guild_guildaura_refresh(struct map_session_data *sd, uint16 skill_id
if( !skill_lv )
return;
if (sd->sc.data[type] && (group = skill->id2group(sd->sc.data[type]->val4)) != NULL) {
- skill->del_unitgroup(group,ALC_MARK);
+ skill->del_unitgroup(group);
status_change_end(&sd->bl,type,INVALID_TIMER);
}
group = skill->unitsetting(&sd->bl,skill_id,skill_lv,sd->bl.x,sd->bl.y,0);
@@ -2069,7 +2082,7 @@ static int guild_break(struct map_session_data *sd, const char *name)
}
}
for(i = 0; i < count; i++) { // FIXME: Why is this not done in the above loop?
- skill->del_unitgroup(groups[i],ALC_MARK);
+ skill->del_unitgroup(groups[i]);
}
}
diff --git a/src/map/instance.c b/src/map/instance.c
index 1104b7e88..d2c0a229c 100644
--- a/src/map/instance.c
+++ b/src/map/instance.c
@@ -68,7 +68,7 @@ static bool instance_is_valid(int instance_id)
/*--------------------------------------
* name : instance name
* Return value could be
- * -4 = already exists | -3 = no free instances | -2 = owner not found | -1 = invalid type
+ * -4 = already exists | -2 = owner not found | -1 = invalid type
* On success return instance_id
*--------------------------------------*/
static int instance_create(int owner_id, const char *name, enum instance_owner_type type)
@@ -734,7 +734,7 @@ static void instance_force_destroy(struct map_session_data *sd)
switch (instance->list[i].owner_type) {
case IOT_CHAR:
{
- if (instance->list[i].owner_id != sd->status.char_id)
+ if (instance->list[i].owner_id != sd->status.account_id)
continue;
break;
}
diff --git a/src/map/intif.c b/src/map/intif.c
index a420b7204..276b40780 100644
--- a/src/map/intif.c
+++ b/src/map/intif.c
@@ -218,13 +218,13 @@ static int intif_saveregistry(struct map_session_data *sd)
plen += 1;
if( p->value ) {
- len = strlen(p->value)+1;
+ len = strlen(p->value);
- WFIFOB(inter_fd, plen) = (unsigned char)len;/* won't be higher; the column size is 254 */
+ WFIFOB(inter_fd, plen) = (unsigned char)len; // Won't be higher; the column size is 255.
plen += 1;
- safestrncpy(WFIFOP(inter_fd,plen), p->value, len);
- plen += len;
+ safestrncpy(WFIFOP(inter_fd, plen), p->value, len + 1);
+ plen += len + 1;
} else {
script->reg_destroy_single(sd,key.i64,&p->flag);
}
@@ -1025,7 +1025,7 @@ static void intif_parse_Registers(int fd)
* { keyLength(B), key(<keyLength>), index(L), valLength(B), val(<valLength>) }
**/
if (type) {
- char sval[254];
+ char sval[SCRIPT_STRING_VAR_LENGTH + 1];
for (i = 0; i < max; i++) {
int len = RFIFOB(fd, cursor);
safestrncpy(key, RFIFOP(fd, cursor + 1), min((int)sizeof(key), len));
@@ -1035,8 +1035,8 @@ static void intif_parse_Registers(int fd)
cursor += 4;
len = RFIFOB(fd, cursor);
- safestrncpy(sval, RFIFOP(fd, cursor + 1), min((int)sizeof(sval), len));
- cursor += len + 1;
+ safestrncpy(sval, RFIFOP(fd, cursor + 1), min((int)sizeof(sval), len + 1));
+ cursor += len + 2;
script->set_reg(NULL,sd,reference_uid(script->add_variable(key), index), key, sval, NULL);
}
diff --git a/src/map/itemdb.h b/src/map/itemdb.h
index 5f0790b10..39f0e7945 100644
--- a/src/map/itemdb.h
+++ b/src/map/itemdb.h
@@ -152,6 +152,7 @@ enum item_itemid {
ITEMID_BUBBLE_GUM = 12210,
ITEMID_GIANT_FLY_WING = 12212,
ITEMID_NEURALIZER = 12213,
+ ITEMID_MEGAPHONE = 12221,
ITEMID_M_CENTER_POTION = 12241,
ITEMID_M_AWAKENING_POTION = 12242,
ITEMID_M_BERSERK_POTION = 12243,
@@ -606,7 +607,6 @@ struct item_data {
#define itemid_isgemstone(n) ((n) >= ITEMID_YELLOW_GEMSTONE && (n) <= ITEMID_BLUE_GEMSTONE)
#define itemdb_is_GNbomb(n) ((n) >= ITEMID_APPLE_BOMB && (n) <= ITEMID_VERY_HARD_LUMP)
#define itemdb_is_GNthrowable(n) ((n) >= ITEMID_MYSTERIOUS_POWDER && (n) <= ITEMID_BLACK_THING_TO_THROW)
-#define itemid_is_pilebunker(n) ((n) == ITEMID_PILEBUNCKER || (n) == ITEMID_PILEBUNCKER_P || (n) == ITEMID_PILEBUNCKER_S || (n) == ITEMID_PILEBUNCKER_T)
#define itemdb_is_shadowequip(n) ((n) & (EQP_SHADOW_ARMOR|EQP_SHADOW_WEAPON|EQP_SHADOW_SHIELD|EQP_SHADOW_SHOES|EQP_SHADOW_ACC_R|EQP_SHADOW_ACC_L))
#define itemdb_is_costumeequip(n) ((n) & (EQP_COSTUME_HEAD_TOP|EQP_COSTUME_HEAD_MID|EQP_COSTUME_HEAD_LOW|EQP_COSTUME_GARMENT))
diff --git a/src/map/mail.c b/src/map/mail.c
index a1176e8fc..b862900c7 100644
--- a/src/map/mail.c
+++ b/src/map/mail.c
@@ -81,9 +81,9 @@ static int mail_removezeny(struct map_session_data *sd, short flag)
static unsigned char mail_setitem(struct map_session_data *sd, int idx, int amount)
{
-
nullpo_retr(1, sd);
- if( pc_istrading(sd) )
+
+ if (pc_istrading_except_npc(sd) || (sd->npc_id != 0 && sd->state.using_megaphone == 0))
return 1;
if( idx == 0 ) { // Zeny Transfer
diff --git a/src/map/map.c b/src/map/map.c
index 70623ae22..c88118b43 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -261,11 +261,13 @@ static int map_addblock(struct block_list *bl)
pos = x/BLOCK_SIZE+(y/BLOCK_SIZE)*map->list[m].bxs;
if (bl->type == BL_MOB) {
+ Assert_ret(map->list[m].block_mob != NULL);
bl->next = map->list[m].block_mob[pos];
bl->prev = &map->bl_head;
if (bl->next) bl->next->prev = bl;
map->list[m].block_mob[pos] = bl;
} else {
+ Assert_ret(map->list[m].block != NULL);
bl->next = map->list[m].block[pos];
bl->prev = &map->bl_head;
if (bl->next) bl->next->prev = bl;
@@ -307,8 +309,10 @@ static int map_delblock(struct block_list *bl)
if (bl->prev == &map->bl_head) {
//Since the head of the list, update the block_list map of []
if (bl->type == BL_MOB) {
+ Assert_ret(map->list[bl->m].block_mob != NULL);
map->list[bl->m].block_mob[pos] = bl->next;
} else {
+ Assert_ret(map->list[bl->m].block != NULL);
map->list[bl->m].block[pos] = bl->next;
}
} else {
@@ -450,6 +454,12 @@ static int map_count_oncell(int16 m, int16 x, int16 y, int type, int flag)
struct block_list *bl;
int count = 0;
+ Assert_ret(m >= -1);
+ if (m < 0)
+ return 0;
+ Assert_ret(m < map->count);
+ Assert_ret(map->list[m].block != NULL);
+
if (x < 0 || y < 0 || (x >= map->list[m].xs) || (y >= map->list[m].ys))
return 0;
@@ -512,6 +522,12 @@ static struct skill_unit *map_find_skill_unit_oncell(struct block_list *target,
nullpo_retr(NULL, target);
m = target->m;
+ Assert_ret(m >= -1);
+ if (m < 0)
+ return 0;
+ Assert_ret(m < map->count);
+ Assert_ret(map->list[m].block != NULL);
+
if (x < 0 || y < 0 || (x >= map->list[m].xs) || (y >= map->list[m].ys))
return NULL;
@@ -586,8 +602,11 @@ static int map_vforeachinmap(int (*func)(struct block_list*, va_list), int16 m,
struct block_list *bl;
int blockcount = map->bl_list_count;
+ Assert_ret(m >= -1);
if (m < 0)
return 0;
+ Assert_ret(m < map->count);
+ Assert_ret(map->list[m].block != NULL);
bsize = map->list[m].bxs * map->list[m].bys;
for (i = 0; i < bsize; i++) {
@@ -719,24 +738,28 @@ static int bl_getall_area(int type, int m, int x0, int y0, int x1, int y1, int (
struct block_list *bl;
int found = 0;
+ Assert_ret(m >= -1);
if (m < 0)
return 0;
+ Assert_ret(m < map->count);
+ const struct map_data *const listm = &map->list[m];
+ Assert_ret(listm->xs > 0 && listm->ys > 0);
+ Assert_ret(listm->block != NULL);
+
+ // Limit search area to map size
+ x0 = min(max(x0, 0), map->list[m].xs - 1);
+ y0 = min(max(y0, 0), map->list[m].ys - 1);
+ x1 = min(max(x1, 0), map->list[m].xs - 1);
+ y1 = min(max(y1, 0), map->list[m].ys - 1);
if (x1 < x0) swap(x0, x1);
if (y1 < y0) swap(y0, y1);
- // Limit search area to map size
- x0 = max(x0, 0);
- y0 = max(y0, 0);
- x1 = min(x1, map->list[m].xs - 1);
- y1 = min(y1, map->list[m].ys - 1);
-
{
const int x0b = x0 / BLOCK_SIZE;
const int x1b = x1 / BLOCK_SIZE;
const int y0b = y0 / BLOCK_SIZE;
const int y1b = y1 / BLOCK_SIZE;
- const struct map_data *const listm = &map->list[m];
const int bxs0 = listm->bxs;
// duplication for better performance
@@ -1670,7 +1693,7 @@ static int map_search_freecell(struct block_list *src, int16 m, int16 *x, int16
*------------------------------------------*/
static bool map_closest_freecell(int16 m, const struct block_list *bl, int16 *x, int16 *y, int type, int flag)
{
- uint8 dir = 6;
+ enum unit_dir dir = UNIT_DIR_EAST;
int16 tx;
int16 ty;
int costrange = 10;
@@ -1689,7 +1712,7 @@ static bool map_closest_freecell(int16 m, const struct block_list *bl, int16 *x,
short dy = diry[dir];
//Linear search
- if(dir%2 == 0 && costrange%MOVE_COST == 0) {
+ if (!unit_is_diagonal_dir(dir) && (costrange % MOVE_COST) == 0) {
tx = *x+dx*(costrange/MOVE_COST);
ty = *y+dy*(costrange/MOVE_COST);
if (!map->count_oncell(m, tx, ty, type, flag) && map->getcell(m, bl, tx, ty, CELL_CHKPASS)) {
@@ -1699,7 +1722,7 @@ static bool map_closest_freecell(int16 m, const struct block_list *bl, int16 *x,
}
}
//Full diagonal search
- else if(dir%2 == 1 && costrange%MOVE_DIAGONAL_COST == 0) {
+ else if (unit_is_diagonal_dir(dir) && (costrange % MOVE_DIAGONAL_COST) == 0) {
tx = *x+dx*(costrange/MOVE_DIAGONAL_COST);
ty = *y+dy*(costrange/MOVE_DIAGONAL_COST);
if (!map->count_oncell(m, tx, ty, type, flag) && map->getcell(m, bl, tx, ty, CELL_CHKPASS)) {
@@ -1709,16 +1732,24 @@ static bool map_closest_freecell(int16 m, const struct block_list *bl, int16 *x,
}
}
//One cell diagonal, rest linear (TODO: Find a better algorithm for this)
- else if(dir%2 == 1 && costrange%MOVE_COST == 4) {
- tx = *x+dx*((dir%4==3)?(costrange/MOVE_COST):1);
- ty = *y+dy*((dir%4==1)?(costrange/MOVE_COST):1);
+ else if (unit_is_diagonal_dir(dir) && (costrange % MOVE_COST) == 4) {
+ tx = *x + dx;
+ ty = *y + dy;
+ if (unit_is_dir_or_opposite(dir, UNIT_DIR_SOUTHWEST))
+ tx = tx * costrange / MOVE_COST;
+ if (unit_is_dir_or_opposite(dir, UNIT_DIR_NORTHWEST))
+ ty = ty * costrange / MOVE_COST;
if (!map->count_oncell(m, tx, ty, type, flag) && map->getcell(m, bl, tx, ty, CELL_CHKPASS)) {
*x = tx;
*y = ty;
return true;
}
- tx = *x+dx*((dir%4==1)?(costrange/MOVE_COST):1);
- ty = *y+dy*((dir%4==3)?(costrange/MOVE_COST):1);
+ tx = *x + dx;
+ ty = *y + dy;
+ if (unit_is_dir_or_opposite(dir, UNIT_DIR_NORTHWEST))
+ tx = tx * costrange / MOVE_COST;
+ if (unit_is_dir_or_opposite(dir, UNIT_DIR_SOUTHWEST))
+ ty = ty * costrange / MOVE_COST;
if (!map->count_oncell(m, tx, ty, type, flag) && map->getcell(m, bl, tx, ty, CELL_CHKPASS)) {
*x = tx;
*y = ty;
@@ -1727,17 +1758,17 @@ static bool map_closest_freecell(int16 m, const struct block_list *bl, int16 *x,
}
//Get next direction
- if (dir == 5) {
+ if (dir == UNIT_DIR_SOUTHEAST) {
//Diagonal search complete, repeat with higher cost range
if(costrange == 14) costrange += 6;
else if(costrange == 28 || costrange >= 38) costrange += 2;
else costrange += 4;
- dir = 6;
- } else if (dir == 4) {
+ dir = UNIT_DIR_EAST;
+ } else if (dir == UNIT_DIR_SOUTH) {
//Linear search complete, switch to diagonal directions
- dir = 7;
+ dir = UNIT_DIR_NORTHEAST;
} else {
- dir = (dir+2)%8;
+ dir = unit_get_ccw90_dir(dir);
}
}
@@ -1880,6 +1911,7 @@ static void map_reqnickdb(struct map_session_data *sd, int charid)
}
// not in cache, request it
CREATE(req, struct charid_request, 1);
+ req->charid = sd->status.char_id;
req->next = p->requests;
p->requests = req;
chrif->searchcharid(charid);
@@ -2845,63 +2877,70 @@ static int map_mapname2ipport(unsigned short name, uint32 *ip, uint16 *port)
return 0;
}
-/*==========================================
+/**
* Checks if both dirs point in the same direction.
- *------------------------------------------*/
-static int map_check_dir(int s_dir, int t_dir)
+ * @param s_dir: direction source is facing
+ * @param t_dir: direction target is facing
+ * @return 0: success(both face the same direction), 1: failure
+ **/
+static int map_check_dir(enum unit_dir s_dir, enum unit_dir t_dir)
{
- if(s_dir == t_dir)
+ if (s_dir == t_dir || ((t_dir + UNIT_DIR_MAX - 1) % UNIT_DIR_MAX) == s_dir
+ || ((t_dir + UNIT_DIR_MAX + 1) % UNIT_DIR_MAX) == s_dir)
return 0;
- switch(s_dir) {
- case 0: if(t_dir == 7 || t_dir == 1 || t_dir == 0) return 0; break;
- case 1: if(t_dir == 0 || t_dir == 2 || t_dir == 1) return 0; break;
- case 2: if(t_dir == 1 || t_dir == 3 || t_dir == 2) return 0; break;
- case 3: if(t_dir == 2 || t_dir == 4 || t_dir == 3) return 0; break;
- case 4: if(t_dir == 3 || t_dir == 5 || t_dir == 4) return 0; break;
- case 5: if(t_dir == 4 || t_dir == 6 || t_dir == 5) return 0; break;
- case 6: if(t_dir == 5 || t_dir == 7 || t_dir == 6) return 0; break;
- case 7: if(t_dir == 6 || t_dir == 0 || t_dir == 7) return 0; break;
- }
return 1;
}
-/*==========================================
+/**
* Returns the direction of the given cell, relative to 'src'
- *------------------------------------------*/
-static uint8 map_calc_dir(struct block_list *src, int16 x, int16 y)
+ * @param src: object to put in relation between coordinates
+ * @param x: x-coordinate of cell
+ * @param y: y-coordinate of cell
+ * @return the direction of the given cell, relative to 'src'
+ **/
+static enum unit_dir map_calc_dir(const struct block_list *src, int16 x, int16 y)
{
- uint8 dir = 0;
- int dx, dy;
-
- nullpo_ret(src);
+ nullpo_retr(UNIT_DIR_NORTH, src);
+ enum unit_dir dir = UNIT_DIR_NORTH;
- dx = x-src->x;
- dy = y-src->y;
+ int dx = x - src->x;
+ int dy = y - src->y;
if (dx == 0 && dy == 0) {
// both are standing on the same spot.
// aegis-style, makes knockback default to the left.
// athena-style, makes knockback default to behind 'src'.
- dir = (battle_config.knockback_left ? 6 : unit->getdir(src));
- } else if (dx >= 0 && dy >=0) {
- // upper-right
- if( dx*2 < dy || dx == 0 ) dir = 0; // up
- else if( dx > dy*2+1 || dy == 0 ) dir = 6; // right
- else dir = 7; // up-right
+ if (battle_config.knockback_left != 0)
+ dir = UNIT_DIR_EAST;
+ else
+ dir = unit->getdir(src);
+ } else if (dx >= 0 && dy >= 0) {
+ if (dx * 2 < dy || dx == 0)
+ dir = UNIT_DIR_NORTH;
+ else if (dx > dy * 2 + 1 || dy == 0)
+ dir = UNIT_DIR_EAST;
+ else
+ dir = UNIT_DIR_NORTHEAST;
} else if (dx >= 0 && dy <= 0) {
- // lower-right
- if( dx*2 < -dy || dx == 0 ) dir = 4; // down
- else if( dx > -dy*2+1 || dy == 0 ) dir = 6; // right
- else dir = 5; // down-right
+ if (dx * 2 < -dy || dx == 0)
+ dir = UNIT_DIR_SOUTH;
+ else if (dx > -dy * 2 + 1 || dy == 0)
+ dir = UNIT_DIR_EAST;
+ else
+ dir = UNIT_DIR_SOUTHEAST;
} else if (dx <= 0 && dy <= 0) {
- // lower-left
- if( dx*2 > dy || dx == 0 ) dir = 4; // down
- else if( dx < dy*2-1 || dy == 0 ) dir = 2; // left
- else dir = 3; // down-left
+ if (dx * 2 > dy || dx == 0 )
+ dir = UNIT_DIR_SOUTH;
+ else if (dx < dy * 2 + 1 || dy == 0)
+ dir = UNIT_DIR_WEST;
+ else
+ dir = UNIT_DIR_SOUTHWEST;
} else {
- // upper-left
- if( -dx*2 < dy || dx == 0 ) dir = 0; // up
- else if( -dx > dy*2+1 || dy == 0) dir = 2; // left
- else dir = 1; // up-left
+ if (-dx * 2 < dy || dx == 0 )
+ dir = UNIT_DIR_NORTH;
+ else if (-dx > dy * 2 + 1 || dy == 0)
+ dir = UNIT_DIR_WEST;
+ else
+ dir = UNIT_DIR_NORTHWEST;
}
return dir;
}
@@ -2929,11 +2968,11 @@ static int map_random_dir(struct block_list *bl, int16 *x, int16 *y)
if (dist < 1) dist =1;
do {
- int j = 1 + 2*(rnd()%4); //Pick a random diagonal direction
+ enum unit_dir dir = unit_get_rnd_diagonal_dir();
short segment = 1+(rnd()%dist); //Pick a random interval from the whole vector in that direction
- xi = bl->x + segment*dirx[j];
+ xi = bl->x + segment * dirx[dir];
segment = (short)sqrt((float)(dist2 - segment*segment)); //The complement of the previously picked segment
- yi = bl->y + segment*diry[j];
+ yi = bl->y + segment * diry[dir];
} while ((map->getcell(bl->m, bl, xi, yi, CELL_CHKNOPASS) || !path->search(NULL, bl, bl->m, bl->x, bl->y, xi, yi, 1, CELL_CHKNOREACH))
&& (++i)<100);
@@ -3062,6 +3101,8 @@ static int map_getcellp(struct map_data *m, const struct block_list *bl, int16 x
return (cell.icewall);
case CELL_CHKNOICEWALL:
return (cell.noicewall);
+ case CELL_CHKNOSKILL:
+ return (cell.noskill);
// special checks
case CELL_CHKPASS:
@@ -3126,6 +3167,7 @@ static void map_setcell(int16 m, int16 x, int16 y, cell_t cell, bool flag)
case CELL_NOCHAT: map->list[m].cell[j].nochat = flag; break;
case CELL_ICEWALL: map->list[m].cell[j].icewall = flag; break;
case CELL_NOICEWALL: map->list[m].cell[j].noicewall = flag; break;
+ case CELL_NOSKILL: map->list[m].cell[j].noskill = flag; break;
default:
ShowWarning("map_setcell: invalid cell type '%d'\n", (int)cell);
@@ -4441,7 +4483,6 @@ static bool inter_config_read_connection(const char *filename, const struct conf
static bool inter_config_read_database_names(const char *filename, const struct config_t *config, bool imported)
{
const struct config_setting_t *setting = NULL;
- bool retval = true;
nullpo_retr(false, filename);
nullpo_retr(false, config);
@@ -4459,16 +4500,14 @@ static bool inter_config_read_database_names(const char *filename, const struct
libconfig->setting_lookup_mutable_string(setting, "npc_barter_data_db", map->npc_barter_data_db, sizeof(map->npc_barter_data_db));
libconfig->setting_lookup_mutable_string(setting, "npc_expanded_barter_data_db", map->npc_expanded_barter_data_db, sizeof(map->npc_expanded_barter_data_db));
- if (!mapreg->config_read(filename, setting, imported))
- retval = false;
-
if ((setting = libconfig->lookup(config, "inter_configuration/database_names/registry")) == NULL) {
if (imported)
- return retval;
+ return true;
ShowError("inter_config_read: inter_configuration/database_names/registry was not found in %s!\n", filename);
return false;
}
- return retval;
+
+ return mapreg->config_read_registry(filename, setting, imported);
}
/*=======================================
@@ -5250,7 +5289,7 @@ static bool map_zone_mf_cache(int m, char *flag, char *params)
}
}
- if( modifier[0] == '\0' || !( skill_id = skill->name2id(skill_name) ) || !skill->get_unit_id( skill->name2id(skill_name), 0) || atoi(modifier) < 1 || atoi(modifier) > USHRT_MAX ) {
+ if (modifier[0] == '\0' || (skill_id = skill->name2id(skill_name)) == 0 || skill->get_unit_id(skill->name2id(skill_name), 1, 0) == 0 || atoi(modifier) < 1 || atoi(modifier) > USHRT_MAX) {
;/* we don't mind it, the server will take care of it next. */
} else {
int idx = map->list[m].unit_count;
@@ -5430,6 +5469,19 @@ static bool map_zone_mf_cache(int m, char *flag, char *params)
map_zone_mf_cache_add(m, rflag);
}
}
+ } else if (strcmpi(flag, "nopet") == 0) {
+ if (state == 0) {
+ if (map->list[m].flag.nopet != 0) {
+ sprintf(rflag, "nopet\t%d", map->list[m].flag.nopet);
+ map_zone_mf_cache_add(m, rflag);
+ }
+ }
+ if (sscanf(params, "%d", &state) == 1) {
+ if (state != map->list[m].flag.nopet) {
+ sprintf(rflag, "nopet\t%d", state);
+ map_zone_mf_cache_add(m, rflag);
+ }
+ }
}
return false;
@@ -6032,11 +6084,15 @@ static bool map_add_questinfo(int m, struct npc_data *nd)
nullpo_retr(false, nd);
Assert_retr(false, m >= 0 && m < map->count);
- if (&VECTOR_LAST(map->list[m].qi_list) == nd)
+ int i;
+ ARR_FIND(0, VECTOR_LENGTH(map->list[m].qi_list), i, VECTOR_INDEX(map->list[m].qi_list, i) == nd);
+
+ if (i < VECTOR_LENGTH(map->list[m].qi_list)) {
return false;
+ }
VECTOR_ENSURE(map->list[m].qi_list, 1, 1);
- VECTOR_PUSH(map->list[m].qi_list, *nd);
+ VECTOR_PUSH(map->list[m].qi_list, nd);
return true;
}
@@ -6047,7 +6103,7 @@ static bool map_remove_questinfo(int m, struct npc_data *nd)
Assert_retr(false, m >= 0 && m < map->count);
int i;
- ARR_FIND(0, VECTOR_LENGTH(map->list[m].qi_list), i, &VECTOR_INDEX(map->list[m].qi_list, i) == nd);
+ ARR_FIND(0, VECTOR_LENGTH(map->list[m].qi_list), i, VECTOR_INDEX(map->list[m].qi_list, i) == nd);
if (i != VECTOR_LENGTH(map->list[m].qi_list)) {
VECTOR_ERASE(map->list[m].qi_list, i);
return true;
@@ -6649,6 +6705,8 @@ int do_init(int argc, char *argv[])
atcommand->msg_read(map->MSG_CONF_NAME, false);
map->inter_config_read(map->INTER_CONF_NAME, false);
logs->config_read(map->LOG_CONF_NAME, false);
+ } else {
+ battle->config_read(map->BATTLE_CONF_FILENAME, false);
}
script->config_read(map->SCRIPT_CONF_NAME, false);
@@ -6699,8 +6757,8 @@ int do_init(int argc, char *argv[])
timer->add_func_list(map->removemobs_timer, "map_removemobs_timer");
timer->add_interval(timer->gettick()+1000, map->freeblock_timer, 0, 0, 60*1000);
- HPM->event(HPET_INIT);
}
+ HPM->event(HPET_INIT);
atcommand->init(minimal);
battle->init(minimal);
@@ -6747,8 +6805,12 @@ int do_init(int argc, char *argv[])
exit(EXIT_SUCCESS);
}
- if( minimal ) {
+ if (minimal) {
HPM->event(HPET_READY);
+ HPM->event(HPET_FINAL);
+ battle->final();
+ HPM_map_do_final();
+ HPM->event(HPET_POST_FINAL);
exit(EXIT_SUCCESS);
}
diff --git a/src/map/map.h b/src/map/map.h
index dbd9c0fba..e7c0cb50d 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -27,6 +27,7 @@
#include "common/db.h"
#include "common/mapindex.h"
#include "common/mmo.h"
+#include "map/unitdefines.h" // enum unit_dir
#include <stdio.h>
#include <stdarg.h>
@@ -328,6 +329,14 @@ enum bl_type {
enum npc_subtype { WARP, SHOP, SCRIPT, CASHSHOP, TOMB };
+/** optional flags for script labels, used by the label db */
+enum script_label_flags {
+ /** the label can be called from outside the local scope of the NPC */
+ LABEL_IS_EXTERN = 0x1,
+ /** the label is a public or private local NPC function */
+ LABEL_IS_USERFUNC = 0x2,
+};
+
/**
* Race type IDs.
*
@@ -587,6 +596,7 @@ typedef enum {
CELL_NOCHAT,
CELL_ICEWALL,
CELL_NOICEWALL,
+ CELL_NOSKILL,
} cell_t;
@@ -611,6 +621,7 @@ typedef enum {
CELL_CHKNOCHAT,
CELL_CHKICEWALL,
CELL_CHKNOICEWALL,
+ CELL_CHKNOSKILL,
} cell_chk;
@@ -629,7 +640,8 @@ struct mapcell {
novending : 1,
nochat : 1,
icewall : 1,
- noicewall : 1;
+ noicewall : 1,
+ noskill : 1;
#ifdef CELL_NOSTACK
int cell_bl; //Holds amount of bls in this cell.
@@ -787,6 +799,7 @@ struct map_data {
unsigned pairship_endable : 1;
unsigned nostorage : 2;
unsigned nogstorage : 2;
+ unsigned nopet : 1;
uint32 noviewid; ///< noviewid (bitmask - @see enum equip_pos)
} flag;
struct point save;
@@ -845,7 +858,7 @@ struct map_data {
} cell_buf;
/* questinfo entries list */
- VECTOR_DECL(struct npc_data) qi_list;
+ VECTOR_DECL(struct npc_data *) qi_list;
/* speeds up clif_updatestatus processing by causing hpmeter to run only when someone with the permission can view it */
unsigned short hpmeter_visible;
@@ -1216,8 +1229,8 @@ END_ZEROED_BLOCK;
// reload config file looking only for npcs
void (*reloadnpc) (bool clear);
- int (*check_dir) (int s_dir,int t_dir);
- uint8 (*calc_dir) (struct block_list *src,int16 x,int16 y);
+ int (*check_dir) (enum unit_dir s_dir, enum unit_dir t_dir);
+ enum unit_dir (*calc_dir) (const struct block_list *src, int16 x, int16 y);
int (*random_dir) (struct block_list *bl, short *x, short *y); // [Skotlex]
int (*cleanup_sub) (struct block_list *bl, va_list ap);
diff --git a/src/map/mapdefines.h b/src/map/mapdefines.h
index f5a8149d4..8a363e2d4 100644
--- a/src/map/mapdefines.h
+++ b/src/map/mapdefines.h
@@ -30,7 +30,15 @@
#define DAMAGELOG_SIZE 30
#define LOOTITEM_SIZE 10
#define MAX_MOBSKILL 50
+
+#ifndef MAX_MOB_LIST_PER_MAP
+#ifdef RENEWAL
#define MAX_MOB_LIST_PER_MAP 100
+#else
+#define MAX_MOB_LIST_PER_MAP 115
+#endif
+#endif
+
#define MAX_EVENTQUEUE 2
#define MAX_EVENTTIMER 32
#define NATURAL_HEAL_INTERVAL 500
diff --git a/src/map/mapreg.h b/src/map/mapreg.h
index b3b89e1b2..4318eaea8 100644
--- a/src/map/mapreg.h
+++ b/src/map/mapreg.h
@@ -21,55 +21,66 @@
#ifndef MAP_MAPREG_H
#define MAP_MAPREG_H
-#include "map/script.h" // struct reg_db
-#include "common/hercules.h"
+#include "map/script.h"
#include "common/db.h"
+#include "common/hercules.h"
-/* Forward Declarations */
-struct config_setting_t; // common/conf.h
+/** Forward Declarations **/
+struct config_setting_t;
struct eri;
-/** Container for a mapreg value */
+#ifndef MAPREG_AUTOSAVE_INTERVAL
+#define MAPREG_AUTOSAVE_INTERVAL (300 * 1000) //!< Interval for auto-saving permanent global variables to the database in milliseconds.
+#endif /** MAPREG_AUTOSAVE_INTERVAL **/
+
+/** Global variable structure. **/
struct mapreg_save {
- int64 uid; ///< Unique ID
- union {
- int i; ///< Numeric value
- char *str; ///< String value
+ int64 uid; //!< The variable's unique ID.
+ union value { //!< The variable's value container.
+ int i; //!< The variable's integer value.
+ char *str; //!< The variable's string value.
} u;
- bool is_string; ///< true if it's a string, false if it's a number
- bool save; ///< Whether a save operation is pending
+ bool is_string; //!< Whether the variable's value is a string.
+ bool save; //!< Whether the variable's save operation is pending.
};
+/** The mapreg interface structure. **/
struct mapreg_interface {
- struct reg_db regs;
- /* */
- bool skip_insert;
- /* */
- struct eri *ers; //[Ind/Hercules]
- /* */
- char table[32];
- /* */
- bool dirty; ///< Whether there are modified regs to be saved
- /* */
- void (*init) (void);
- void (*final) (void);
- /* */
+ /** Interface variables. **/
+ struct eri *ers; //!< Entry manager for global variables.
+ struct reg_db regs; //!< Generic database for global variables.
+ bool dirty; //!< Whether there are modified global variables to be saved.
+ bool skip_insert; //!< Whether to skip inserting the variable into the SQL database in mapreg_set_*_db().
+ char num_db[32]; //!< Name of SQL table which holds permanent global integer variables.
+ char str_db[32]; //!< Name of SQL table which holds permanent global string variables.
+
+ /** Interface functions. **/
int (*readreg) (int64 uid);
- char* (*readregstr) (int64 uid);
+ char *(*readregstr) (int64 uid);
+ bool (*set_num_db) (int64 uid, const char *name, unsigned int index, int value);
+ bool (*delete_num_db) (int64 uid, const char *name, unsigned int index);
bool (*setreg) (int64 uid, int val);
+ bool (*set_str_db) (int64 uid, const char *name, unsigned int index, const char *value);
+ bool (*delete_str_db) (int64 uid, const char *name, unsigned int index);
bool (*setregstr) (int64 uid, const char *str);
+ void (*load_num_db) (void);
+ void (*load_str_db) (void);
void (*load) (void);
+ void (*save_num_db) (const char *name, unsigned int index, int value);
+ void (*save_str_db) (const char *name, unsigned int index, const char *value);
void (*save) (void);
int (*save_timer) (int tid, int64 tick, int id, intptr_t data);
int (*destroyreg) (union DBKey key, struct DBData *data, va_list ap);
void (*reload) (void);
- bool (*config_read) (const char *filename, const struct config_setting_t *config, bool imported);
+ bool (*config_read_registry) (const char *filename, const struct config_setting_t *config, bool imported);
+ void (*final) (void);
+ void (*init) (void);
};
#ifdef HERCULES_CORE
void mapreg_defaults(void);
-#endif // HERCULES_CORE
+#endif /** HERCULES_CORE **/
HPShared struct mapreg_interface *mapreg;
-#endif /* MAP_MAPREG_H */
+#endif /** MAP_MAPREG_H **/
diff --git a/src/map/mapreg_sql.c b/src/map/mapreg_sql.c
index 741505e17..16d8b0ff6 100644
--- a/src/map/mapreg_sql.c
+++ b/src/map/mapreg_sql.c
@@ -22,7 +22,7 @@
#include "mapreg.h"
-#include "map/map.h" // map-"mysql_handle
+#include "map/map.h"
#include "map/script.h"
#include "common/cbasetypes.h"
#include "common/conf.h"
@@ -38,289 +38,596 @@
#include <stdlib.h>
#include <string.h>
-static struct mapreg_interface mapreg_s;
-struct mapreg_interface *mapreg;
-
-#define MAPREG_AUTOSAVE_INTERVAL (300*1000)
+static struct mapreg_interface mapreg_s; //!< Private interface structure.
+struct mapreg_interface *mapreg; //!< Public interface structure.
/**
- * Looks up the value of an integer variable using its uid.
+ * Looks up the value of a global integer variable using its unique ID.
*
- * @param uid variable's unique identifier.
- * @return variable's integer value
- */
-static int mapreg_readreg(int64 uid)
+ * @param uid The variable's unique ID.
+ * @return The variable's value or 0 if the variable does not exist.
+ *
+ **/
+static int mapreg_get_num_reg(int64 uid)
{
- struct mapreg_save *m = i64db_get(mapreg->regs.vars, uid);
- return m?m->u.i:0;
+ struct mapreg_save *var = i64db_get(mapreg->regs.vars, uid);
+ return (var != NULL) ? var->u.i : 0;
}
/**
- * Looks up the value of a string variable using its uid.
+ * Looks up the value of a global string variable using its unique ID.
*
- * @param uid variable's unique identifier
- * @return variable's string value
- */
-static char *mapreg_readregstr(int64 uid)
+ * @param uid The variable's unique ID.
+ * @return The variable's value or NULL if the variable does not exist.
+ *
+ **/
+static char *mapreg_get_str_reg(int64 uid)
{
- struct mapreg_save *m = i64db_get(mapreg->regs.vars, uid);
- return m?m->u.str:NULL;
+ struct mapreg_save *var = i64db_get(mapreg->regs.vars, uid);
+ return (var != NULL) ? var->u.str : NULL;
}
/**
- * Modifies the value of an integer variable.
+ * Sets the value of a global integer variable.
*
- * @param uid variable's unique identifier
- * @param val new value
- * @retval true value was successfully set
- */
-static bool mapreg_setreg(int64 uid, int val)
+ * @param uid The variable's unique ID.
+ * @param name The variable's name.
+ * @param index The variable's array index.
+ * @param value The variable's new value.
+ * @return True on success, otherwise false.
+ *
+ **/
+static bool mapreg_set_num_db(int64 uid, const char *name, unsigned int index, int value)
{
- struct mapreg_save *m;
- int num = script_getvarid(uid);
- unsigned int i = script_getvaridx(uid);
- const char* name = script->get_str(num);
-
- nullpo_retr(true, name);
- if( val != 0 ) {
- if( (m = i64db_get(mapreg->regs.vars, uid)) ) {
- m->u.i = val;
- if(name[1] != '@') {
- m->save = true;
- mapreg->dirty = true;
- }
- } else {
- if( i )
- script->array_update(&mapreg->regs, uid, false);
-
- m = ers_alloc(mapreg->ers, struct mapreg_save);
-
- m->u.i = val;
- m->uid = uid;
- m->save = false;
- m->is_string = false;
-
- if (name[1] != '@' && !mapreg->skip_insert) {// write new variable to database
- char tmp_str[(SCRIPT_VARNAME_LENGTH+1)*2+1];
- SQL->EscapeStringLen(map->mysql_handle, tmp_str, name, strnlen(name, SCRIPT_VARNAME_LENGTH+1));
- if( SQL_ERROR == SQL->Query(map->mysql_handle, "INSERT INTO `%s`(`varname`,`index`,`value`) VALUES ('%s','%u','%d')", mapreg->table, tmp_str, i, val) )
- Sql_ShowDebug(map->mysql_handle);
- }
- i64db_put(mapreg->regs.vars, uid, m);
+ nullpo_retr(false, name);
+ Assert_retr(false, *name != '\0');
+ Assert_retr(false, strlen(name) <= SCRIPT_VARNAME_LENGTH);
+
+ if (value == 0)
+ return mapreg->delete_num_db(uid, name, index);
+
+ struct mapreg_save *var = i64db_get(mapreg->regs.vars, uid);
+
+ // Update variable.
+ if (var != NULL) {
+ var->u.i = value;
+
+ if (script->is_permanent_variable(name)) {
+ var->save = true;
+ mapreg->dirty = true;
}
- } else { // val == 0
- if( i )
- script->array_update(&mapreg->regs, uid, true);
- if( (m = i64db_get(mapreg->regs.vars, uid)) ) {
- ers_free(mapreg->ers, m);
+
+ return true;
+ }
+
+ // Add new variable.
+ if (index != 0)
+ script->array_update(&mapreg->regs, uid, false);
+
+ var = ers_alloc(mapreg->ers, struct mapreg_save);
+ var->u.i = value;
+ var->uid = uid;
+ var->save = false;
+ var->is_string = false;
+ i64db_put(mapreg->regs.vars, uid, var);
+
+ if (script->is_permanent_variable(name) && !mapreg->skip_insert) {
+ struct SqlStmt *stmt = SQL->StmtMalloc(map->mysql_handle);
+
+ if (stmt == NULL) {
+ SqlStmt_ShowDebug(stmt);
+ return false;
}
- i64db_remove(mapreg->regs.vars, uid);
- if( name[1] != '@' ) {// Remove from database because it is unused.
- if( SQL_ERROR == SQL->Query(map->mysql_handle, "DELETE FROM `%s` WHERE `varname`='%s' AND `index`='%u'", mapreg->table, name, i) )
- Sql_ShowDebug(map->mysql_handle);
+ const char *query = "INSERT INTO `%s` (`key`, `index`, `value`) VALUES (?, ?, ?)";
+
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, query, mapreg->num_db)
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 0, SQLDT_STRING, name, strlen(name))
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 1, SQLDT_UINT32, &index, sizeof(index))
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 2, SQLDT_INT32, &value, sizeof(value))
+ || SQL_ERROR == SQL->StmtExecute(stmt)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
+ return false;
}
+
+ SQL->StmtFree(stmt);
}
return true;
}
/**
- * Modifies the value of a string variable.
+ * Deletes a global integer variable.
*
- * @param uid variable's unique identifier
- * @param str new value
- * @retval true value was successfully set
- */
-static bool mapreg_setregstr(int64 uid, const char *str)
+ * @param uid The variable's unique ID.
+ * @param name The variable's name.
+ * @param index The variable's array index.
+ * @return True on success, otherwise false.
+ *
+ **/
+static bool mapreg_delete_num_db(int64 uid, const char *name, unsigned int index)
{
- struct mapreg_save *m;
- int num = script_getvarid(uid);
- unsigned int i = script_getvaridx(uid);
- const char* name = script->get_str(num);
-
- nullpo_retr(true, name);
-
- if( str == NULL || *str == 0 ) {
- if( i )
- script->array_update(&mapreg->regs, uid, true);
- if(name[1] != '@') {
- if (SQL_ERROR == SQL->Query(map->mysql_handle, "DELETE FROM `%s` WHERE `varname`='%s' AND `index`='%u'", mapreg->table, name, i))
- Sql_ShowDebug(map->mysql_handle);
+ nullpo_retr(false, name);
+ Assert_retr(false, *name != '\0');
+ Assert_retr(false, strlen(name) <= SCRIPT_VARNAME_LENGTH);
+
+ struct mapreg_save *var = i64db_get(mapreg->regs.vars, uid);
+
+ if (var != NULL)
+ ers_free(mapreg->ers, var);
+
+ if (index != 0)
+ script->array_update(&mapreg->regs, uid, true);
+
+ i64db_remove(mapreg->regs.vars, uid);
+
+ if (script->is_permanent_variable(name)) {
+ struct SqlStmt *stmt = SQL->StmtMalloc(map->mysql_handle);
+
+ if (stmt == NULL) {
+ SqlStmt_ShowDebug(stmt);
+ return false;
}
- if( (m = i64db_get(mapreg->regs.vars, uid)) ) {
- if( m->u.str != NULL )
- aFree(m->u.str);
- ers_free(mapreg->ers, m);
+
+ const char *query = "DELETE FROM `%s` WHERE `key`=? AND `index`=?";
+
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, query, mapreg->num_db)
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 0, SQLDT_STRING, name, strlen(name))
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 1, SQLDT_UINT32, &index, sizeof(index))
+ || SQL_ERROR == SQL->StmtExecute(stmt)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
+ return false;
}
- i64db_remove(mapreg->regs.vars, uid);
- } else {
- if( (m = i64db_get(mapreg->regs.vars, uid)) ) {
- if( m->u.str != NULL )
- aFree(m->u.str);
- m->u.str = aStrdup(str);
- if(name[1] != '@') {
- mapreg->dirty = true;
- m->save = true;
- }
- } else {
- if( i )
- script->array_update(&mapreg->regs, uid, false);
-
- m = ers_alloc(mapreg->ers, struct mapreg_save);
-
- m->uid = uid;
- m->u.str = aStrdup(str);
- m->save = false;
- m->is_string = true;
-
- if(name[1] != '@' && !mapreg->skip_insert) { //put returned null, so we must insert.
- char tmp_str[(SCRIPT_VARNAME_LENGTH+1)*2+1];
- char tmp_str2[255*2+1];
- SQL->EscapeStringLen(map->mysql_handle, tmp_str, name, strnlen(name, SCRIPT_VARNAME_LENGTH+1));
- SQL->EscapeStringLen(map->mysql_handle, tmp_str2, str, strnlen(str, 255));
- if( SQL_ERROR == SQL->Query(map->mysql_handle, "INSERT INTO `%s`(`varname`,`index`,`value`) VALUES ('%s','%u','%s')", mapreg->table, tmp_str, i, tmp_str2) )
- Sql_ShowDebug(map->mysql_handle);
- }
- i64db_put(mapreg->regs.vars, uid, m);
+
+ SQL->StmtFree(stmt);
+ }
+
+ return true;
+}
+
+/**
+ * Sets the value of a global integer variable or deletes it if passed value is 0.
+ *
+ * @param uid The variable's unique ID.
+ * @param val The variable's new value.
+ * @return True on success, otherwise false.
+ *
+ **/
+static bool mapreg_set_num(int64 uid, int val)
+{
+ unsigned int index = script_getvaridx(uid);
+ const char *name = script->get_str(script_getvarid(uid));
+
+ if (val != 0)
+ return mapreg->set_num_db(uid, name, index, val);
+ else
+ return mapreg->delete_num_db(uid, name, index);
+}
+
+/**
+ * Sets the value of a global string variable.
+ *
+ * @param uid The variable's unique ID.
+ * @param name The variable's name.
+ * @param index The variable's array index.
+ * @param value The variable's new value.
+ * @return True on success, otherwise false.
+ *
+ **/
+static bool mapreg_set_str_db(int64 uid, const char *name, unsigned int index, const char *value)
+{
+ nullpo_retr(false, name);
+ Assert_retr(false, *name != '\0');
+ Assert_retr(false, strlen(name) <= SCRIPT_VARNAME_LENGTH);
+
+ if (value == NULL || *value == '\0')
+ return mapreg->delete_str_db(uid, name, index);
+
+ if (script->is_permanent_variable(name))
+ Assert_retr(false, strlen(value) <= SCRIPT_STRING_VAR_LENGTH);
+
+ struct mapreg_save *var = i64db_get(mapreg->regs.vars, uid);
+
+ // Update variable.
+ if (var != NULL) {
+ if (var->u.str != NULL)
+ aFree(var->u.str);
+
+ var->u.str = aStrdup(value);
+
+ if (script->is_permanent_variable(name)) {
+ var->save = true;
+ mapreg->dirty = true;
}
+
+ return true;
+ }
+
+ // Add new variable.
+ if (index != 0)
+ script->array_update(&mapreg->regs, uid, false);
+
+ var = ers_alloc(mapreg->ers, struct mapreg_save);
+ var->u.str = aStrdup(value);
+ var->uid = uid;
+ var->save = false;
+ var->is_string = true;
+ i64db_put(mapreg->regs.vars, uid, var);
+
+ if (script->is_permanent_variable(name) && !mapreg->skip_insert) {
+ struct SqlStmt *stmt = SQL->StmtMalloc(map->mysql_handle);
+
+ if (stmt == NULL) {
+ SqlStmt_ShowDebug(stmt);
+ return false;
+ }
+
+ const char *query = "INSERT INTO `%s` (`key`, `index`, `value`) VALUES (?, ?, ?)";
+
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, query, mapreg->str_db)
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 0, SQLDT_STRING, name, strlen(name))
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 1, SQLDT_UINT32, &index, sizeof(index))
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 2, SQLDT_STRING, value, strlen(value))
+ || SQL_ERROR == SQL->StmtExecute(stmt)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
+ return false;
+ }
+
+ SQL->StmtFree(stmt);
}
return true;
}
/**
- * Loads permanent variables from database.
- */
-static void script_load_mapreg(void)
+ * Deletes a global string variable.
+ *
+ * @param uid The variable's unique ID.
+ * @param name The variable's name.
+ * @param index The variable's array index.
+ * @return True on success, otherwise false.
+ *
+ **/
+static bool mapreg_delete_str_db(int64 uid, const char *name, unsigned int index)
+{
+ nullpo_retr(false, name);
+ Assert_retr(false, *name != '\0');
+ Assert_retr(false, strlen(name) <= SCRIPT_VARNAME_LENGTH);
+
+ struct mapreg_save *var = i64db_get(mapreg->regs.vars, uid);
+
+ if (var != NULL) {
+ if (var->u.str != NULL)
+ aFree(var->u.str);
+
+ ers_free(mapreg->ers, var);
+ }
+
+ if (index != 0)
+ script->array_update(&mapreg->regs, uid, true);
+
+ i64db_remove(mapreg->regs.vars, uid);
+
+ if (script->is_permanent_variable(name)) {
+ struct SqlStmt *stmt = SQL->StmtMalloc(map->mysql_handle);
+
+ if (stmt == NULL) {
+ SqlStmt_ShowDebug(stmt);
+ return false;
+ }
+
+ const char *query = "DELETE FROM `%s` WHERE `key`=? AND `index`=?";
+
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, query, mapreg->str_db)
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 0, SQLDT_STRING, name, strlen(name))
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 1, SQLDT_UINT32, &index, sizeof(index))
+ || SQL_ERROR == SQL->StmtExecute(stmt)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
+ return false;
+ }
+
+ SQL->StmtFree(stmt);
+ }
+
+ return true;
+}
+
+/**
+ * Sets the value of a global string variable or deletes it if passed value is NULL or an empty string.
+ *
+ * @param uid The variable's unique ID.
+ * @param str The variable's new value.
+ * @return True on success, otherwise false.
+ *
+ **/
+static bool mapreg_set_str(int64 uid, const char *str)
+{
+ unsigned int index = script_getvaridx(uid);
+ const char *name = script->get_str(script_getvarid(uid));
+
+ if (str != NULL && *str != '\0')
+ return mapreg->set_str_db(uid, name, index, str);
+ else
+ return mapreg->delete_str_db(uid, name, index);
+}
+
+/**
+ * Loads permanent global interger variables from the database.
+ *
+ **/
+static void mapreg_load_num_db(void)
{
- /*
- 0 1 2
- +-------------------------+
- | varname | index | value |
- +-------------------------+
- */
struct SqlStmt *stmt = SQL->StmtMalloc(map->mysql_handle);
- char varname[SCRIPT_VARNAME_LENGTH+1];
- int index;
- char value[255+1];
- uint32 length;
-
- if ( SQL_ERROR == SQL->StmtPrepare(stmt, "SELECT `varname`, `index`, `value` FROM `%s`", mapreg->table)
- || SQL_ERROR == SQL->StmtExecute(stmt)
- ) {
+
+ if (stmt == NULL) {
SqlStmt_ShowDebug(stmt);
- SQL->StmtFree(stmt);
return;
}
- mapreg->skip_insert = true;
+ const char *query = "SELECT `key`, `index`, `value` FROM `%s`";
+ char name[SCRIPT_VARNAME_LENGTH + 1];
+ unsigned int index;
+ int value;
- SQL->StmtBindColumn(stmt, 0, SQLDT_STRING, &varname, sizeof varname, &length, NULL);
- SQL->StmtBindColumn(stmt, 1, SQLDT_INT, &index, sizeof index, NULL, NULL);
- SQL->StmtBindColumn(stmt, 2, SQLDT_STRING, &value, sizeof value, NULL, NULL);
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, query, mapreg->num_db)
+ || SQL_ERROR == SQL->StmtExecute(stmt)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 0, SQLDT_STRING, &name, sizeof(name), NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 1, SQLDT_UINT32, &index, sizeof(index), NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 2, SQLDT_INT32, &value, sizeof(value), NULL, NULL)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
+ return;
+ }
- while ( SQL_SUCCESS == SQL->StmtNextRow(stmt) ) {
- int s = script->add_variable(varname);
- int i = index;
+ if (SQL->StmtNumRows(stmt) < 1) {
+ SQL->StmtFree(stmt);
+ return;
+ }
+ mapreg->skip_insert = true;
+
+ while (SQL_SUCCESS == SQL->StmtNextRow(stmt)) {
+ int var_key = script->add_variable(name);
+ int64 uid = reference_uid(var_key, index);
- if( i64db_exists(mapreg->regs.vars, reference_uid(s, i)) ) {
- ShowWarning("load_mapreg: duplicate! '%s' => '%s' skipping...\n",varname,value);
+ if (i64db_exists(mapreg->regs.vars, uid)) {
+ ShowWarning("mapreg_load_num_db: Duplicate! '%s' => '%d' Skipping...\n", name, value);
continue;
}
- if( varname[length-1] == '$' ) {
- mapreg->setregstr(reference_uid(s, i),value);
- } else {
- mapreg->setreg(reference_uid(s, i),atoi(value));
- }
+
+ mapreg->setreg(uid, value);
}
+ mapreg->skip_insert = false;
SQL->StmtFree(stmt);
+}
+
+/**
+ * Loads permanent global string variables from the database.
+ *
+ **/
+static void mapreg_load_str_db(void)
+{
+ struct SqlStmt *stmt = SQL->StmtMalloc(map->mysql_handle);
+
+ if (stmt == NULL) {
+ SqlStmt_ShowDebug(stmt);
+ return;
+ }
+
+ const char *query = "SELECT `key`, `index`, `value` FROM `%s`";
+ char name[SCRIPT_VARNAME_LENGTH + 1];
+ unsigned int index;
+ char value[SCRIPT_STRING_VAR_LENGTH + 1];
+
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, query, mapreg->str_db)
+ || SQL_ERROR == SQL->StmtExecute(stmt)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 0, SQLDT_STRING, &name, sizeof(name), NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 1, SQLDT_UINT32, &index, sizeof(index), NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 2, SQLDT_STRING, &value, sizeof(value), NULL, NULL)) {
+ SqlStmt_ShowDebug(stmt);
+ SQL->StmtFree(stmt);
+ return;
+ }
+
+ if (SQL->StmtNumRows(stmt) < 1) {
+ SQL->StmtFree(stmt);
+ return;
+ }
+
+ mapreg->skip_insert = true;
+
+ while (SQL_SUCCESS == SQL->StmtNextRow(stmt)) {
+ int var_key = script->add_variable(name);
+ int64 uid = reference_uid(var_key, index);
+
+ if (i64db_exists(mapreg->regs.vars, uid)) {
+ ShowWarning("mapreg_load_str_db: Duplicate! '%s' => '%s' Skipping...\n", name, value);
+ continue;
+ }
+
+ mapreg->setregstr(uid, value);
+ }
mapreg->skip_insert = false;
+ SQL->StmtFree(stmt);
+}
+/**
+ * Loads permanent global variables from the database.
+ *
+ **/
+static void mapreg_load(void)
+{
+ mapreg->load_num_db();
+ mapreg->load_str_db();
mapreg->dirty = false;
}
/**
- * Saves permanent variables to database.
- */
-static void script_save_mapreg(void)
+ * Saves a permanent global integer variable to the database.
+ *
+ * @param name The variable's name.
+ * @param index The variable's array index.
+ * @param value The variable's value.
+ *
+ **/
+static void mapreg_save_num_db(const char *name, unsigned int index, int value)
+{
+ nullpo_retv(name);
+ Assert_retv(*name != '\0');
+ Assert_retv(strlen(name) <= SCRIPT_VARNAME_LENGTH);
+
+ struct SqlStmt *stmt = SQL->StmtMalloc(map->mysql_handle);
+
+ if (stmt == NULL) {
+ SqlStmt_ShowDebug(stmt);
+ return;
+ }
+
+ const char *query = "UPDATE `%s` SET `value`=? WHERE `key`=? AND `index`=? LIMIT 1";
+
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, query, mapreg->num_db)
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 0, SQLDT_INT32, &value, sizeof(value))
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 1, SQLDT_STRING, name, strlen(name))
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 2, SQLDT_UINT32, &index, sizeof(index))
+ || SQL_ERROR == SQL->StmtExecute(stmt)) {
+ SqlStmt_ShowDebug(stmt);
+ }
+
+ SQL->StmtFree(stmt);
+}
+
+/**
+ * Saves a permanent global string variable to the database.
+ *
+ * @param name The variable's name.
+ * @param index The variable's array index.
+ * @param value The variable's value.
+ *
+ **/
+static void mapreg_save_str_db(const char *name, unsigned int index, const char *value)
+{
+ nullpo_retv(name);
+ nullpo_retv(value);
+ Assert_retv(*name != '\0');
+ Assert_retv(strlen(name) <= SCRIPT_VARNAME_LENGTH);
+ Assert_retv(*value != '\0');
+ Assert_retv(strlen(value) <= SCRIPT_STRING_VAR_LENGTH);
+
+ struct SqlStmt *stmt = SQL->StmtMalloc(map->mysql_handle);
+
+ if (stmt == NULL) {
+ SqlStmt_ShowDebug(stmt);
+ return;
+ }
+
+ const char *query = "UPDATE `%s` SET `value`=? WHERE `key`=? AND `index`=? LIMIT 1";
+
+ if (SQL_ERROR == SQL->StmtPrepare(stmt, query, mapreg->str_db)
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 0, SQLDT_STRING, value, strlen(value))
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 1, SQLDT_STRING, name, strlen(name))
+ || SQL_ERROR == SQL->StmtBindParam(stmt, 2, SQLDT_UINT32, &index, sizeof(index))
+ || SQL_ERROR == SQL->StmtExecute(stmt)) {
+ SqlStmt_ShowDebug(stmt);
+ }
+
+ SQL->StmtFree(stmt);
+}
+
+/**
+ * Saves permanent global variables to the database.
+ *
+ **/
+static void mapreg_save(void)
{
if (mapreg->dirty) {
struct DBIterator *iter = db_iterator(mapreg->regs.vars);
- struct mapreg_save *m = NULL;
- for (m = dbi_first(iter); dbi_exists(iter); m = dbi_next(iter)) {
- if (m->save) {
- int num = script_getvarid(m->uid);
- int i = script_getvaridx(m->uid);
- const char* name = script->get_str(num);
- nullpo_retv(name);
- if (!m->is_string) {
- if( SQL_ERROR == SQL->Query(map->mysql_handle, "UPDATE `%s` SET `value`='%d' WHERE `varname`='%s' AND `index`='%d' LIMIT 1", mapreg->table, m->u.i, name, i) )
- Sql_ShowDebug(map->mysql_handle);
- } else {
- char tmp_str2[2*255+1];
- SQL->EscapeStringLen(map->mysql_handle, tmp_str2, m->u.str, safestrnlen(m->u.str, 255));
- if( SQL_ERROR == SQL->Query(map->mysql_handle, "UPDATE `%s` SET `value`='%s' WHERE `varname`='%s' AND `index`='%d' LIMIT 1", mapreg->table, tmp_str2, name, i) )
- Sql_ShowDebug(map->mysql_handle);
- }
- m->save = false;
+ struct mapreg_save *var = NULL;
+
+ for (var = dbi_first(iter); dbi_exists(iter); var = dbi_next(iter)) {
+ if (var->save) {
+ int index = script_getvaridx(var->uid);
+ const char *name = script->get_str(script_getvarid(var->uid));
+
+ if (!var->is_string)
+ mapreg->save_num_db(name, index, var->u.i);
+ else
+ mapreg->save_str_db(name, index, var->u.str);
+
+ var->save = false;
}
}
+
dbi_destroy(iter);
mapreg->dirty = false;
}
}
/**
- * Timer event to auto-save permanent variables.
+ * Timer event to auto-save permanent global variables.
*
- * @see timer->do_timer
- */
-static int script_autosave_mapreg(int tid, int64 tick, int id, intptr_t data)
+ * @see timer->do_timer()
+ *
+ * @param tid Unused.
+ * @param tick Unused.
+ * @param id Unused.
+ * @param data Unused.
+ * @return Always 0.
+ *
+ **/
+static int mapreg_save_timer(int tid, int64 tick, int id, intptr_t data)
{
mapreg->save();
return 0;
}
/**
- * Destroys a mapreg_save structure, freeing the contained string, if any.
+ * Destroys a mapreg_save structure and frees the contained string, if any.
*
* @see DBApply
- */
-static int mapreg_destroyreg(union DBKey key, struct DBData *data, va_list ap)
+ *
+ * @param key Unused.
+ * @param data The DB data holding the mapreg_save data.
+ * @param ap Unused.
+ * @return 0 on success, otherwise 1.
+ *
+ **/
+static int mapreg_destroy_reg(union DBKey key, struct DBData *data, va_list ap)
{
- struct mapreg_save *m = NULL;
+ nullpo_retr(1, data);
if (data->type != DB_DATA_PTR) // Sanity check
- return 0;
+ return 1;
- m = DB->data2ptr(data);
+ struct mapreg_save *var = DB->data2ptr(data);
- if (m->is_string) {
- if (m->u.str)
- aFree(m->u.str);
- }
- ers_free(mapreg->ers, m);
+ if (var == NULL)
+ return 1;
+
+ if (var->is_string && var->u.str != NULL)
+ aFree(var->u.str);
+ ers_free(mapreg->ers, var);
return 0;
}
/**
- * Reloads mapregs, saving to database beforehand.
+ * Reloads permanent global variables, saving them to the database beforehand.
*
- * This has the effect of clearing the temporary variables, and
- * reloading the permanent ones.
- */
+ * This has the effect of clearing the temporary global variables and reloading the permanent ones.
+ *
+ **/
static void mapreg_reload(void)
{
mapreg->save();
-
mapreg->regs.vars->clear(mapreg->regs.vars, mapreg->destroyreg);
- if( mapreg->regs.arrays ) {
+ if (mapreg->regs.arrays != NULL) {
mapreg->regs.arrays->destroy(mapreg->regs.arrays, script->array_free_db);
mapreg->regs.arrays = NULL;
}
@@ -329,86 +636,105 @@ static void mapreg_reload(void)
}
/**
- * Finalizer.
- */
+ * Loads the mapreg database table names from configuration file.
+ *
+ * @param filename Path to configuration file. (Used in error and warning messages).
+ * @param config The current config being parsed.
+ * @param imported Whether the current config is imported from another file.
+ * @return True on success, otherwise false.
+ *
+ **/
+static bool mapreg_config_read_registry(const char *filename, const struct config_setting_t *config, bool imported)
+{
+ nullpo_retr(false, filename);
+ nullpo_retr(false, config);
+
+ bool ret_val = true;
+ size_t sz = sizeof(mapreg->num_db);
+ int result = libconfig->setting_lookup_mutable_string(config, "map_reg_num_db", mapreg->num_db, sz);
+
+ if (result != CONFIG_TRUE && !imported) {
+ ShowError("%s: inter_configuration/database_names/registry/map_reg_num_db was not found in %s!\n",
+ __func__, filename);
+ ret_val = false;
+ }
+
+ sz = sizeof(mapreg->str_db);
+ result = libconfig->setting_lookup_mutable_string(config, "map_reg_str_db", mapreg->str_db, sz);
+
+ if (result != CONFIG_TRUE && !imported) {
+ ShowError("%s: inter_configuration/database_names/registry/map_reg_str_db was not found in %s!\n",
+ __func__, filename);
+ ret_val = false;
+ }
+
+ return ret_val;
+}
+
+/**
+ * Saves permanent global variables to the database and frees all the memory they use afterwards.
+ *
+ **/
static void mapreg_final(void)
{
mapreg->save();
-
mapreg->regs.vars->destroy(mapreg->regs.vars, mapreg->destroyreg);
-
ers_destroy(mapreg->ers);
- if( mapreg->regs.arrays )
+ if (mapreg->regs.arrays != NULL)
mapreg->regs.arrays->destroy(mapreg->regs.arrays, script->array_free_db);
}
/**
- * Initializer.
- */
+ * Allocates memory for permanent global variables, loads them from the database and initializes the auto-save timer.
+ *
+ **/
static void mapreg_init(void)
{
mapreg->regs.vars = i64db_alloc(DB_OPT_BASE);
mapreg->ers = ers_new(sizeof(struct mapreg_save), "mapreg_sql.c::mapreg_ers", ERS_OPT_CLEAN);
-
mapreg->load();
-
- timer->add_func_list(mapreg->save_timer, "mapreg_script_autosave_mapreg");
+ timer->add_func_list(mapreg->save_timer, "mapreg_save_timer");
timer->add_interval(timer->gettick() + MAPREG_AUTOSAVE_INTERVAL, mapreg->save_timer, 0, 0, MAPREG_AUTOSAVE_INTERVAL);
}
/**
- * Loads the mapreg configuration file.
- *
- * @param filename Path to configuration file (used in error and warning messages).
- * @param config The current config being parsed.
- * @param imported Whether the current config is imported from another file.
+ * Initializes the mapreg interface defaults.
*
- * @retval false in case of error.
- */
-static bool mapreg_config_read(const char *filename, const struct config_setting_t *config, bool imported)
-{
- nullpo_retr(false, filename);
- nullpo_retr(false, config);
-
- if (libconfig->setting_lookup_mutable_string(config, "mapreg_db", mapreg->table, sizeof(mapreg->table)) != CONFIG_TRUE)
- return false;
-
- return true;
-}
-
-/**
- * Interface defaults initializer.
- */
+ **/
void mapreg_defaults(void)
{
+ /** Interface structure. **/
mapreg = &mapreg_s;
- /* */
- mapreg->regs.vars = NULL;
+ /** Interface variables. **/
mapreg->ers = NULL;
- mapreg->skip_insert = false;
-
- safestrncpy(mapreg->table, "mapreg", sizeof(mapreg->table));
- mapreg->dirty = false;
-
- /* */
+ mapreg->regs.vars = NULL;
mapreg->regs.arrays = NULL;
-
- /* */
- mapreg->init = mapreg_init;
- mapreg->final = mapreg_final;
-
- /* */
- mapreg->readreg = mapreg_readreg;
- mapreg->readregstr = mapreg_readregstr;
- mapreg->setreg = mapreg_setreg;
- mapreg->setregstr = mapreg_setregstr;
- mapreg->load = script_load_mapreg;
- mapreg->save = script_save_mapreg;
- mapreg->save_timer = script_autosave_mapreg;
- mapreg->destroyreg = mapreg_destroyreg;
+ mapreg->dirty = false;
+ mapreg->skip_insert = false;
+ safestrncpy(mapreg->num_db, "map_reg_num_db", sizeof(mapreg->num_db));
+ safestrncpy(mapreg->str_db, "map_reg_str_db", sizeof(mapreg->str_db));
+
+ /** Interface functions. **/
+ mapreg->readreg = mapreg_get_num_reg;
+ mapreg->readregstr = mapreg_get_str_reg;
+ mapreg->set_num_db = mapreg_set_num_db;
+ mapreg->delete_num_db = mapreg_delete_num_db;
+ mapreg->setreg = mapreg_set_num;
+ mapreg->set_str_db = mapreg_set_str_db;
+ mapreg->delete_str_db = mapreg_delete_str_db;
+ mapreg->setregstr = mapreg_set_str;
+ mapreg->load_num_db = mapreg_load_num_db;
+ mapreg->load_str_db = mapreg_load_str_db;
+ mapreg->load = mapreg_load;
+ mapreg->save_num_db = mapreg_save_num_db;
+ mapreg->save_str_db = mapreg_save_str_db;
+ mapreg->save = mapreg_save;
+ mapreg->save_timer = mapreg_save_timer;
+ mapreg->destroyreg = mapreg_destroy_reg;
mapreg->reload = mapreg_reload;
- mapreg->config_read = mapreg_config_read;
-
+ mapreg->config_read_registry = mapreg_config_read_registry;
+ mapreg->final = mapreg_final;
+ mapreg->init = mapreg_init;
}
diff --git a/src/map/messages_main.h b/src/map/messages_main.h
index 6fc0310e7..7dc0ff2b6 100644
--- a/src/map/messages_main.h
+++ b/src/map/messages_main.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2020 Hercules Dev Team
- * Copyright (C) 2018-2020 Andrei Karas (4144)
+ * Copyright (C) 2013-2020 Hercules Dev Team
+ * Copyright (C) 2018-2020 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,7 +24,7 @@
/* This file is autogenerated, please do not commit manual changes
-Latest version: 20200129
+Latest version: 20200701
*/
enum clif_messages {
@@ -13866,12 +13866,14 @@ Ghost %d
Shadow %d
*/
MSG_NAVIGATION_PROPERTY8 = 0x8de,
-/*20120417 to latest
+/*20120417 to 20200506
언데드%d
Undead %d
20130807 to 20130814
염속성%d
Ghost %d
+20200520 to latest
+불사%d
*/
MSG_NAVIGATION_PROPERTY9 = 0x8df,
/*20120417 to latest
@@ -22521,6 +22523,139 @@ Search
*/
MSG_ID_ECE = 0xece,
#endif
+#if PACKETVER >= 20200212
+/*20200212 to latest
+합주를 혼자 사용할 수 있습니다.
+*/
+ MSG_ID_ECF = 0xecf,
+/*20200212 to latest
+크바시르의 지혜가 사라집니다.
+*/
+ MSG_ID_ED0 = 0xed0,
+/*20200212 to latest
+미스틱 심포니의 효과가 부여됩니다.
+*/
+ MSG_ID_ED1 = 0xed1,
+/*20200212 to latest
+미스틱 심포니의 효과가 사라집니다.
+*/
+ MSG_ID_ED2 = 0xed2,
+/*20200212 to latest
+마법 저항력이 감소했습니다.
+*/
+ MSG_ID_ED3 = 0xed3,
+/*20200212 to latest
+게페니아 녹턴의 효과가 해제 되었습니다.
+*/
+ MSG_ID_ED4 = 0xed4,
+/*20200212 to latest
+물리 저항력이 감소했습니다.
+*/
+ MSG_ID_ED5 = 0xed5,
+/*20200212 to latest
+마인워커 랩소디 상태가 해제되었습니다.
+*/
+ MSG_ID_ED6 = 0xed6,
+/*20200212 to latest
+물리 저항력이 증가했습니다.
+*/
+ MSG_ID_ED7 = 0xed7,
+/*20200212 to latest
+뮤지컬 인터루드 상태가 해제되었습니다.
+*/
+ MSG_ID_ED8 = 0xed8,
+/*20200212 to latest
+특성 마법 공격력과 이동 속도가 증가합니다.
+*/
+ MSG_ID_ED9 = 0xed9,
+/*20200212 to latest
+저녁 노을의 세레나데 효과가 해제되었습니다.
+*/
+ MSG_ID_EDA = 0xeda,
+/*20200212 to latest
+특성 물리 공격력과 이동 속도가 증가합니다.
+*/
+ MSG_ID_EDB = 0xedb,
+/*20200212 to latest
+ 프론테라의 행진곡 효과가 해제되었습니다.
+*/
+ MSG_ID_EDC = 0xedc,
+/*20200212 to latest
+바람의 분노가 시전자에게 흘러 들어옵니다.
+*/
+ MSG_ID_EDD = 0xedd,
+/*20200212 to latest
+캘러미티 가일 상태가 해제되었습니다.
+*/
+ MSG_ID_EDE = 0xede,
+/*20200212 to latest
+바람에 의해 약점과 모습이 드러납니다.
+*/
+ MSG_ID_EDF = 0xedf,
+/*20200212 to latest
+윈드 사인 효과가 사라집니다.
+*/
+ MSG_ID_EE0 = 0xee0,
+#endif
+#if PACKETVER >= 20200304
+/*20200304 to latest
+E X P : %.1f%% ( basic 100.0%% %s %.1f%%)
+EXP: %.1f%% (basic: 100.0%%, %s: %.1f%%)
+*/
+ MSG_ID_EE1 = 0xee1,
+/*20200304 to latest
+DROP : %.1f%% ( basic 100.0%% %s %.1f%%)
+DROP: %.1f%% (basic: 100.0%%, %s: %.1f%%)
+*/
+ MSG_ID_EE2 = 0xee2,
+/*20200304 to latest
+DEATH : %.1f%% ( basic 100.0%% %s %.1f%%)
+DEATH: %.1f%% (basic: 100.0%%, %s: %.1f%%)
+*/
+ MSG_ID_EE3 = 0xee3,
+#endif
+#if PACKETVER >= 20200506
+/*20200506 to latest
+특성 마법 공격력이 증가되었습니다.
+*/
+ MSG_ID_EE4 = 0xee4,
+/*20200506 to latest
+스펠 인챈팅 효과가 해제되었습니다.
+*/
+ MSG_ID_EE5 = 0xee5,
+/*20200506 to latest
+프롬 디 어비스 효과가 해제되었습니다.
+*/
+ MSG_ID_EE6 = 0xee6,
+/*20200506 to latest
+특성 물리 공격력, 특성 마법 공격력 및 명중률이 증가되었습니다.
+*/
+ MSG_ID_EE7 = 0xee7,
+/*20200506 to latest
+어비스 슬레이어 효과가 해제되었습니다.
+*/
+ MSG_ID_EE8 = 0xee8,
+#endif
+#if PACKETVER >= 20200617
+/*20200617 to latest
+캐릭터 생성에 제한이 있을 수 있습니다.
+*/
+ MSG_ID_EE9 = 0xee9,
+/*20200617 to latest
+월드가 포화상태입니다. 다른 월드를 이용해 주세요.
+*/
+ MSG_ID_EEA = 0xeea,
+#endif
+#if PACKETVER >= 20200701
+/*20200701 to latest
+채팅차단해제(수신거부해제)
+*/
+ MSG_ID_EEB = 0xeeb,
+/*20200701 to latest
+채팅차단(수신거부)
+*/
+ MSG_ID_EEC = 0xeec,
+#endif
};
#endif /* MAP_MESSAGES_MAIN_H */
diff --git a/src/map/messages_re.h b/src/map/messages_re.h
index f4cc62d68..aa05a2e56 100644
--- a/src/map/messages_re.h
+++ b/src/map/messages_re.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2020 Hercules Dev Team
- * Copyright (C) 2018-2020 Andrei Karas (4144)
+ * Copyright (C) 2013-2020 Hercules Dev Team
+ * Copyright (C) 2018-2020 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,7 +24,7 @@
/* This file is autogenerated, please do not commit manual changes
-Latest version: 20200205
+Latest version: 20200709
*/
enum clif_messages {
@@ -13342,12 +13342,14 @@ Ghost %d
Shadow %d
*/
MSG_NAVIGATION_PROPERTY8 = 0x8de,
-/*20120417 to latest
+/*20120417 to 20200304
언데드%d
Undead %d
20130807 to 20130814
염속성%d
Ghost %d
+20200709 to latest
+불사%d
*/
MSG_NAVIGATION_PROPERTY9 = 0x8df,
/*20120417 to latest
@@ -21998,6 +22000,135 @@ Search
*/
MSG_ID_ECE = 0xece,
#endif
+#if PACKETVER >= 20200212
+/*20200212 to latest
+합주를 혼자 사용할 수 있습니다.
+*/
+ MSG_ID_ECF = 0xecf,
+/*20200212 to latest
+크바시르의 지혜가 사라집니다.
+*/
+ MSG_ID_ED0 = 0xed0,
+/*20200212 to latest
+미스틱 심포니의 효과가 부여됩니다.
+*/
+ MSG_ID_ED1 = 0xed1,
+/*20200212 to latest
+미스틱 심포니의 효과가 사라집니다.
+*/
+ MSG_ID_ED2 = 0xed2,
+/*20200212 to latest
+마법 저항력이 감소했습니다.
+*/
+ MSG_ID_ED3 = 0xed3,
+/*20200212 to latest
+게페니아 녹턴의 효과가 해제 되었습니다.
+*/
+ MSG_ID_ED4 = 0xed4,
+/*20200212 to latest
+물리 저항력이 감소했습니다.
+*/
+ MSG_ID_ED5 = 0xed5,
+/*20200212 to latest
+마인워커 랩소디 상태가 해제되었습니다.
+*/
+ MSG_ID_ED6 = 0xed6,
+/*20200212 to latest
+물리 저항력이 증가했습니다.
+*/
+ MSG_ID_ED7 = 0xed7,
+/*20200212 to latest
+뮤지컬 인터루드 상태가 해제되었습니다.
+*/
+ MSG_ID_ED8 = 0xed8,
+/*20200212 to latest
+특성 마법 공격력과 이동 속도가 증가합니다.
+*/
+ MSG_ID_ED9 = 0xed9,
+/*20200212 to latest
+저녁 노을의 세레나데 효과가 해제되었습니다.
+*/
+ MSG_ID_EDA = 0xeda,
+/*20200212 to latest
+특성 물리 공격력과 이동 속도가 증가합니다.
+*/
+ MSG_ID_EDB = 0xedb,
+/*20200212 to latest
+ 프론테라의 행진곡 효과가 해제되었습니다.
+*/
+ MSG_ID_EDC = 0xedc,
+/*20200212 to latest
+바람의 분노가 시전자에게 흘러 들어옵니다.
+*/
+ MSG_ID_EDD = 0xedd,
+/*20200212 to latest
+캘러미티 가일 상태가 해제되었습니다.
+*/
+ MSG_ID_EDE = 0xede,
+/*20200212 to latest
+바람에 의해 약점과 모습이 드러납니다.
+*/
+ MSG_ID_EDF = 0xedf,
+/*20200212 to latest
+윈드 사인 효과가 사라집니다.
+*/
+ MSG_ID_EE0 = 0xee0,
+#endif
+#if PACKETVER >= 20200304
+/*20200304 to latest
+E X P : %.1f%% ( basic 100.0%% %s %.1f%%)
+EXP: %.1f%% (basic: 100.0%%, %s: %.1f%%)
+*/
+ MSG_ID_EE1 = 0xee1,
+/*20200304 to latest
+DROP : %.1f%% ( basic 100.0%% %s %.1f%%)
+DROP: %.1f%% (basic: 100.0%%, %s: %.1f%%)
+*/
+ MSG_ID_EE2 = 0xee2,
+/*20200304 to latest
+DEATH : %.1f%% ( basic 100.0%% %s %.1f%%)
+DEATH: %.1f%% (basic: 100.0%%, %s: %.1f%%)
+*/
+ MSG_ID_EE3 = 0xee3,
+#endif
+#if PACKETVER >= 20200709
+/*20200709 to latest
+특성 마법 공격력이 증가되었습니다.
+*/
+ MSG_ID_EE4 = 0xee4,
+/*20200709 to latest
+스펠 인챈팅 효과가 해제되었습니다.
+*/
+ MSG_ID_EE5 = 0xee5,
+/*20200709 to latest
+프롬 디 어비스 효과가 해제되었습니다.
+*/
+ MSG_ID_EE6 = 0xee6,
+/*20200709 to latest
+특성 물리 공격력, 특성 마법 공격력 및 명중률이 증가되었습니다.
+*/
+ MSG_ID_EE7 = 0xee7,
+/*20200709 to latest
+어비스 슬레이어 효과가 해제되었습니다.
+*/
+ MSG_ID_EE8 = 0xee8,
+/*20200709 to latest
+캐릭터 생성에 제한이 있을 수 있습니다.
+*/
+ MSG_ID_EE9 = 0xee9,
+/*20200709 to latest
+월드가 포화상태입니다. 다른 월드를 이용해 주세요.
+*/
+ MSG_ID_EEA = 0xeea,
+/*20200709 to latest
+채팅차단해제(수신거부해제)
+*/
+ MSG_ID_EEB = 0xeeb,
+/*20200709 to latest
+채팅차단(수신거부)
+*/
+ MSG_ID_EEC = 0xeec,
+#endif
};
#endif /* MAP_MESSAGES_RE_H */
diff --git a/src/map/messages_zero.h b/src/map/messages_zero.h
index 55c0329ee..7eca56cd9 100644
--- a/src/map/messages_zero.h
+++ b/src/map/messages_zero.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2020 Hercules Dev Team
- * Copyright (C) 2018-2020 Andrei Karas (4144)
+ * Copyright (C) 2013-2020 Hercules Dev Team
+ * Copyright (C) 2018-2020 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,7 +24,7 @@
/* This file is autogenerated, please do not commit manual changes
-Latest version: 20200129
+Latest version: 20200701
*/
enum clif_messages {
@@ -11263,9 +11263,11 @@ Shadow %d
Ghost %d
*/
MSG_NAVIGATION_PROPERTY8 = 0x8de,
-/*20171018 to latest
+/*20171018 to 20200506
언데드%d
Undead %d
+20200520 to latest
+불사%d
*/
MSG_NAVIGATION_PROPERTY9 = 0x8df,
/*20171018 to latest
@@ -18605,6 +18607,144 @@ Search
*/
MSG_ID_ECD = 0xecd,
#endif
+#if PACKETVER >= 20200212
+/*20200212 to latest
+검색
+Search
+*/
+ MSG_ID_ECE = 0xece,
+/*20200212 to latest
+합주를 혼자 사용할 수 있습니다.
+*/
+ MSG_ID_ECF = 0xecf,
+/*20200212 to latest
+크바시르의 지혜가 사라집니다.
+*/
+ MSG_ID_ED0 = 0xed0,
+/*20200212 to latest
+미스틱 심포니의 효과가 부여됩니다.
+*/
+ MSG_ID_ED1 = 0xed1,
+/*20200212 to latest
+미스틱 심포니의 효과가 사라집니다.
+*/
+ MSG_ID_ED2 = 0xed2,
+/*20200212 to latest
+마법 저항력이 감소했습니다.
+*/
+ MSG_ID_ED3 = 0xed3,
+/*20200212 to latest
+게페니아 녹턴의 효과가 해제 되었습니다.
+*/
+ MSG_ID_ED4 = 0xed4,
+/*20200212 to latest
+물리 저항력이 감소했습니다.
+*/
+ MSG_ID_ED5 = 0xed5,
+/*20200212 to latest
+마인워커 랩소디 상태가 해제되었습니다.
+*/
+ MSG_ID_ED6 = 0xed6,
+/*20200212 to latest
+물리 저항력이 증가했습니다.
+*/
+ MSG_ID_ED7 = 0xed7,
+/*20200212 to latest
+뮤지컬 인터루드 상태가 해제되었습니다.
+*/
+ MSG_ID_ED8 = 0xed8,
+/*20200212 to latest
+특성 마법 공격력과 이동 속도가 증가합니다.
+*/
+ MSG_ID_ED9 = 0xed9,
+/*20200212 to latest
+저녁 노을의 세레나데 효과가 해제되었습니다.
+*/
+ MSG_ID_EDA = 0xeda,
+/*20200212 to latest
+특성 물리 공격력과 이동 속도가 증가합니다.
+*/
+ MSG_ID_EDB = 0xedb,
+/*20200212 to latest
+ 프론테라의 행진곡 효과가 해제되었습니다.
+*/
+ MSG_ID_EDC = 0xedc,
+/*20200212 to latest
+바람의 분노가 시전자에게 흘러 들어옵니다.
+*/
+ MSG_ID_EDD = 0xedd,
+/*20200212 to latest
+캘러미티 가일 상태가 해제되었습니다.
+*/
+ MSG_ID_EDE = 0xede,
+/*20200212 to latest
+바람에 의해 약점과 모습이 드러납니다.
+*/
+ MSG_ID_EDF = 0xedf,
+/*20200212 to latest
+윈드 사인 효과가 사라집니다.
+*/
+ MSG_ID_EE0 = 0xee0,
+#endif
+#if PACKETVER >= 20200304
+/*20200304 to latest
+E X P : %.1f%% ( basic 100.0%% %s %.1f%%)
+EXP: %.1f%% (basic: 100.0%%, %s: %.1f%%)
+*/
+ MSG_ID_EE1 = 0xee1,
+/*20200304 to latest
+DROP : %.1f%% ( basic 100.0%% %s %.1f%%)
+DROP: %.1f%% (basic: 100.0%%, %s: %.1f%%)
+*/
+ MSG_ID_EE2 = 0xee2,
+/*20200304 to latest
+DEATH : %.1f%% ( basic 100.0%% %s %.1f%%)
+DEATH: %.1f%% (basic: 100.0%%, %s: %.1f%%)
+*/
+ MSG_ID_EE3 = 0xee3,
+#endif
+#if PACKETVER >= 20200506
+/*20200506 to latest
+특성 마법 공격력이 증가되었습니다.
+*/
+ MSG_ID_EE4 = 0xee4,
+/*20200506 to latest
+스펠 인챈팅 효과가 해제되었습니다.
+*/
+ MSG_ID_EE5 = 0xee5,
+/*20200506 to latest
+프롬 디 어비스 효과가 해제되었습니다.
+*/
+ MSG_ID_EE6 = 0xee6,
+/*20200506 to latest
+특성 물리 공격력, 특성 마법 공격력 및 명중률이 증가되었습니다.
+*/
+ MSG_ID_EE7 = 0xee7,
+/*20200506 to latest
+어비스 슬레이어 효과가 해제되었습니다.
+*/
+ MSG_ID_EE8 = 0xee8,
+#endif
+#if PACKETVER >= 20200617
+/*20200617 to latest
+캐릭터 생성에 제한이 있을 수 있습니다.
+*/
+ MSG_ID_EE9 = 0xee9,
+/*20200617 to latest
+월드가 포화상태입니다. 다른 월드를 이용해 주세요.
+*/
+ MSG_ID_EEA = 0xeea,
+#endif
+#if PACKETVER >= 20200701
+/*20200701 to latest
+채팅차단해제(수신거부해제)
+*/
+ MSG_ID_EEB = 0xeeb,
+/*20200701 to latest
+채팅차단(수신거부)
+*/
+ MSG_ID_EEC = 0xeec,
+#endif
};
#endif /* MAP_MESSAGES_ZERO_H */
diff --git a/src/map/mob.c b/src/map/mob.c
index 0830e5a5a..849b962a1 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -78,6 +78,7 @@ struct mob_interface *mob;
// Move probability for mobs away from players (rate of 1000 minute)
// in Aegis, this is 100% for mobs that have been activated by players and none otherwise.
#define MOB_LAZYMOVEPERC(md) ((md)->state.spotted?1000:0)
+#define MOB_MAX_CASTTIME (10 * 60 * 1000) // Maximum cast time for monster skills. (10 minutes)
#define MOB_MAX_DELAY (24*3600*1000)
#define MAX_MINCHASE 30 //Max minimum chase value to use for mobs.
#define RUDE_ATTACKED_COUNT 2 //After how many rude-attacks should the skill be used?
@@ -446,6 +447,9 @@ static bool mob_ksprotected(struct block_list *src, struct block_list *target)
if( !battle_config.ksprotection )
return false; // KS Protection Disabled
+ if (status->isdead(target) != 0)
+ return false; // Target is dead.
+
if( !(md = BL_CAST(BL_MOB,target)) )
return false; // Target is not MOB
@@ -1462,7 +1466,7 @@ static int mob_ai_sub_hard_slavemob(struct mob_data *md, int64 tick)
// If master is BL_MOB and in battle, lock & chase to master's target instead, unless configured not to.
if ((battle_config.slave_chase_masters_chasetarget == 0 || (m_md != NULL && !mob->is_in_battle_state(m_md)))
&& map->search_freecell(&md->bl, bl->m, &x, &y, MOB_SLAVEDISTANCE, MOB_SLAVEDISTANCE, 1)
- && unit->walktoxy(&md->bl, x, y, 0))
+ && unit->walk_toxy(&md->bl, x, y, 0) == 0)
return 1;
}
} else if (bl->m != md->bl.m && map_flag_gvg(md->bl.m)) {
@@ -1519,7 +1523,7 @@ static int mob_unlocktarget(struct mob_data *md, int64 tick)
FALLTHROUGH
case MSS_IDLE:
// Idle skill.
- if (!(++md->ud.walk_count%IDLE_SKILL_INTERVAL) && mob->skill_use(md, tick, -1))
+ if ((++md->ud.walk_count % IDLE_SKILL_INTERVAL) == 0 && mob->skill_use(md, tick, -1) == 0)
break;
//Random walk.
if (!md->master_id &&
@@ -1544,7 +1548,7 @@ static int mob_unlocktarget(struct mob_data *md, int64 tick)
unit->set_target(&md->ud, 0);
}
if(battle_config.official_cell_stack_limit && map->count_oncell(md->bl.m, md->bl.x, md->bl.y, BL_CHAR|BL_NPC, 0x1 | 0x2) > battle_config.official_cell_stack_limit) {
- unit->walktoxy(&md->bl, md->bl.x, md->bl.y, 8);
+ unit->walk_toxy(&md->bl, md->bl.x, md->bl.y, 8);
}
return 0;
@@ -1576,9 +1580,9 @@ static int mob_randomwalk(struct mob_data *md, int64 tick)
x+=md->bl.x;
y+=md->bl.y;
- if (((x != md->bl.x) || (y != md->bl.y)) && map->getcell(md->bl.m, &md->bl, x, y, CELL_CHKPASS) && unit->walktoxy(&md->bl, x, y, 8)) {
+ if ((x != md->bl.x || y != md->bl.y) && map->getcell(md->bl.m, &md->bl, x, y, CELL_CHKPASS) != 0
+ && unit->walk_toxy(&md->bl, x, y, 8) == 0)
break;
- }
}
if(i==retrycount){
md->move_fail_count++;
@@ -1699,7 +1703,7 @@ static bool mob_ai_sub_hard(struct mob_data *md, int64 tick)
|| !mob->can_reach(md, tbl, md->min_chase, MSS_RUSH)
)
&& md->state.attacked_count++ >= RUDE_ATTACKED_COUNT
- && !mob->skill_use(md, tick, MSC_RUDEATTACKED) // If can't rude Attack
+ && mob->skill_use(md, tick, MSC_RUDEATTACKED) == 0 // If can't rude Attack
&& can_move && unit->escape(&md->bl, tbl, rnd()%10 +1) // Attempt escape
) {
//Escaped
@@ -1727,7 +1731,7 @@ static bool mob_ai_sub_hard(struct mob_data *md, int64 tick)
) {
// Rude attacked
if (md->state.attacked_count++ >= RUDE_ATTACKED_COUNT
- && !mob->skill_use(md, tick, MSC_RUDEATTACKED) && can_move
+ && mob->skill_use(md, tick, MSC_RUDEATTACKED) == 0 && can_move != 0
&& !tbl && unit->escape(&md->bl, abl, rnd()%10 +1)
) {
//Escaped.
@@ -2422,6 +2426,7 @@ static int mob_dead(struct mob_data *md, struct block_list *src, int type)
nullpo_retr(3, md);
m = md->bl.m;
+ Assert_retr(false, m >= 0 && m < map->count);
mstatus = &md->status;
if( md->guardian_data && md->guardian_data->number >= 0 && md->guardian_data->number < MAX_GUARDIANS )
@@ -3387,272 +3392,344 @@ static struct block_list *mob_getmasterhpltmaxrate(struct mob_data *md, int rate
return NULL;
}
-/*==========================================
- * What a status state suits by nearby MOB is looked for.
- *------------------------------------------*/
+
+/**
+ * Checks if the passed monster/character meets the passed status change requirements
+ * and returns it by reference parameter on success.
+ *
+ * @param bl The monster/character to check.
+ * @param ap List of arguments. (Source monster, MSC_* flag, SC_* flag, reference bl.)
+ * @return Always 0.
+ *
+ **/
static int mob_getfriendstatus_sub(struct block_list *bl, va_list ap)
{
- int cond1,cond2;
- struct mob_data **fr = NULL, *md = NULL, *mmd = NULL;
- int flag=0;
-
nullpo_ret(bl);
- Assert_ret(bl->type == BL_MOB);
- md = BL_UCAST(BL_MOB, bl);
- nullpo_ret(mmd=va_arg(ap,struct mob_data *));
- if( mmd->bl.id == bl->id && !(battle_config.mob_ai&0x10) )
+ struct mob_data *md = va_arg(ap, struct mob_data *);
+
+ nullpo_ret(md);
+
+ if (md->bl.id == bl->id && (battle_config.mob_ai & 0x10) == 0)
+ return 0;
+
+ if (battle->check_target(&md->bl, bl, BCT_ENEMY) > 0)
return 0;
- if (battle->check_target(&mmd->bl,bl,BCT_ENEMY)>0)
+ int cond1 = va_arg(ap, int);
+ int cond2 = va_arg(ap, int);
+ struct block_list **fr = va_arg(ap, struct block_list **);
+
+ if ((*fr) != NULL) // A friend was already found.
return 0;
- cond1=va_arg(ap,int);
- cond2=va_arg(ap,int);
- fr=va_arg(ap,struct mob_data **);
- if( cond2==-1 ){
- int j;
- for(j=SC_COMMON_MIN;j<=SC_COMMON_MAX && !flag;j++){
- if ((flag=(md->sc.data[j] != NULL))) //Once an effect was found, break out. [Skotlex]
+
+ int flag = 0;
+ struct status_change *sc = status->get_sc(bl);
+
+ if (cond2 == -1) { // Check for any of the common status alignments.
+ for (int i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++) {
+ if ((flag = (sc->data[i] != NULL)) != 0) // Once an effect was found, break out. [Skotlex]
break;
}
- }else
- flag=( md->sc.data[cond2] != NULL );
- if( flag^( cond1==MSC_FRIENDSTATUSOFF ) )
- (*fr)=md;
+ } else {
+ flag = (sc->data[cond2] != NULL);
+ }
+
+ if ((flag ^ (cond1 == MSC_FRIENDSTATUSOFF)) != 0)
+ (*fr) = bl;
return 0;
}
-static struct mob_data *mob_getfriendstatus(struct mob_data *md, int cond1, int cond2)
+/**
+ * Gets a random monster/character within a range of 8 cells around md.
+ * If md is summoned (no monster slave!) a character is picker, otherwise a monster.
+ *
+ * @param md The monster which tries to cast a skill.
+ * @param cond1 Whether to check for active or inactive status change. (MSC_FRIENDSTATUSON/MSC_FRIENDSTATUSOFF)
+ * @param cond2 The status change (SC_* flag) to check.
+ * @return A randomly picked monster/character within range.
+ *
+ **/
+static struct block_list *mob_getfriendstatus(struct mob_data *md, int cond1, int cond2)
{
- struct mob_data* fr = NULL;
nullpo_ret(md);
- map->foreachinrange(mob->getfriendstatus_sub, &md->bl, 8,BL_MOB, md,cond1,cond2,&fr);
+ int type = (md->special_state.ai != AI_NONE) ? BL_PC : BL_MOB;
+ struct block_list *fr = NULL;
+
+ map->foreachinrange(mob->getfriendstatus_sub, &md->bl, 8, type, md, cond1, cond2, &fr);
+
return fr;
}
-/*==========================================
- * Skill use judging
- *------------------------------------------*/
-static int mobskill_use(struct mob_data *md, int64 tick, int event)
+/**
+ * Checks if skill cast condition in fulfilled and executes the skill in case of success.
+ *
+ * @param md The monster which tries to cast a skill.
+ * @param tick The timestamp of skill execution.
+ * @param event The MSC_* flag which triggered the skill execution. (-1 for non-event skill conditions.)
+ * @return 0 on success, 1 on failure.
+ *
+ **/
+static int mob_skill_use(struct mob_data *md, int64 tick, int event)
{
- struct mob_skill *ms;
- struct block_list *fbl = NULL; //Friend bl, which can either be a BL_PC or BL_MOB depending on the situation. [Skotlex]
- struct block_list *bl;
- struct mob_data *fmd = NULL;
- int i,j,n;
-
nullpo_ret(md);
- nullpo_ret(ms = md->db->skill);
- if (!battle_config.mob_skill_rate || md->ud.skilltimer != INVALID_TIMER || !md->db->maxskill)
- return 0;
+ struct mob_skill *ms = md->db->skill;
+
+ nullpo_ret(ms);
+
+ if (battle_config.mob_skill_rate == 0 || md->ud.skilltimer != INVALID_TIMER || md->db->maxskill == 0)
+ return 1;
if (event == -1 && DIFF_TICK(md->ud.canact_tick, tick) > 0)
- return 0; //Skill act delay only affects non-event skills.
+ return 1; // Skill act delay only affects non-event skill conditions.
- //Pick a starting position and loop from that.
- i = (battle_config.mob_ai&0x100) ? rnd()%md->db->maxskill : 0;
- for (n = 0; n < md->db->maxskill; i++, n++) {
- int c2, flag = 0;
+ // Pick a starting position and loop from that.
+ int skill_idx = ((battle_config.mob_ai & 0x100) != 0) ? rnd() % md->db->maxskill : 0;
- if (i == md->db->maxskill)
- i = 0;
+ for (int i = 0; i < md->db->maxskill; skill_idx++, i++) {
+ if (skill_idx == md->db->maxskill)
+ skill_idx = 0;
- if (DIFF_TICK(tick, md->skilldelay[i]) < ms[i].delay)
+ if (DIFF_TICK(tick, md->skilldelay[skill_idx]) < ms[skill_idx].delay)
continue;
- c2 = ms[i].cond2;
+ enum MobSkillState state = ms[skill_idx].state;
- if (ms[i].state != md->state.skillstate) {
- if (md->state.skillstate != MSS_DEAD && (ms[i].state == MSS_ANY ||
- (ms[i].state == MSS_ANYTARGET && md->target_id && md->state.skillstate != MSS_LOOT)
- )) //ANYTARGET works with any state as long as there's a target. [Skotlex]
- ;
- else
+ if (state != md->state.skillstate) {
+ bool state_dead = (md->state.skillstate == MSS_DEAD);
+ bool any_target = (state == MSS_ANYTARGET && md->target_id != 0 && md->state.skillstate != MSS_LOOT);
+
+ // MSS_ANYTARGET works with any state as long as there's a target. [Skotlex]
+ if (state_dead || (state != MSS_ANY && !any_target))
continue;
}
- if (rnd() % 10000 > ms[i].permillage) //Lupus (max value = 10000)
+
+ if (rnd() % 10000 > ms[skill_idx].permillage)
continue;
- if (ms[i].cond1 == event)
- flag = 1; //Trigger skill.
- else if (ms[i].cond1 == MSC_SKILLUSED)
- flag = ((event & 0xffff) == MSC_SKILLUSED && ((event >> 16) == c2 || c2 == 0));
- else if(event == -1){
- //Avoid entering on defined events to avoid "hyper-active skill use" due to the overflow of calls to this function in battle.
- switch (ms[i].cond1)
- {
- case MSC_ALWAYS:
- flag = 1; break;
- case MSC_MYHPLTMAXRATE: // HP< maxhp%
- flag = get_percentage(md->status.hp, md->status.max_hp);
- flag = (flag <= c2);
- break;
- case MSC_MYHPINRATE:
- flag = get_percentage(md->status.hp, md->status.max_hp);
- flag = (flag >= c2 && flag <= ms[i].val[0]);
- break;
- case MSC_MYSTATUSON: // status[num] on
- case MSC_MYSTATUSOFF: // status[num] off
- if (!md->sc.count) {
- flag = 0;
- } else if (ms[i].cond2 == -1) {
- for (j = SC_COMMON_MIN; j <= SC_COMMON_MAX; j++)
- if ((flag = (md->sc.data[j]!=NULL)) != 0)
- break;
- } else {
- flag = (md->sc.data[ms[i].cond2]!=NULL);
+ int cast_cond = ms[skill_idx].cond1;
+ int cond_data = ms[skill_idx].cond2;
+ int flag = 0;
+ struct block_list *fbl = NULL; // Friend bl, which can either be a BL_PC or BL_MOB depending on the situation. [Skotlex]
+
+ if (cast_cond == event) {
+ flag = 1; // Trigger skill.
+ } else if (cast_cond == MSC_SKILLUSED) {
+ flag = ((event & 0xFFFF) == MSC_SKILLUSED && ((event >> 16) == cond_data || cond_data == 0));
+ } else if (event == -1) {
+ // Avoid entering on defined events to avoid "hyper-active skill use" due to the overflow of calls to this function in battle.
+ switch (cast_cond) {
+ case MSC_ALWAYS:
+ flag = 1;
+ break;
+ case MSC_MYHPLTMAXRATE: // HP <= x%
+ flag = get_percentage(md->status.hp, md->status.max_hp);
+ flag = (flag <= cond_data);
+ break;
+ case MSC_MYHPINRATE: // HP >= x% && HP <= y%
+ flag = get_percentage(md->status.hp, md->status.max_hp);
+ flag = (flag >= cond_data && flag <= ms[skill_idx].val[0]);
+ break;
+ case MSC_MYSTATUSON: // Status change x is active.
+ case MSC_MYSTATUSOFF: // Status change x is inactive.
+ if (cond_data == -1) { // Check for any of the common status alignments.
+ for (int j = SC_COMMON_MIN; j <= SC_COMMON_MAX; j++) {
+ if ((flag = (md->sc.data[j] != NULL)) != 0)
+ break;
}
- flag ^= (ms[i].cond1 == MSC_MYSTATUSOFF); break;
- case MSC_FRIENDHPLTMAXRATE: // friend HP < maxhp%
- flag = ((fbl = mob->getfriendhprate(md, 0, ms[i].cond2)) != NULL); break;
- case MSC_FRIENDHPINRATE:
- flag = ((fbl = mob->getfriendhprate(md, ms[i].cond2, ms[i].val[0])) != NULL); break;
- case MSC_FRIENDSTATUSON: // friend status[num] on
- case MSC_FRIENDSTATUSOFF: // friend status[num] off
- flag = ((fmd = mob->getfriendstatus(md, ms[i].cond1, ms[i].cond2)) != NULL); break;
- case MSC_SLAVELT: // slave < num
- flag = (mob->countslave(&md->bl) < c2 ); break;
- case MSC_ATTACKPCGT: // attack pc > num
- flag = (unit->counttargeted(&md->bl) > c2); break;
- case MSC_SLAVELE: // slave <= num
- flag = (mob->countslave(&md->bl) <= c2 ); break;
- case MSC_ATTACKPCGE: // attack pc >= num
- flag = (unit->counttargeted(&md->bl) >= c2); break;
- case MSC_AFTERSKILL:
- flag = (md->ud.skill_id == c2); break;
- case MSC_RUDEATTACKED:
- flag = (md->state.attacked_count >= RUDE_ATTACKED_COUNT);
- if (flag) md->state.attacked_count = 0; //Rude attacked count should be reset after the skill condition is met. Thanks to Komurka [Skotlex]
- break;
- case MSC_MASTERHPLTMAXRATE:
- flag = ((fbl = mob->getmasterhpltmaxrate(md, ms[i].cond2)) != NULL); break;
- case MSC_MASTERATTACKED:
- flag = (md->master_id > 0 && (fbl=map->id2bl(md->master_id)) != NULL && unit->counttargeted(fbl) > 0);
- break;
- case MSC_ALCHEMIST:
- flag = (md->state.alchemist);
- break;
+ } else {
+ flag = (md->sc.data[cond_data] != NULL);
+ }
+
+ flag ^= (cast_cond == MSC_MYSTATUSOFF);
+ break;
+ case MSC_FRIENDHPLTMAXRATE: // FriendHP <= x%
+ flag = ((fbl = mob->getfriendhprate(md, 0, cond_data)) != NULL);
+ break;
+ case MSC_FRIENDHPINRATE: // FriendHP >= x% && FriendHP <= y%
+ flag = ((fbl = mob->getfriendhprate(md, cond_data, ms[skill_idx].val[0])) != NULL);
+ break;
+ case MSC_FRIENDSTATUSON: // Friend's status change x is active.
+ case MSC_FRIENDSTATUSOFF: // Friend's status change x is inactive.
+ flag = ((fbl = mob->getfriendstatus(md, cast_cond, cond_data)) != NULL);
+ break;
+ case MSC_SLAVELT: // Monster has less than x active slaves.
+ flag = (mob->countslave(&md->bl) < cond_data);
+ break;
+ case MSC_ATTACKPCGT: // Monster is attacked by more than x units.
+ flag = (unit->counttargeted(&md->bl) > cond_data);
+ break;
+ case MSC_SLAVELE: // Monster has x or less active slaves.
+ flag = (mob->countslave(&md->bl) <= cond_data);
+ break;
+ case MSC_ATTACKPCGE: // Monster is attacked by x or more units.
+ flag = (unit->counttargeted(&md->bl) >= cond_data);
+ break;
+ case MSC_AFTERSKILL: // Monster used skill x, or any skill if x is 0.
+ flag = (md->ud.skill_id == cond_data || cond_data == 0);
+ break;
+ case MSC_RUDEATTACKED: // Monster was rude attacked RUDE_ATTACKED_COUNT or more times.
+ flag = (md->state.attacked_count >= RUDE_ATTACKED_COUNT);
+
+ // Rude attacked count should be reset after the skill condition is met. Thanks to Komurka [Skotlex]
+ if (flag)
+ md->state.attacked_count = 0;
+
+ break;
+ case MSC_MASTERHPLTMAXRATE: // MasterHP < x%
+ flag = ((fbl = mob->getmasterhpltmaxrate(md, cond_data)) != NULL);
+ break;
+ case MSC_MASTERATTACKED: // Monster's master is under attack.
+ flag = (md->master_id > 0 && (fbl = map->id2bl(md->master_id)) != NULL);
+ flag = (fbl != NULL && unit->counttargeted(fbl) > 0);
+ break;
+ case MSC_ALCHEMIST: // Monster was summoned by an Alchemist.
+ flag = (md->state.alchemist != 0);
+ break;
}
}
- if (!flag)
- continue; //Skill requisite failed to be fulfilled.
+ if (flag == 0) // Skill cast condition not fulfilled.
+ continue;
- //Execute skill
- if (skill->get_casttype(ms[i].skill_id) == CAST_GROUND) {//Ground skill.
- short x, y;
- switch (ms[i].target) {
- case MST_RANDOM: //Pick a random enemy within skill range.
- bl = battle->get_enemy(&md->bl, DEFAULT_ENEMY_TYPE(md),
- skill->get_range2(&md->bl, ms[i].skill_id, ms[i].skill_lv));
- break;
- case MST_TARGET:
- case MST_AROUND5:
- case MST_AROUND6:
- case MST_AROUND7:
- case MST_AROUND8:
- bl = map->id2bl(md->target_id);
- break;
- case MST_MASTER:
- bl = &md->bl;
- if (md->master_id)
- bl = map->id2bl(md->master_id);
- if (bl) //Otherwise, fall through.
- break;
- FALLTHROUGH
- case MST_FRIEND:
- bl = fbl?fbl:(fmd?&fmd->bl:&md->bl);
- break;
- default:
- bl = &md->bl;
+ // Execute skill.
+ if (skill->get_casttype(ms[skill_idx].skill_id) == CAST_GROUND) { // Ground skill.
+ int target_type = ms[skill_idx].target;
+ int skill_range = skill->get_range2(&md->bl, ms[skill_idx].skill_id, ms[skill_idx].skill_lv);
+ struct block_list *bl;
+
+ switch (target_type) {
+ case MST_RANDOM: // Pick a random enemy within skill range. Skill center is monster position.
+ bl = battle->get_enemy(&md->bl, DEFAULT_ENEMY_TYPE(md), skill_range);
+ break;
+ case MST_TARGET: // Monster's current target is within skill range. Skill center is monster position.
+ case MST_AROUND5: // Monster's current target is within skill range. Skill center is a random cell within a range of 1.
+ case MST_AROUND6: // Monster's current target is within skill range. Skill center is a random cell within a range of 2.
+ case MST_AROUND7: // Monster's current target is within skill range. Skill center is a random cell within a range of 3.
+ case MST_AROUND8: // Monster's current target is within skill range. Skill center is a random cell within a range of 4.
+ bl = map->id2bl(md->target_id);
+ break;
+ case MST_MASTER: // Monster's master is within skill range. Skill center is monster position.
+ // If monster has no master, use the monster as target,
+ bl = (md->master_id != 0) ? map->id2bl(md->master_id) : &md->bl;
+
+ if (bl != NULL)
break;
+
+ // If monster has a master but master wasn't found, try a friend.
+ FALLTHROUGH
+ case MST_FRIEND: // Monster's friend is within skill range. Skill center is monster position.
+ bl = (fbl != NULL) ? fbl : &md->bl;
+ break;
+ default: // Monster is within skill range. Skill center is monster position.
+ bl = &md->bl;
+ break;
}
- if (!bl) continue;
-
- x = bl->x;
- y = bl->y;
- // Look for an area to cast the spell around...
- if (ms[i].target >= MST_AROUND1 || ms[i].target >= MST_AROUND5) {
- j = ms[i].target >= MST_AROUND1?
- (ms[i].target-MST_AROUND1) +1:
- (ms[i].target-MST_AROUND5) +1;
- map->search_freecell(&md->bl, md->bl.m, &x, &y, j, j, 3);
+
+ if (bl == NULL) // No target found.
+ continue;
+
+ short x = bl->x;
+ short y = bl->y;
+
+ // Find a target cell.
+ if (target_type >= MST_AROUND5 && target_type <= MST_AROUND) {
+ int range = target_type - ((target_type >= MST_AROUND1) ? MST_AROUND1 : MST_AROUND5) + 1;
+ map->search_freecell(&md->bl, md->bl.m, &x, &y, range, range, 3);
}
- md->skill_idx = i;
+
+ md->skill_idx = skill_idx;
map->freeblock_lock();
- if( !battle->check_range(&md->bl,bl,skill->get_range2(&md->bl, ms[i].skill_id,ms[i].skill_lv))
- || !unit->skilluse_pos2(&md->bl, x, y,ms[i].skill_id, ms[i].skill_lv,ms[i].casttime, ms[i].cancel)
- ) {
+
+ uint16 sk_id = ms[skill_idx].skill_id;
+ uint16 sk_lv = ms[skill_idx].skill_lv;
+ int casttime = ms[skill_idx].casttime;
+ short cancel = ms[skill_idx].cancel;
+
+ if (!battle->check_range(&md->bl, bl, skill_range)
+ || unit->skilluse_pos2(&md->bl, x, y, sk_id, sk_lv, casttime, cancel) == 0) {
map->freeblock_unlock();
continue;
}
- } else {
- //Targeted skill
- switch (ms[i].target) {
- case MST_RANDOM: //Pick a random enemy within skill range.
- bl = battle->get_enemy(&md->bl, DEFAULT_ENEMY_TYPE(md),
- skill->get_range2(&md->bl, ms[i].skill_id, ms[i].skill_lv));
- break;
- case MST_TARGET:
- bl = map->id2bl(md->target_id);
- break;
- case MST_MASTER:
- bl = &md->bl;
- if (md->master_id)
- bl = map->id2bl(md->master_id);
- if (bl) //Otherwise, fall through.
- break;
- FALLTHROUGH
- case MST_FRIEND:
- if (fbl) {
- bl = fbl;
- break;
- } else if (fmd) {
- bl = &fmd->bl;
- break;
- } // else fall through
- FALLTHROUGH
- default:
- bl = &md->bl;
+ } else { // Targeted skill.
+ int skill_range = skill->get_range2(&md->bl, ms[skill_idx].skill_id, ms[skill_idx].skill_lv);
+ struct block_list *bl;
+
+ switch (ms[skill_idx].target) {
+ case MST_RANDOM: // Pick a random enemy within skill range.
+ bl = battle->get_enemy(&md->bl, DEFAULT_ENEMY_TYPE(md), skill_range);
+ break;
+ case MST_TARGET: // Monster's current target is within skill range.
+ bl = map->id2bl(md->target_id);
+ break;
+ case MST_MASTER: // Monster's master is within skill range.
+ // If monster has no master, use the monster as target,
+ bl = (md->master_id != 0) ? map->id2bl(md->master_id) : &md->bl;
+
+ if (bl != NULL)
break;
+
+ // If monster has a master but master wasn't found, try a friend.
+ FALLTHROUGH
+ case MST_FRIEND: // Monster's friend is within skill range.
+ bl = (fbl != NULL) ? fbl : &md->bl;
+ break;
+ default: // Monster is within skill range.
+ bl = &md->bl;
+ break;
}
- if (!bl) continue;
- md->skill_idx = i;
+ if (bl == NULL) // No target found.
+ continue;
+
+ md->skill_idx = skill_idx;
map->freeblock_lock();
- if( !battle->check_range(&md->bl,bl,skill->get_range2(&md->bl, ms[i].skill_id,ms[i].skill_lv))
- || !unit->skilluse_id2(&md->bl, bl->id,ms[i].skill_id, ms[i].skill_lv,ms[i].casttime, ms[i].cancel)
- ) {
+
+ uint16 sk_id = ms[skill_idx].skill_id;
+ uint16 sk_lv = ms[skill_idx].skill_lv;
+ int casttime = ms[skill_idx].casttime;
+ short cancel = ms[skill_idx].cancel;
+
+ if (!battle->check_range(&md->bl, bl, skill_range)
+ || unit->skilluse_id2(&md->bl, bl->id, sk_id, sk_lv, casttime, cancel) == 0) {
map->freeblock_unlock();
continue;
}
}
- //Skill used. Post-setups...
- if ( ms[ i ].msg_id ){ //Display color message [SnakeDrak]
- struct mob_chat *mc = mob->chat(ms[i].msg_id);
+
+ // Skill used.
+ if (ms[skill_idx].msg_id != 0) { // Display color message. [SnakeDrak]
char temp[CHAT_SIZE_MAX];
char name[NAME_LENGTH];
- snprintf(name, sizeof name,"%s", md->name);
- strtok(name, "#"); // discard extra name identifier if present [Daegaladh]
- safesnprintf(temp, sizeof temp,"%s : %s", name, mc->msg);
+ struct mob_chat *mc = mob->chat(ms[skill_idx].msg_id);
+
+ snprintf(name, sizeof(name), "%s", md->name);
+ strtok(name, "#"); // Discard extra name identifier if present. [Daegaladh]
+ safesnprintf(temp, sizeof(temp), "%s : %s", name, mc->msg);
clif->messagecolor(&md->bl, mc->color, temp);
}
- if(!(battle_config.mob_ai&0x200)) { //pass on delay to same skill.
- for (j = 0; j < md->db->maxskill; j++)
- if (md->db->skill[j].skill_id == ms[i].skill_id)
- md->skilldelay[j]=tick;
- } else
- md->skilldelay[i]=tick;
+
+ if ((battle_config.mob_ai & 0x200) == 0) { // Pass on delay to same skill.
+ for (int j = 0; j < md->db->maxskill; j++) {
+ if (md->db->skill[j].skill_id == ms[skill_idx].skill_id)
+ md->skilldelay[j] = tick;
+ }
+ } else {
+ md->skilldelay[skill_idx] = tick;
+ }
+
map->freeblock_unlock();
- return 1;
+ return 0;
}
- //No skill was used.
+
+ // No skill was used.
md->skill_idx = -1;
- return 0;
+ return 1;
}
+
/*==========================================
* Skill use event processing
*------------------------------------------*/
@@ -3663,7 +3740,7 @@ static int mobskill_event(struct mob_data *md, struct block_list *src, int64 tic
nullpo_ret(md);
nullpo_ret(src);
if(md->bl.prev == NULL || md->status.hp <= 0)
- return 0;
+ return 1;
if (md->special_state.ai == AI_SPHERE) {//LOne WOlf explained that ANYONE can trigger the marine countdown skill. [Skotlex]
md->state.alchemist = 1;
@@ -3682,8 +3759,10 @@ static int mobskill_event(struct mob_data *md, struct block_list *src, int64 tic
res = mob->skill_use(md, tick, MSC_CLOSEDATTACKED);
else if (flag&BF_LONG && !(flag&BF_MAGIC)) //Long-attacked should not include magic.
res = mob->skill_use(md, tick, MSC_LONGRANGEATTACKED);
+ else if ((flag & BF_MAGIC) != 0)
+ res = mob->skill_use(md, tick, MSC_MAGICATTACKED);
- if (!res)
+ if (res != 0)
//Restore previous target only if skill condition failed to trigger. [Skotlex]
md->target_id = target_id;
//Otherwise check if the target is an enemy, and unlock if needed.
@@ -3793,7 +3872,7 @@ static int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16
continue;
/// Normal aggressive mob. Disable skills that cannot help fighting against players. (Those with flags UF_NOMOB and UF_NOPC are specific to always aid players!) [Skotlex]
- if (flag == 0 && skill->get_unit_id(skill_id, 0) != 0 &&
+ if (flag == 0 && skill->get_unit_id(skill_id, sd->status.skill[idx].lv, 0) != 0 &&
(skill->get_unit_flag(skill_id) & (UF_NOMOB | UF_NOPC)) > 0)
continue;
@@ -3826,7 +3905,7 @@ static int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16
mob_skills[i].state = MSS_IDLE;
mob_skills[i].target = MST_AROUND2;
mob_skills[i].delay = 60000;
- } else if (skill->get_unit_target(skill_id) == BCT_ENEMY) { /// Target Enemy.
+ } else if (skill->get_unit_target(skill_id, sd->status.skill[idx].lv) == BCT_ENEMY) { /// Target Enemy.
mob_skills[i].state = MSS_ANYTARGET;
mob_skills[i].target = MST_TARGET;
mob_skills[i].cond1 = MSC_ALWAYS;
@@ -3907,8 +3986,8 @@ static int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16
}
}
- mob_skills[i].permillage *= battle_config.mob_skill_rate / 100;
- mob_skills[i].delay *= battle_config.mob_skill_delay / 100;
+ mob_skills[i].permillage = mob_skills[i].permillage * battle_config.mob_skill_rate / 100;
+ mob_skills[i].delay = mob_skills[i].delay * battle_config.mob_skill_delay / 100;
db->maxskill = ++i;
}
@@ -5012,12 +5091,10 @@ static int mob_read_db_sub(struct config_setting_t *mobt, int n, const char *sou
md.status.def_ele = i32;
md.status.ele_lv = value;
} else if (!inherit) {
- ShowWarning("mob_read_db_sub: Missing element for monster ID %d.\n", md.mob_id);
md.status.def_ele = ELE_NEUTRAL;
md.status.ele_lv = 1;
}
} else if (!inherit) {
- ShowWarning("mob_read_db_sub: Missing element for monster ID %d.\n", md.mob_id);
md.status.def_ele = ELE_NEUTRAL;
md.status.ele_lv = 1;
}
@@ -5491,115 +5568,134 @@ static bool mob_skill_db_libconfig_sub(struct config_setting_t *it, int n)
return true;
}
+/**
+ * Reads a single monster skill from DB.
+ *
+ * @param it The libconfig settings block, which contains the skill data.
+ * @param n The skill data block's index within the parent monster block.
+ * @param mob_id The monster's ID.
+ * @return true on success, false on failure.
+ *
+ **/
static bool mob_skill_db_libconfig_sub_skill(struct config_setting_t *it, int n, int mob_id)
{
- int i, j, idx = 0;
- int i32;
- int skill_id = 0;
- int skill_idx = 0;
- bool clearskills = false;
- const char *name = config_setting_name(it);
- struct mob_skill *ms, gms;
-
nullpo_retr(false, it);
Assert_retr(false, mob_id <= 0 || mob->db(mob_id) != mob->dummy);
- if (!(skill_id = skill->name2id(name))) {
- ShowWarning("mob_skill_db_libconfig_sub_skill: Non existant skill id %d in monster %d, skipping.\n", skill_id, mob_id);
+ int skill_id = 0;
+ const char *name = config_setting_name(it);
+ const char *mob_str = (mob_id < 0) ? "global ID" : "monster";
+
+ if ((skill_id = skill->name2id(name)) == 0) {
+ ShowWarning("%s: Non existant skill %d in %s %d, skipping.\n", __func__, skill_id, mob_str, mob_id);
return false;
}
+ const char *skill_name = skill->get_name(skill_id);
+ bool clearskills = false;
+
// If ClearSkills flag is enabled clear all the previous skills.
- if (libconfig->setting_lookup_bool_real(it, "ClearSkills", &clearskills) && clearskills) {
- if (mob_id < 0) // Clearing skills globaly is not supported
+ if (libconfig->setting_lookup_bool_real(it, "ClearSkills", &clearskills) == CONFIG_TRUE && clearskills) {
+ if (mob_id < 0) {
+ ShowError("%s: Global skill clearing is not supported, skipping. (Global ID %d, skill %d (%s).)\n",
+ __func__, mob_id, skill_id, skill_name);
return false;
+ }
+
memset(mob->db_data[mob_id]->skill, 0, sizeof(struct mob_skill) * MAX_MOBSKILL);
mob->db_data[mob_id]->maxskill = 0;
return true;
}
- if (mob_id < 0) {
- // Prepare global skill. [Skotlex]
+ struct mob_skill *ms;
+
+ if (mob_id < 0) { // Prepare global skill. [Skotlex]
+ struct mob_skill gms;
memset(&gms, 0, sizeof (struct mob_skill));
ms = &gms;
} else {
+ int idx = 0;
+
ARR_FIND(0, MAX_MOBSKILL, idx, (ms = &mob->db_data[mob_id]->skill[idx])->skill_id == 0);
+
if (idx == MAX_MOBSKILL) {
- ShowError("mob_skill_db_libconfig_sub_skill: Too many skills for monster %d\n", mob_id);
+ ShowError("%s: Too many skills for monster %d, skipping.\n", __func__, mob_id);
return false;
}
+
+ mob->db_data[mob_id]->maxskill = idx + 1;
}
+
ms->skill_id = skill_id;
+ int i32 = MSS_ANY;
if (mob->lookup_const(it, "SkillState", &i32) && (i32 < MSS_ANY || i32 > MSS_ANYTARGET)) {
- ShowWarning("mob_skill_db_libconfig_sub_skill: Invalid skill state %d for skill id %d in monster %d, defaulting to MSS_ANY.\n", i32, skill_id, mob_id);
+ ShowWarning("%s: Invalid skill state %d for skill %d (%s) in %s %d, defaulting to MSS_ANY.\n",
+ __func__, i32, skill_id, skill_name, mob_str, mob_id);
i32 = MSS_ANY;
}
ms->state = i32;
- if (!libconfig->setting_lookup_int(it, "SkillLevel", &i32) || i32 <= 0)
- i32 = 1;
- ms->skill_lv = i32 > battle_config.mob_max_skilllvl ? battle_config.mob_max_skilllvl : i32; //we strip max skill level
+ int res = libconfig->setting_lookup_int(it, "SkillLevel", &i32);
+ ms->skill_lv = (res == CONFIG_FALSE) ? 1 : cap_value(i32, 1, battle_config.mob_max_skilllvl);
- //Apply battle_config modifiers to rate (permillage) and delay [Skotlex]
- if (libconfig->setting_lookup_int(it, "Rate", &i32))
- ms->permillage = i32;
+ res = libconfig->setting_lookup_int(it, "Rate", &i32);
+ ms->permillage = (res == CONFIG_FALSE) ? 1 : cap_value(i32, 1, 10000);
+ // Apply battle_config modifier to rate (permillage).
if (battle_config.mob_skill_rate != 100)
ms->permillage = ms->permillage * battle_config.mob_skill_rate / 100;
+
if (ms->permillage > 10000)
ms->permillage = 10000;
- else if (ms->permillage == 0 && battle_config.mob_skill_rate)
+ else if (ms->permillage == 0 && battle_config.mob_skill_rate != 0)
ms->permillage = 1;
- if (libconfig->setting_lookup_int(it, "CastTime", &i32) && i32 > 0)
- ms->casttime = i32;
+ res = libconfig->setting_lookup_int(it, "CastTime", &i32);
+ ms->casttime = (res == CONFIG_FALSE) ? 0 : cap_value(i32, 0, MOB_MAX_CASTTIME);
+
+ res = libconfig->setting_lookup_int(it, "Delay", &i32);
+ ms->delay = (res == CONFIG_FALSE) ? 0 : cap_value(i32, 0, MOB_MAX_DELAY);
- if (libconfig->setting_lookup_int(it, "Delay", &i32))
- ms->delay = i32;
+ // Apply battle_config modifier to delay.
if (battle_config.mob_skill_delay != 100)
ms->delay = ms->delay * battle_config.mob_skill_delay / 100;
- if (ms->delay < 0 || ms->delay > MOB_MAX_DELAY) //time overflow?
- ms->delay = MOB_MAX_DELAY;
- if (libconfig->setting_lookup_bool(it, "Cancelable", &i32))
- ms->cancel = (i32 == 0) ? 0 : 1;
+ ms->delay = min(ms->delay, MOB_MAX_DELAY);
+
+ res = libconfig->setting_lookup_bool(it, "Cancelable", &i32);
+ ms->cancel = (res == CONFIG_FALSE) ? 0 : cap_value(i32, 0, 1);
+ i32 = MST_TARGET;
if (mob->lookup_const(it, "SkillTarget", &i32) && (i32 < MST_TARGET || i32 > MST_AROUND)) {
- ShowWarning("mob_skill_db_libconfig_sub_skill: Invalid skill target %d for skill id %d in monster %d, defaulting to MST_TARGET.\n", i32, skill_id, mob_id);
- ms->target = MST_TARGET;
+ ShowWarning("%s: Invalid skill target %d for skill %d (%s) in %s %d, defaulting to MST_TARGET.\n",
+ __func__, i32, skill_id, skill_name, mob_str, mob_id);
+ i32 = MST_TARGET;
}
ms->target = i32;
- //Check that the target condition is right for the skill type. [Skotlex]
- skill_idx = skill->get_index(skill_id);
- if (skill->get_casttype2(skill_idx) == CAST_GROUND) {//Ground skill.
- if (ms->target > MST_AROUND) {
- ShowWarning("mob_skill_db_libconfig_sub_skill: Wrong mob skill target for ground skill %d (%s) for %s.\n",
- ms->skill_id, skill->dbs->db[skill_idx].name,
- mob_id < 0 ? "all mobs" : mob->db_data[mob_id]->sprite);
- ms->target = MST_TARGET;
- }
- } else if (ms->target > MST_MASTER) {
- ShowWarning("mob_skill_db_libconfig_sub_skill: Wrong mob skill target 'around' for non-ground skill %d (%s) for %s.\n",
- ms->skill_id, skill->dbs->db[skill_idx].name,
- mob_id < 0 ? "all mobs" : mob->db_data[mob_id]->sprite);
+ // Check the target condition for non-ground skills. (Ground skills can use every target.)
+ if (skill->get_casttype2(skill->get_index(skill_id)) != CAST_GROUND && ms->target > MST_MASTER) {
+ ShowWarning("%s: Wrong skill target %d for non-ground skill %d (%s) in %s %d, defaulting to MST_TARGET.\n",
+ __func__, ms->target, skill_id, skill_name, mob_str, mob_id);
ms->target = MST_TARGET;
}
- if (mob->lookup_const(it, "CastCondition", &i32) && (i32 < MSC_ALWAYS || i32 > MSC_SPAWN)) {
- ShowWarning("mob_skill_db_libconfig_sub_skill: Invalid skill condition %d for skill id %d in monster %d, defaulting to MSC_ALWAYS.\n", i32, skill_id, mob_id);
- ms->cond1 = MSC_ALWAYS;
+ i32 = MSC_ALWAYS;
+ if (mob->lookup_const(it, "CastCondition", &i32) && (i32 < MSC_ALWAYS || i32 > MSC_MAGICATTACKED)) {
+ ShowWarning("%s: Invalid skill condition %d for skill id %d (%s) in %s %d, defaulting to MSC_ALWAYS.\n",
+ __func__, i32, skill_id, skill_name, mob_str, mob_id);
+ i32 = MSC_ALWAYS;
}
ms->cond1 = i32;
- if (mob->lookup_const(it, "ConditionData", &i32))
- ms->cond2 = i32;
+ ms->cond2 = !mob->lookup_const(it, "ConditionData", &i32) ? 0 : cap_value(i32, SHRT_MIN, SHRT_MAX);
- for (i = 0; i < 5; i++) {
+ for (int i = 0; i < 5; i++) {
char valname[16];
sprintf(valname, "val%1d", i);
- if (libconfig->setting_lookup_int(it, valname, &i32))
+
+ if (libconfig->setting_lookup_int(it, valname, &i32) == CONFIG_TRUE)
ms->val[i] = i32;
}
@@ -5610,60 +5706,64 @@ static bool mob_skill_db_libconfig_sub_skill(struct config_setting_t *it, int n,
if (mob_id > 0 && (uint32)ms->val[1] == mob->db(mob_id)->status.mode) {
ms->val[1] = MD_NONE;
- ms->val[4] = 1; //request to return mode to normal.
+ ms->val[4] = 1; // Request to return mode to normal.
}
}
if (ms->skill_id == NPC_EMOTION_ON && mob_id > 0 && ms->val[1] != MD_NONE) {
- //Adds a mode to the mob.
- //Remove aggressive mode when the new mob type is passive.
- if (!(ms->val[1] & MD_AGGRESSIVE))
+ // Add a mode to the mob and remove aggressive mode if the new mode is passive.
+ if ((ms->val[1] & MD_AGGRESSIVE) == 0)
ms->val[3] |= MD_AGGRESSIVE;
- ms->val[2] |= (uint32)ms->val[1]; //Add the new mode.
- ms->val[1] = MD_NONE; //Do not "set" it.
+
+ ms->val[2] |= (uint32)ms->val[1]; // Add the new mode.
+ ms->val[1] = MD_NONE; // Do not "set" it.
}
- if (libconfig->setting_lookup_int(it, "Emotion", &i32))
- ms->emotion = i32;
- else
- ms->emotion = -1;
+ res = libconfig->setting_lookup_int(it, "Emotion", &i32);
+ ms->emotion = (res == CONFIG_FALSE) ? -1 : cap_value(i32, -1, SHRT_MAX);
- if (libconfig->setting_lookup_int(it, "ChatMsgID", &i32) && i32 > 0 && i32 <= MAX_MOB_CHAT) {
- if (mob->chat_db[i32] == NULL) {
- ShowWarning("mob_skill_db_libconfig_sub_skill: Invalid msg id %d for skill id %d in monster %d, ignoring.\n", i32, skill_id, mob_id);
+ if (libconfig->setting_lookup_int(it, "ChatMsgID", &i32) == CONFIG_TRUE) {
+ if (i32 <= 0 || i32 > MAX_MOB_CHAT || mob->chat_db[i32] == NULL) {
+ ShowWarning("%s: Invalid message ID %d for skill %d (%s) in %s %d, ignoring.\n",
+ __func__, i32, skill_id, skill_name, mob_str, mob_id);
} else {
ms->msg_id = i32;
}
}
- if (mob_id < 0) {
- // Set this skill to ALL mobs. [Skotlex]
- mob_id *= -1;
- for (i = 1; i < MAX_MOB_DB; i++) {
+ if (mob_id < 0) { // Global skill assignment.
+ mob_id = -mob_id;
+
+ for (int i = 1; i < MAX_MOB_DB; i++) {
if (mob->db_data[i] == NULL)
continue;
- if (mob->db_data[i]->status.mode & MD_BOSS) {
- if (!(mob_id & 2)) //Skill not for bosses
+
+ if ((mob->db_data[i]->status.mode & MD_BOSS) != 0) {
+ if ((mob_id & 2) == 0) // Skill not for boss monsters.
continue;
} else {
- if (!(mob_id & 1)) //Skill not for normal enemies.
+ if ((mob_id & 1) == 0) // Skill not for normal monsters.
continue;
}
- ARR_FIND(0, MAX_MOBSKILL, j, mob->db_data[i]->skill[j].skill_id == 0);
- if (j == MAX_MOBSKILL)
+
+ int idx;
+
+ ARR_FIND(0, MAX_MOBSKILL, idx, mob->db_data[i]->skill[idx].skill_id == 0);
+
+ if (idx == MAX_MOBSKILL) {
+ ShowError("%s: Too many skills for monster %d in global ID %d, skipping.\n",
+ __func__, i, -mob_id);
continue;
+ }
- memcpy(&mob->db_data[i]->skill[j], ms, sizeof(struct mob_skill));
- mob->db_data[i]->maxskill = j + 1;
+ memcpy(&mob->db_data[i]->skill[idx], ms, sizeof(struct mob_skill));
+ mob->db_data[i]->maxskill = idx + 1;
}
- } else { //Skill set on a single mob.
- mob->db_data[mob_id]->maxskill = idx + 1;
}
return true;
}
-
/*==========================================
* mob_skill_db.txt reading
*------------------------------------------*/
@@ -6059,7 +6159,7 @@ void mob_defaults(void)
mob->getmasterhpltmaxrate = mob_getmasterhpltmaxrate;
mob->getfriendstatus_sub = mob_getfriendstatus_sub;
mob->getfriendstatus = mob_getfriendstatus;
- mob->skill_use = mobskill_use;
+ mob->skill_use = mob_skill_use;
mob->skill_event = mobskill_event;
mob->is_clone = mob_is_clone;
mob->clone_spawn = mob_clone_spawn;
diff --git a/src/map/mob.h b/src/map/mob.h
index 8839809f2..59b288fcc 100644
--- a/src/map/mob.h
+++ b/src/map/mob.h
@@ -35,7 +35,7 @@ struct hplugin_data_store;
// Change this to increase the table size in your mob_db to accommodate a larger mob database.
// Be sure to note that IDs 4001 to 4048 are reserved for advanced/baby/expanded classes.
// Notice that the last 1000 entries are used for player clones, so always set this to desired value +1000
-#define MAX_MOB_DB 5000
+#define MAX_MOB_DB 22000
//The number of drops all mobs have and the max drop-slot that the steal skill will attempt to steal from.
#define MAX_MOB_DROP 10
@@ -321,6 +321,14 @@ enum {
MSC_MASTERATTACKED,
MSC_ALCHEMIST,
MSC_SPAWN,
+ MSC_MAGICATTACKED,
+};
+
+/** Special monster(-name) constants used to assign skills to a group of monsters. **/
+enum mob_group {
+ ALL_MOBS_NONBOSS = -1,
+ ALL_MOBS_BOSS = -2,
+ ALL_MOBS = -3,
};
/**
@@ -566,7 +574,7 @@ struct mob_interface {
struct block_list* (*getfriendhprate) (struct mob_data *md, int min_rate, int max_rate);
struct block_list* (*getmasterhpltmaxrate) (struct mob_data *md, int rate);
int (*getfriendstatus_sub) (struct block_list *bl, va_list ap);
- struct mob_data* (*getfriendstatus) (struct mob_data *md, int cond1, int cond2);
+ struct block_list *(*getfriendstatus) (struct mob_data *md, int cond1, int cond2);
int (*skill_use) (struct mob_data *md, int64 tick, int event);
int (*skill_event) (struct mob_data *md, struct block_list *src, int64 tick, int flag);
int (*is_clone) (int class_);
diff --git a/src/map/npc.c b/src/map/npc.c
index e66888a74..7a3fa9c3f 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -389,7 +389,10 @@ static int npc_event_export(struct npc_data *nd, int i)
Assert_ret(i >= 0 && i < nd->u.scr.label_list_num);
lname = nd->u.scr.label_list[i].name;
pos = nd->u.scr.label_list[i].pos;
- if ((lname[0] == 'O' || lname[0] == 'o') && (lname[1] == 'N' || lname[1] == 'n')) {
+
+ if ((nd->u.scr.label_list[i].flags & LABEL_IS_EXTERN) != 0
+ && ((nd->u.scr.label_list[i].flags & LABEL_IS_USERFUNC) == 0
+ || script->config.functions_as_events)) {
struct event_data *ev;
struct linkdb_node **label_linkdb = NULL;
char buf[EVENT_NAME_LENGTH];
@@ -1799,6 +1802,7 @@ static void npc_expanded_barter_fromsql(void)
) {
SqlStmt_ShowDebug(stmt);
SQL->StmtFree(stmt);
+ StrBuf->Destroy(&buf);
return;
}
@@ -2711,43 +2715,47 @@ static int npc_selllist_sub(struct map_session_data *sd, struct itemlist *item_l
char card_slot[NAME_LENGTH];
char opt_index_str[NAME_LENGTH];
char opt_value_str[NAME_LENGTH];
- int i, j;
+ char opt_param_str[NAME_LENGTH];
+ int i = 0;
+ int j = 0;
int key_nameid = 0;
int key_amount = 0;
int key_refine = 0;
- int key_attribute = 0;
+ int key_attribute = ATTR_NONE;
int key_identify = 0;
int key_card[MAX_SLOTS];
int key_opt_idx[MAX_ITEM_OPTIONS];
int key_opt_value[MAX_ITEM_OPTIONS];
+ int key_opt_param[MAX_ITEM_OPTIONS];
nullpo_ret(sd);
nullpo_ret(item_list);
nullpo_ret(nd);
// discard old contents
- script->cleararray_pc(sd, "@sold_nameid", (void*)0);
- script->cleararray_pc(sd, "@sold_quantity", (void*)0);
- script->cleararray_pc(sd, "@sold_refine", (void*)0);
- script->cleararray_pc(sd, "@sold_attribute", (void*)0);
- script->cleararray_pc(sd, "@sold_identify", (void*)0);
-
- for( j = 0; j < MAX_SLOTS; j++ )
- {// clear each of the card slot entries
+ script->cleararray_pc(sd, "@sold_nameid", (void *)0);
+ script->cleararray_pc(sd, "@sold_quantity", (void *)0);
+ script->cleararray_pc(sd, "@sold_refine", (void *)0);
+ script->cleararray_pc(sd, "@sold_attribute", (void *)0);
+ script->cleararray_pc(sd, "@sold_identify", (void *)0);
+
+ for (j = 0; j < MAX_SLOTS; j++) { // clear each of the card slot entries
key_card[j] = 0;
snprintf(card_slot, sizeof(card_slot), "@sold_card%d", j + 1);
- script->cleararray_pc(sd, card_slot, (void*)0);
+ script->cleararray_pc(sd, card_slot, (void *)0);
}
for (j = 0; j < MAX_ITEM_OPTIONS; j++) { // Clear Each item option entry
key_opt_idx[j] = 0;
key_opt_value[j] = 0;
+ key_opt_param[j] = 0;
- snprintf(opt_index_str, sizeof(opt_index_str), "@slot_opt_idx%d", j + 1);
- script->cleararray_pc(sd, opt_index_str, (void*)0);
-
- snprintf(opt_value_str, sizeof(opt_value_str), "@slot_opt_val%d", j + 1);
- script->cleararray_pc(sd, opt_value_str, (void*)0);
+ snprintf(opt_index_str, sizeof(opt_index_str), "@sold_opt_idx%d", j + 1);
+ script->cleararray_pc(sd, opt_index_str, (void *)0);
+ snprintf(opt_value_str, sizeof(opt_value_str), "@sold_opt_val%d", j + 1);
+ script->cleararray_pc(sd, opt_value_str, (void *)0);
+ snprintf(opt_param_str, sizeof(opt_param_str), "@sold_opt_param%d", j + 1);
+ script->cleararray_pc(sd, opt_param_str, (void *)0);
}
// save list of to be sold items
@@ -2760,32 +2768,31 @@ static int npc_selllist_sub(struct map_session_data *sd, struct itemlist *item_l
intptr_t attribute = item->attribute;
intptr_t identify = item->identify;
- script->setarray_pc(sd, "@sold_nameid", i, (void*)nameid, &key_nameid);
- script->setarray_pc(sd, "@sold_quantity", i, (void*)amount, &key_amount);
-
// process item based information into the arrays
- script->setarray_pc(sd, "@sold_refine", i, (void*)refine, &key_refine);
- script->setarray_pc(sd, "@sold_attribute", i, (void*)attribute, &key_attribute);
- script->setarray_pc(sd, "@sold_identify", i, (void*)identify, &key_identify);
+ script->setarray_pc(sd, "@sold_nameid", i, (void *)nameid, &key_nameid);
+ script->setarray_pc(sd, "@sold_quantity", i, (void *)amount, &key_amount);
+ script->setarray_pc(sd, "@sold_refine", i, (void *)refine, &key_refine);
+ script->setarray_pc(sd, "@sold_attribute", i, (void *)attribute, &key_attribute);
+ script->setarray_pc(sd, "@sold_identify", i, (void *)identify, &key_identify);
for (j = 0; j < MAX_SLOTS; j++) {
intptr_t card = item->card[j];
- // store each of the cards/special info from the item in the array
snprintf(card_slot, sizeof(card_slot), "@sold_card%d", j + 1);
- script->setarray_pc(sd, card_slot, i, (void*)card, &key_card[j]);
+ script->setarray_pc(sd, card_slot, i, (void *)card, &key_card[j]);
}
for (j = 0; j < MAX_ITEM_OPTIONS; j++) {
intptr_t opt_idx = item->option[j].index;
intptr_t opt_value = item->option[j].value;
+ intptr_t opt_param = item->option[j].param;
- snprintf(opt_index_str, sizeof(opt_index_str), "@slot_opt_idx%d", j + 1);
- script->setarray_pc(sd, opt_index_str, i, (void*)opt_idx, &key_opt_idx[j]);
-
- snprintf(opt_value_str, sizeof(opt_value_str), "@slot_opt_val%d", j + 1);
- script->setarray_pc(sd, opt_value_str, i, (void*)opt_value, &key_opt_value[j]);
+ snprintf(opt_index_str, sizeof(opt_index_str), "@sold_opt_idx%d", j + 1);
+ script->setarray_pc(sd, opt_index_str, i, (void *)opt_idx, &key_opt_idx[j]);
+ snprintf(opt_value_str, sizeof(opt_value_str), "@sold_opt_val%d", j + 1);
+ script->setarray_pc(sd, opt_value_str, i, (void *)opt_value, &key_opt_value[j]);
+ snprintf(opt_param_str, sizeof(opt_param_str), "@sold_opt_param%d", j + 1);
+ script->setarray_pc(sd, opt_param_str, i, (void *)opt_param, &key_opt_param[j]);
}
-
}
// invoke event
@@ -2794,104 +2801,102 @@ static int npc_selllist_sub(struct map_session_data *sd, struct itemlist *item_l
return 0;
}
-/// Player item selling to npc shop.
-///
-/// @param item_list 'n' pairs <index,amount>
-/// @return result code for clif->parse_NpcSellListSend
+/**
+ * Processes a character's request to sell items to a NPC shop.
+ *
+ * @param sd The character who wants to sell the items.
+ * @param item_list The list of items and respective amounts which should be sold.
+ * @return 1 on failure, 0 on success.
+ *
+ **/
static int npc_selllist(struct map_session_data *sd, struct itemlist *item_list)
{
- int64 z;
- int i,skill_t, skill_idx = skill->get_index(MC_OVERCHARGE);
- struct npc_data *nd;
- bool duplicates[MAX_INVENTORY] = { 0 };
-
nullpo_retr(1, sd);
nullpo_retr(1, item_list);
- if( ( nd = npc->checknear(sd, map->id2bl(sd->npc_shopid)) ) == NULL ) {
+ struct npc_data *nd = npc->checknear(sd, map->id2bl(sd->npc_shopid));
+
+ if (nd == NULL)
return 1;
- }
- if( nd->subtype != SHOP ) {
- if (!(nd->subtype == SCRIPT && nd->u.scr.shop && (nd->u.scr.shop->type == NST_ZENY || nd->u.scr.shop->type == NST_MARKET)))
+ if (nd->subtype != SHOP) {
+ if (nd->subtype != SCRIPT || nd->u.scr.shop == NULL || (nd->u.scr.shop->type != NST_ZENY && nd->u.scr.shop->type != NST_MARKET))
return 1;
}
- z = 0;
-
if (sd->status.zeny >= MAX_ZENY && nd->master_nd == NULL)
return 1;
- // verify the sell list
- for (i = 0; i < VECTOR_LENGTH(*item_list); i++) {
+ bool duplicates[MAX_INVENTORY] = { false };
+ int64 z = 0;
+
+ // Verify the sell list.
+ for (int i = 0; i < VECTOR_LENGTH(*item_list); i++) {
struct itemlist_entry *entry = &VECTOR_INDEX(*item_list, i);
- int nameid, value, idx = entry->id;
+ int idx = entry->id;
- if (idx >= sd->status.inventorySize || idx < 0 || entry->amount < 0) {
+ if (idx >= sd->status.inventorySize || idx < 0 || entry->amount < 0)
return 1;
- }
- if (duplicates[idx]) {
- // Sanity check. The client sends each inventory index at most once [Haru]
+ if (duplicates[idx]) // Sanity check. The client sends each inventory index at most once. [Haru]
return 1;
- }
+
duplicates[idx] = true;
- nameid = sd->status.inventory[idx].nameid;
+ int nameid = sd->status.inventory[idx].nameid;
- if (!nameid || !sd->inventory_data[idx] || sd->status.inventory[idx].amount < entry->amount) {
+ if (nameid == 0 || sd->inventory_data[idx] == NULL || sd->status.inventory[idx].amount < entry->amount)
return 1;
- }
- if (nd->master_nd) {
- // Script-controlled shops decide by themselves, what can be sold and at what price.
+ if (nd->master_nd != NULL) // Script-controlled shops decide by themselves, what can be sold and at what price.
continue;
- }
- value = pc->modifysellvalue(sd, sd->inventory_data[idx]->value_sell);
+ int value = pc->modifysellvalue(sd, sd->inventory_data[idx]->value_sell);
z += (int64)value * entry->amount;
}
- if( nd->master_nd ) { // Script-controlled shops
+ if (nd->master_nd != NULL) // Script-controlled shops.
return npc->selllist_sub(sd, item_list, nd->master_nd);
- }
- // delete items
- for (i = 0; i < VECTOR_LENGTH(*item_list); i++) {
+ if (z + sd->status.zeny > MAX_ZENY)
+ return 1;
+
+ // Delete items.
+ for (int i = 0; i < VECTOR_LENGTH(*item_list); i++) {
struct itemlist_entry *entry = &VECTOR_INDEX(*item_list, i);
int idx = entry->id;
if (sd->inventory_data[idx]->type == IT_PETEGG && sd->status.inventory[idx].card[0] == CARD0_PET) {
- if (pet->search_petDB_index(sd->status.inventory[idx].nameid, PET_EGG) >= 0) {
+ if (pet->search_petDB_index(sd->status.inventory[idx].nameid, PET_EGG) >= 0)
intif->delete_petdata(MakeDWord(sd->status.inventory[idx].card[1], sd->status.inventory[idx].card[2]));
- }
}
- // Achievements [Smokexyz/Hercules]
+ // Achievements. [Smokexyz/Hercules]
achievement->validate_item_sell(sd, sd->status.inventory[idx].nameid, entry->amount);
pc->delitem(sd, idx, entry->amount, 0, DELITEM_SOLD, LOG_TYPE_NPC);
-
}
- if (z + sd->status.zeny > MAX_ZENY && nd->master_nd == NULL)
- return 1;
-
if (z > MAX_ZENY)
z = MAX_ZENY;
pc->getzeny(sd, (int)z, LOG_TYPE_NPC, NULL);
- // custom merchant shop exp bonus
- if( battle_config.shop_exp > 0 && z > 0 && ( skill_t = pc->checkskill2(sd,skill_idx) ) > 0) {
- if( sd->status.skill[skill_idx].flag >= SKILL_FLAG_REPLACED_LV_0 )
+ int skill_t;
+ int skill_idx = skill->get_index(MC_OVERCHARGE);
+
+ // Custom merchant shop exp bonus.
+ if (battle_config.shop_exp > 0 && z > 0 && (skill_t = pc->checkskill2(sd, skill_idx)) > 0) {
+ if (sd->status.skill[skill_idx].flag >= SKILL_FLAG_REPLACED_LV_0)
skill_t = sd->status.skill[skill_idx].flag - SKILL_FLAG_REPLACED_LV_0;
- if( skill_t > 0 ) {
+ if (skill_t > 0) {
z = apply_percentrate64(z, skill_t * battle_config.shop_exp, 10000);
+
if (z < 1)
z = 1;
+
pc->gainexp(sd, NULL, 0, (int)z, false);
}
}
@@ -3053,11 +3058,11 @@ static int npc_unload(struct npc_data *nd, bool single, bool unload_mobs)
aFree(nd->u.shop.shop_item); /// src check for duplicate shops. [Orcao]
} else if (nd->subtype == SCRIPT) {
char evname[EVENT_NAME_LENGTH];
-
+
snprintf(evname, ARRAYLENGTH(evname), "%s::OnNPCUnload", nd->exname);
struct event_data *ev = strdb_get(npc->ev_db, evname);
-
+
if (ev != NULL)
script->run_npc(nd->u.scr.script, ev->pos, 0, nd->bl.id); /// Run OnNPCUnload.
@@ -3391,7 +3396,7 @@ static bool npc_viewisid(const char *viewid)
* @param class_ The NPC view class.
* @return A pointer to the created NPC data (ownership passed to the caller).
*/
-static struct npc_data *npc_create_npc(enum npc_subtype subtype, int m, int x, int y, uint8 dir, int class_)
+static struct npc_data *npc_create_npc(enum npc_subtype subtype, int m, int x, int y, enum unit_dir dir, int class_)
{
struct npc_data *nd;
@@ -3664,6 +3669,7 @@ static void npc_convertlabel_db(struct npc_label_list *label_list, const char *f
for( i = 0; i < script->label_count; i++ ) {
const char* lname = script->get_str(script->labels[i].key);
int lpos = script->labels[i].pos;
+ enum script_label_flags flags = script->labels[i].flags;
struct npc_label_list* label;
const char *p;
size_t len;
@@ -3685,6 +3691,7 @@ static void npc_convertlabel_db(struct npc_label_list *label_list, const char *f
safestrncpy(label->name, lname, sizeof(label->name));
label->pos = lpos;
+ label->flags = flags;
}
}
@@ -5098,7 +5105,7 @@ static const char *npc_parse_mapflag(const char *w1, const char *w2, const char
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) ) {
+ } else if ((skill_id = skill->name2id(skill_name)) == 0 || skill->get_unit_id(skill->name2id(skill_name), 1, 0) == 0) {
ShowWarning("npc_parse_mapflag: Unknown skill (%s) for 'adjust_unit_duration' flag! removing flag from %s in file '%s', line '%d'.\n",skill_name, map->list[m].name, filepath, strline(buffer,start-buffer));
if (retval) *retval = EXIT_FAILURE;
} else if ( atoi(modifier) < 1 || atoi(modifier) > USHRT_MAX ) {
@@ -5235,6 +5242,8 @@ static const char *npc_parse_mapflag(const char *w1, const char *w2, const char
map->list[m].flag.nostorage = (state) ? cap_value(atoi(w4), 1, 3) : 0;
} else if (!strcmpi(w3, "nogstorage")) {
map->list[m].flag.nogstorage = (state) ? cap_value(atoi(w4), 1, 3) : 0;
+ } else if (strcmpi(w3, "nopet") == 0) {
+ map->list[m].flag.nopet = (state != 0) ? 1 : 0;
} else {
npc->parse_unknown_mapflag(mapname, w3, w4, start, buffer, filepath, retval);
}
@@ -5605,7 +5614,7 @@ static int npc_reload(void)
npc->npc_last_npd = NULL;
npc->npc_last_path = NULL;
npc->npc_last_ref = NULL;
-
+
const int npc_new_min = npc->npc_id;
struct s_mapiterator *iter = mapit_geteachiddb();
@@ -5722,8 +5731,10 @@ static bool npc_unloadfile(const char *filepath, bool unload_mobs)
dbi_destroy(iter);
- if (found) /// Refresh event cache.
+ if (found) { /// Refresh event cache.
+ npc->motd = npc->name2id("HerculesMOTD");
npc->read_event_script();
+ }
return found;
}
diff --git a/src/map/npc.h b/src/map/npc.h
index 65c9796d9..16d7a984b 100644
--- a/src/map/npc.h
+++ b/src/map/npc.h
@@ -56,9 +56,15 @@ enum npc_shop_types {
struct npc_timerevent_list {
int timer,pos;
};
+
+/** list of labels within a NPC (used internally by the label db) */
struct npc_label_list {
+ /** label name */
char name[NAME_LENGTH];
+ /** start point within the script */
int pos;
+ /** optional label flags */
+ enum script_label_flags flags;
};
struct npc_barter_currency {
@@ -95,7 +101,7 @@ struct npc_data {
int chat_id;
int touching_id;
int64 next_walktime;
- uint8 dir;
+ enum unit_dir dir;
uint8 area_size;
int clan_id;
@@ -281,7 +287,7 @@ struct npc_interface {
void (*parsename) (struct npc_data *nd, const char *name, const char *start, const char *buffer, const char *filepath);
int (*parseview) (const char *w4, const char *start, const char *buffer, const char *filepath);
bool (*viewisid) (const char *viewid);
- struct npc_data *(*create_npc) (enum npc_subtype subtype, int m, int x, int y, uint8 dir, int class_);
+ struct npc_data *(*create_npc) (enum npc_subtype subtype, int m, int x, int y, enum unit_dir dir, int class_);
struct npc_data* (*add_warp) (char *name, short from_mapid, short from_x, short from_y, short xs, short ys, unsigned short to_mapindex, short to_x, short to_y);
const char *(*parse_warp) (const char *w1, const char *w2, const char *w3, const char *w4, const char *start, const char *buffer, const char *filepath, int *retval);
const char *(*parse_shop) (const char *w1, const char *w2, const char *w3, const char *w4, const char *start, const char *buffer, const char *filepath, int *retval);
diff --git a/src/map/npc_chat.c b/src/map/npc_chat.c
index 0ca84cff4..0df323e96 100644
--- a/src/map/npc_chat.c
+++ b/src/map/npc_chat.c
@@ -394,7 +394,8 @@ static int npc_chat_sub(struct block_list *bl, va_list ap)
// save out the matched strings
for (i = 0; i < r; i++)
{
- char var[15], val[255];
+ char var[SCRIPT_VARNAME_LENGTH + 1];
+ char val[SCRIPT_STRING_VAR_LENGTH + 1];
snprintf(var, sizeof(var), "$@p%i$", i);
libpcre->copy_substring(msg, offsets, r, i, val, sizeof(val));
script->set_var(sd, var, val);
diff --git a/src/map/packets.h b/src/map/packets.h
index 1e6dc71bc..e30acbdf7 100644
--- a/src/map/packets.h
+++ b/src/map/packets.h
@@ -1824,6 +1824,11 @@ packet(0x96e,clif->ackmergeitems);
packet(0x0aa4, clif->pRefineryUIClose);
#endif
+#if PACKETVER_MAIN_NUM >= 20170111 || PACKETVER_RE_NUM >= 20170111 || defined(PACKETVER_ZERO)
+ packet(0x0ab5, clif->pLapineUpgrade_close);
+ packet(0x0ab6, clif->pLapineUpgrade_makeItem);
+#endif
+
// 2017-02-28aRagexeRE
#if PACKETVER >= 20170228
// new packets
diff --git a/src/map/packets_keys_main.h b/src/map/packets_keys_main.h
index a72d9bf5f..ef8d39fb7 100644
--- a/src/map/packets_keys_main.h
+++ b/src/map/packets_keys_main.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2020 Hercules Dev Team
- * Copyright (C) 2018-2020 Andrei Karas (4144)
+ * Copyright (C) 2013-2020 Hercules Dev Team
+ * Copyright (C) 2018-2020 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -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, 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, 2019-09-25aRagexe, 2019-09-25aRagexeRE, 2019-09-25bRagexe, 2019-09-25bRagexeRE, 2019-10-02bRagexeRE, 2019-10-02cRagexe, 2019-10-02dRagexe, 2019-10-02dRagexeRE, 2019-10-02dRagexeRE_2, 2019-10-16fRagexe, 2019-10-16fRagexeRE, 2019-10-16gRagexe, 2019-10-16gRagexeRE, 2019-10-18aRagexe, 2019-10-23aRagexe, 2019-10-23aRagexeRE, 2019-10-30bRagexeRE, 2019-10-30cRagexe, 2019-11-06aRagexe, 2019-11-06bRagexeRE, 2019-11-07aRagexe, 2019-11-07aRagexeRE, 2019-11-13cRagexe, 2019-11-13eRagexe, 2019-11-13eRagexeRE, 2019-11-20aRagexe, 2019-11-20cRagexeRE, 2019-11-20dRagexe, 2019-11-27aRagexe, 2019-11-27aRagexeRE, 2019-11-27bRagexe, 2019-12-04aRagexe, 2019-12-04aRagexeRE, 2019-12-04bRagexe, 2019-12-04bRagexeRE, 2019-12-04cRagexeRE, 2019-12-11aRagexe, 2019-12-11fRagexeRE, 2019-12-18bRagexe, 2019-12-18bRagexeRE, 2019-12-24aRagexe, 2019-12-24aRagexeRE, 2019-12-24bRagexe, 2019-12-24bRagexeRE, 2020-01-08aRagexe, 2020-01-08bRagexeRE, 2020-01-22cRagexe, 2020-01-22cRagexeRE, 2020-01-29bRagexe, 2020-01-30aRagexe, 2020-02-05aRagexe, 2020-02-05aRagexeRE, 2020-02-06aRagexe
+// 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, 2019-09-25aRagexe, 2019-09-25aRagexeRE, 2019-09-25bRagexe, 2019-09-25bRagexeRE, 2019-10-02bRagexeRE, 2019-10-02cRagexe, 2019-10-02dRagexe, 2019-10-02dRagexeRE, 2019-10-02dRagexeRE_2, 2019-10-16fRagexe, 2019-10-16fRagexeRE, 2019-10-16gRagexe, 2019-10-16gRagexeRE, 2019-10-18aRagexe, 2019-10-23aRagexe, 2019-10-23aRagexeRE, 2019-10-30bRagexeRE, 2019-10-30cRagexe, 2019-11-06aRagexe, 2019-11-06bRagexeRE, 2019-11-07aRagexe, 2019-11-07aRagexeRE, 2019-11-13cRagexe, 2019-11-13eRagexe, 2019-11-13eRagexeRE, 2019-11-20aRagexe, 2019-11-20cRagexeRE, 2019-11-20dRagexe, 2019-11-27aRagexe, 2019-11-27aRagexeRE, 2019-11-27bRagexe, 2019-12-04aRagexe, 2019-12-04aRagexeRE, 2019-12-04bRagexe, 2019-12-04bRagexeRE, 2019-12-04cRagexeRE, 2019-12-11aRagexe, 2019-12-11fRagexeRE, 2019-12-18bRagexe, 2019-12-18bRagexeRE, 2019-12-24aRagexe, 2019-12-24aRagexeRE, 2019-12-24bRagexe, 2019-12-24bRagexeRE, 2020-01-08aRagexe, 2020-01-08bRagexeRE, 2020-01-22cRagexe, 2020-01-22cRagexeRE, 2020-01-29bRagexe, 2020-01-30aRagexe, 2020-02-05aRagexe, 2020-02-05aRagexeRE, 2020-02-06aRagexe, 2020-02-12aRagexe, 2020-02-12aRagexeRE, 2020-02-19dRagexe, 2020-02-19eRagexeRE, 2020-03-04aRagexe, 2020-03-04aRagexeRE, 2020-03-18bRagexe, 2020-04-01bRagexe, 2020-04-14_6aRagexe, 2020-04-14eRagexe, 2020-05-06aRagexe, 2020-05-20bRagexe, 2020-06-03aRagexe, 2020-06-17aRagexe, 2020-07-01bRagexe, 2020-07-01cRagexe, 2020-07-09_sakaRagexeRE, 2020-07-15bRagexe
#if PACKETVER == 20101123 || \
PACKETVER == 20101124 || \
PACKETVER == 20101125 || \
@@ -186,7 +186,20 @@
PACKETVER == 20200129 || \
PACKETVER == 20200130 || \
PACKETVER == 20200205 || \
- PACKETVER >= 20200206
+ PACKETVER == 20200206 || \
+ PACKETVER == 20200212 || \
+ PACKETVER == 20200219 || \
+ PACKETVER == 20200304 || \
+ PACKETVER == 20200318 || \
+ PACKETVER == 20200401 || \
+ PACKETVER == 20200414 || \
+ PACKETVER == 20200506 || \
+ PACKETVER == 20200520 || \
+ PACKETVER == 20200603 || \
+ PACKETVER == 20200617 || \
+ PACKETVER == 20200701 || \
+ PACKETVER == 20200709 || \
+ PACKETVER >= 20200715
packetKeys(0x00000000,0x00000000,0x00000000);
#endif
diff --git a/src/map/packets_keys_zero.h b/src/map/packets_keys_zero.h
index 90d226c92..1aa370b56 100644
--- a/src/map/packets_keys_zero.h
+++ b/src/map/packets_keys_zero.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2020 Hercules Dev Team
- * Copyright (C) 2018-2020 Andrei Karas (4144)
+ * Copyright (C) 2013-2020 Hercules Dev Team
+ * Copyright (C) 2018-2020 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -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, 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, 2019-09-25_3aRagexe_zero, 2019-09-25_5aRagexe_zero, 2019-10-08_2aRagexe_zero, 2019-10-23_2aRagexe_zero, 2019-11-06aRagexe_zero, 2019-11-13aRagexe_zero, 2019-11-27_2aRagexe_zero, 2019-11-27aRagexe_zero, 2019-12-04aRagexe_zero, 2019-12-11_2aRagexe_zero, 2019-12-24_4aRagexe_zero, 2019-12-24_5aRagexe_zero, 2020-01-15_2aRagexe_zero, 2020-01-15aRagexe_zero, 2020-01-29_2aRagexe_zero, 2020-01-29aRagexe_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, 2019-09-25_3aRagexe_zero, 2019-09-25_5aRagexe_zero, 2019-10-08_2aRagexe_zero, 2019-10-23_2aRagexe_zero, 2019-11-06aRagexe_zero, 2019-11-13aRagexe_zero, 2019-11-27_2aRagexe_zero, 2019-11-27aRagexe_zero, 2019-12-04aRagexe_zero, 2019-12-11_2aRagexe_zero, 2019-12-24_4aRagexe_zero, 2019-12-24_5aRagexe_zero, 2020-01-15_2aRagexe_zero, 2020-01-15aRagexe_zero, 2020-01-29_2aRagexe_zero, 2020-01-29aRagexe_zero, 2020-02-12aRagexe_zero, 2020-02-26aRagexe_zero, 2020-02-26bRagexe_zero, 2020-03-04aRagexe_zero, 2020-03-18_2aRagexe_zero, 2020-04-01_2aRagexe_zero, 2020-04-14bRagexe_zero, 2020-05-06aRagexe_zero, 2020-05-20_5aRagexe_zero, 2020-06-03_2aRagexe_zero, 2020-06-17aRagexe_zero, 2020-07-01_2aRagexe_zero, 2020-07-01aRagexe_zero
#if PACKETVER == 20171018 || \
PACKETVER == 20171019 || \
PACKETVER == 20171023 || \
@@ -105,7 +105,18 @@
PACKETVER == 20191211 || \
PACKETVER == 20191224 || \
PACKETVER == 20200115 || \
- PACKETVER >= 20200129
+ PACKETVER == 20200129 || \
+ PACKETVER == 20200212 || \
+ PACKETVER == 20200226 || \
+ PACKETVER == 20200304 || \
+ PACKETVER == 20200318 || \
+ PACKETVER == 20200401 || \
+ PACKETVER == 20200414 || \
+ PACKETVER == 20200506 || \
+ PACKETVER == 20200520 || \
+ PACKETVER == 20200603 || \
+ PACKETVER == 20200617 || \
+ PACKETVER >= 20200701
packetKeys(0x00000000,0x00000000,0x00000000);
#endif
diff --git a/src/map/packets_shuffle_main.h b/src/map/packets_shuffle_main.h
index 2d7f1d6ec..fc28a12a9 100644
--- a/src/map/packets_shuffle_main.h
+++ b/src/map/packets_shuffle_main.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2020 Hercules Dev Team
- * Copyright (C) 2018-2020 Andrei Karas (4144)
+ * Copyright (C) 2013-2020 Hercules Dev Team
+ * Copyright (C) 2018-2020 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -40,3312 +40,3312 @@
// 2012-07-10aRagexe, 2012-07-12aRagexe
#if PACKETVER == 20120710 || \
PACKETVER == 20120712
- packet(0x0202,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x02c4,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0362,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0365,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0367,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0436,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x07e4,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0811,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0877,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0878,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x087f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x088d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0893,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0899,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a3,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a6,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a8,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08aa,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0936,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0948,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0953,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0956,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0958,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
+ packet(0x0202,clif->pSolveCharName,2);
+ packet(0x02c4,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0362,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0365,clif->pFriendsListAdd,2);
+ packet(0x0367,clif->pMoveToKafra,2,4);
+ packet(0x0436,clif->pActionRequest,2,6);
+ packet(0x07e4,clif->pTickSend,2);
+ packet(0x0811,clif->pReqClickBuyingStore,2);
+ packet(0x085b,clif->pUseSkillToId,2,4,6);
+ packet(0x0877,clif->pGetCharNameRequest,2);
+ packet(0x0878,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x087f,clif->pWalkToXY,2);
+ packet(0x088d,clif->pChangeDir,2,4);
+ packet(0x0893,clif->pStoragePassword,0);
+ packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0899,clif->pTakeItem,2);
+ packet(0x08a3,clif->pDropItem,2,4);
+ packet(0x08a6,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a8,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08aa,clif->pMoveFromKafra,2,4);
+ packet(0x092d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0936,clif->pDull/*,XXX*/);
+ packet(0x0948,clif->pReqCloseBuyingStore,0);
+ packet(0x094b,clif->pHomMenu,2,4);
+ packet(0x094e,clif->pPartyInvite2,2);
+ packet(0x0953,clif->pDull/*,XXX*/);
+ packet(0x0956,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0958,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
#endif
// 2012-07-16aRagexe
#if PACKETVER == 20120716
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x089f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x089f,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-07-24aRagexe
#if PACKETVER == 20120724
- packet(0x035f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0815,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0835,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0865,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0866,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0872,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0877,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087c,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0887,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0888,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a1,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08a9,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08ab,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x091f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0928,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0929,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x092b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0935,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0938,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x093c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0945,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0957,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0959,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0963,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0965,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0966,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
+ packet(0x035f,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pReqClickBuyingStore,2);
+ packet(0x0815,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0835,clif->pPartyInvite2,2);
+ packet(0x0865,clif->pReqCloseBuyingStore,0);
+ packet(0x0866,clif->pDull/*,XXX*/);
+ packet(0x0872,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0877,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087c,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0887,clif->pChangeDir,2,4);
+ packet(0x0888,clif->pHomMenu,2,4);
+ packet(0x088e,clif->pUseSkillToId,2,4,6);
+ packet(0x08a1,clif->pGetCharNameRequest,2);
+ packet(0x08a9,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08ab,clif->pTakeItem,2);
+ packet(0x091c,clif->pWalkToXY,2);
+ packet(0x091f,clif->pTickSend,2);
+ packet(0x0928,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0929,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x092b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0935,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0938,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x093c,clif->pMoveToKafra,2,4);
+ packet(0x0945,clif->pActionRequest,2,6);
+ packet(0x0957,clif->pStoragePassword,0);
+ packet(0x0959,clif->pFriendsListAdd,2);
+ packet(0x0963,clif->pDropItem,2,4);
+ packet(0x0965,clif->pSolveCharName,2);
+ packet(0x0966,clif->pMoveFromKafra,2,4);
#endif
// 2012-08-01aRagexe, 2012-08-01bRagexe
#if PACKETVER == 20120801
- packet(0x0360,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0438,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x086a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0873,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0875,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x088b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0890,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0895,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x089c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x089d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a2,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08aa,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ab,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0917,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x092a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0930,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0934,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x093c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0941,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0946,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x094e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0964,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
+ packet(0x0360,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0438,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x085d,clif->pSolveCharName,2);
+ packet(0x086a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086b,clif->pGetCharNameRequest,2);
+ packet(0x086f,clif->pReqCloseBuyingStore,0);
+ packet(0x0873,clif->pUseSkillToId,2,4,6);
+ packet(0x0875,clif->pTakeItem,2);
+ packet(0x087b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x088b,clif->pHomMenu,2,4);
+ packet(0x0890,clif->pActionRequest,2,6);
+ packet(0x0895,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x089c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x089d,clif->pDropItem,2,4);
+ packet(0x089f,clif->pWalkToXY,2);
+ packet(0x08a2,clif->pFriendsListAdd,2);
+ packet(0x08aa,clif->pChangeDir,2,4);
+ packet(0x08ab,clif->pMoveFromKafra,2,4);
+ packet(0x0917,clif->pStoragePassword,0);
+ packet(0x091d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x092a,clif->pDull/*,XXX*/);
+ packet(0x092e,clif->pReqClickBuyingStore,2);
+ packet(0x0930,clif->pTickSend,2);
+ packet(0x0934,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x093c,clif->pPartyInvite2,2);
+ packet(0x0941,clif->pMoveToKafra,2,4);
+ packet(0x0946,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x094e,clif->pDull/*,XXX*/);
+ packet(0x0964,clif->pSearchStoreInfoListItemClick,2,6,10);
#endif
// 2012-08-08aRagexe, 2012-08-08bRagexe, 2012-08-08cRagexe
#if PACKETVER == 20120808
- packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x093d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pFriendsListAdd,2);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085f,clif->pStoragePassword,0);
+ packet(0x088f,clif->pChangeDir,2,4);
+ packet(0x093d,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-08-14aRagexe, 2012-08-14bRagexe
#if PACKETVER == 20120814
- packet(0x0281,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0361,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0365,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0366,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0438,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x07ec,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0815,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0838,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x085e,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0861,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0862,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0865,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0868,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x086f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0875,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0882,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x088b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x088d,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0895,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08a8,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x091f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0920,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0929,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0932,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0934,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0941,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0967,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0969,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x0281,clif->pHomMenu,2,4);
+ packet(0x0361,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0365,clif->pSolveCharName,2);
+ packet(0x0366,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0438,clif->pTickSend,2);
+ packet(0x07ec,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0815,clif->pDropItem,2,4);
+ packet(0x0838,clif->pReqCloseBuyingStore,0);
+ packet(0x085e,clif->pMoveToKafra,2,4);
+ packet(0x0861,clif->pReqClickBuyingStore,2);
+ packet(0x0862,clif->pTakeItem,2);
+ packet(0x0865,clif->pMoveFromKafra,2,4);
+ packet(0x0868,clif->pActionRequest,2,6);
+ packet(0x086f,clif->pStoragePassword,0);
+ packet(0x0875,clif->pWalkToXY,2);
+ packet(0x087f,clif->pPartyInvite2,2);
+ packet(0x0882,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x088b,clif->pFriendsListAdd,2);
+ packet(0x088d,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0895,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08a8,clif->pDull/*,XXX*/);
+ packet(0x091f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0920,clif->pGetCharNameRequest,2);
+ packet(0x0929,clif->pDull/*,XXX*/);
+ packet(0x0932,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0934,clif->pUseSkillToId,2,4,6);
+ packet(0x0941,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0967,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0969,clif->pChangeDir,2,4);
#endif
// 2012-08-22aRagexe, 2012-08-22bRagexe, 2012-08-22cRagexe
#if PACKETVER == 20120822
- packet(0x0365,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0437,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x085a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x085d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x086e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0872,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x087d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0885,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0899,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a5,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08ab,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0917,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0924,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0927,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0935,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0937,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0940,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0943,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x094d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0953,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0955,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0958,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x095b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
+ packet(0x0365,clif->pFriendsListAdd,2);
+ packet(0x0437,clif->pTakeItem,2);
+ packet(0x085a,clif->pWalkToXY,2);
+ packet(0x085c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x085d,clif->pUseSkillToId,2,4,6);
+ packet(0x086b,clif->pSolveCharName,2);
+ packet(0x086e,clif->pChangeDir,2,4);
+ packet(0x0872,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x087d,clif->pTickSend,2);
+ packet(0x0885,clif->pDull/*,XXX*/);
+ packet(0x088a,clif->pMoveToKafra,2,4);
+ packet(0x0899,clif->pPartyInvite2,2);
+ packet(0x089f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a5,clif->pDull/*,XXX*/);
+ packet(0x08ab,clif->pActionRequest,2,6);
+ packet(0x0917,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0924,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0927,clif->pGetCharNameRequest,2);
+ packet(0x0935,clif->pHomMenu,2,4);
+ packet(0x0937,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0940,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0943,clif->pMoveFromKafra,2,4);
+ packet(0x094d,clif->pStoragePassword,0);
+ packet(0x094e,clif->pDropItem,2,4);
+ packet(0x0953,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0955,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0958,clif->pReqCloseBuyingStore,0);
+ packet(0x095b,clif->pReqClickBuyingStore,2);
#endif
// 2012-08-30aRagexe
#if PACKETVER == 20120830
- packet(0x022d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0364,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0802,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0838,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0861,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0872,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0887,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0888,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0890,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x091d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0926,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0934,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0945,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x094b,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0964,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0364,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pPartyInvite2,2);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0802,clif->pStoragePassword,0);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pMoveToKafra,2,4);
+ packet(0x0838,clif->pHomMenu,2,4);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0861,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0872,clif->pFriendsListAdd,2);
+ packet(0x0887,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0888,clif->pDull/*,XXX*/);
+ packet(0x0890,clif->pDull/*,XXX*/);
+ packet(0x091d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0926,clif->pMoveFromKafra,2,4);
+ packet(0x0934,clif->pChangeDir,2,4);
+ packet(0x0945,clif->pDropItem,2,4);
+ packet(0x094b,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0964,clif->pTakeItem,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-09-05aRagexe
#if PACKETVER == 20120905
- packet(0x022d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0365,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0817,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x085a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x085d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0876,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0877,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0878,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087a,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x087e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0887,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0895,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0897,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a0,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a6,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0917,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0918,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x091a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0927,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x093c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0944,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0945,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0950,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0954,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0959,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0967,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
+ packet(0x022d,clif->pMoveToKafra,2,4);
+ packet(0x0365,clif->pDull/*,XXX*/);
+ packet(0x0817,clif->pStoragePassword,0);
+ packet(0x085a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x085d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086f,clif->pSolveCharName,2);
+ packet(0x0876,clif->pHomMenu,2,4);
+ packet(0x0877,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0878,clif->pWalkToXY,2);
+ packet(0x087a,clif->pUseSkillToId,2,4,6);
+ packet(0x087b,clif->pTickSend,2);
+ packet(0x087e,clif->pMoveFromKafra,2,4);
+ packet(0x0887,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0895,clif->pChangeDir,2,4);
+ packet(0x0897,clif->pTakeItem,2);
+ packet(0x08a0,clif->pDull/*,XXX*/);
+ packet(0x08a6,clif->pFriendsListAdd,2);
+ packet(0x0917,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0918,clif->pItemListWindowSelected,2,4,8);
+ packet(0x091a,clif->pGetCharNameRequest,2);
+ packet(0x0927,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x093c,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0944,clif->pPartyInvite2,2);
+ packet(0x0945,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0950,clif->pDropItem,2,4);
+ packet(0x0954,clif->pReqCloseBuyingStore,0);
+ packet(0x0959,clif->pReqClickBuyingStore,2);
+ packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0967,clif->pActionRequest,2,6);
#endif
// 2012-09-11aRagexe
#if PACKETVER == 20120911
- packet(0x0438,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0819,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0868,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0876,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0877,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0879,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x087a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x088f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a4,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a5,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08a6,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a7,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08ad,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0930,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0935,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0948,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0949,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094b,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0958,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0959,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0962,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0963,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0966,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0968,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x0438,clif->pTickSend,2);
+ packet(0x0819,clif->pMoveFromKafra,2,4);
+ packet(0x0868,clif->pTakeItem,2);
+ packet(0x086f,clif->pWalkToXY,2);
+ packet(0x0876,clif->pHomMenu,2,4);
+ packet(0x0877,clif->pPartyInvite2,2);
+ packet(0x0879,clif->pReqClickBuyingStore,2);
+ packet(0x087a,clif->pDull/*,XXX*/);
+ packet(0x088a,clif->pGetCharNameRequest,2);
+ packet(0x088f,clif->pFriendsListAdd,2);
+ packet(0x08a4,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x08a5,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08a6,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a7,clif->pDropItem,2,4);
+ packet(0x08ad,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0930,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0935,clif->pReqCloseBuyingStore,0);
+ packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0948,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0949,clif->pDull/*,XXX*/);
+ packet(0x094b,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0958,clif->pUseSkillToId,2,4,6);
+ packet(0x0959,clif->pActionRequest,2,6);
+ packet(0x0962,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0963,clif->pSolveCharName,2);
+ packet(0x0966,clif->pMoveToKafra,2,4);
+ packet(0x0968,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pStoragePassword,0);
#endif
// 2012-09-19aRagexe
#if PACKETVER == 20120919
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0956,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0956,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-09-25aRagexe, 2012-09-26aRagexe
#if PACKETVER == 20120925 || \
PACKETVER == 20120926
- packet(0x07e4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0815,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0819,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0835,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0838,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0869,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0873,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x087e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0887,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x088a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x089d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a4,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x091c,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x091e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0923,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0927,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0932,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0942,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0948,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0950,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0956,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0957,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0958,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x095e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0963,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
+ packet(0x07e4,clif->pDull/*,XXX*/);
+ packet(0x0815,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0819,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0835,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0838,clif->pGetCharNameRequest,2);
+ packet(0x085d,clif->pHomMenu,2,4);
+ packet(0x0869,clif->pMoveToKafra,2,4);
+ packet(0x0873,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087a,clif->pDropItem,2,4);
+ packet(0x087e,clif->pFriendsListAdd,2);
+ packet(0x0887,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x088a,clif->pPartyInvite2,2);
+ packet(0x088d,clif->pUseSkillToId,2,4,6);
+ packet(0x088f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x089d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a4,clif->pActionRequest,2,6);
+ packet(0x091c,clif->pSearchStoreInfoNextPage,0);
+ packet(0x091e,clif->pReqCloseBuyingStore,0);
+ packet(0x0923,clif->pTakeItem,2);
+ packet(0x0927,clif->pReqClickBuyingStore,2);
+ packet(0x0932,clif->pTickSend,2);
+ packet(0x0942,clif->pStoragePassword,0);
+ packet(0x0948,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0950,clif->pWalkToXY,2);
+ packet(0x0956,clif->pDull/*,XXX*/);
+ packet(0x0957,clif->pChangeDir,2,4);
+ packet(0x0958,clif->pSolveCharName,2);
+ packet(0x095e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0963,clif->pMoveFromKafra,2,4);
#endif
// 2012-10-10aRagexe, 2012-10-10bRagexe
#if PACKETVER == 20121010
- packet(0x0202,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0817,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0869,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0874,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0883,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0888,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0891,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0896,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0898,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a1,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a9,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0925,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0934,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x093c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0942,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0946,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0947,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x094c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0957,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0958,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0959,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x095c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0964,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0969,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x0202,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0817,clif->pGetCharNameRequest,2);
+ packet(0x085a,clif->pReqCloseBuyingStore,0);
+ packet(0x0869,clif->pTakeItem,2);
+ packet(0x086c,clif->pDull/*,XXX*/);
+ packet(0x0874,clif->pMoveFromKafra,2,4);
+ packet(0x087d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0883,clif->pWalkToXY,2);
+ packet(0x0888,clif->pDull/*,XXX*/);
+ packet(0x088f,clif->pPartyInvite2,2);
+ packet(0x0891,clif->pUseSkillToId,2,4,6);
+ packet(0x0896,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0898,clif->pStoragePassword,0);
+ packet(0x08a1,clif->pActionRequest,2,6);
+ packet(0x08a6,clif->pSolveCharName,2);
+ packet(0x08a9,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0925,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0934,clif->pTickSend,2);
+ packet(0x093c,clif->pMoveToKafra,2,4);
+ packet(0x0942,clif->pReqClickBuyingStore,2);
+ packet(0x0946,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0947,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x094c,clif->pDropItem,2,4);
+ packet(0x0957,clif->pChangeDir,2,4);
+ packet(0x0958,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0959,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x095c,clif->pHomMenu,2,4);
+ packet(0x0964,clif->pFriendsListAdd,2);
+ packet(0x0969,clif->pPartyBookingRegisterReq,2,4,6);
#endif
// 2012-10-17aRagexe, 2012-10-17bRagexe
#if PACKETVER == 20121017
- packet(0x023b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0868,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x086b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0887,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0888,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0897,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x089a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a6,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0918,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0920,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0960,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0962,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0965,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pPartyInvite2,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pMoveFromKafra,2,4);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0868,clif->pDull/*,XXX*/);
+ packet(0x086b,clif->pDropItem,2,4);
+ packet(0x0887,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0888,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0897,clif->pMoveToKafra,2,4);
+ packet(0x089a,clif->pFriendsListAdd,2);
+ packet(0x08a6,clif->pChangeDir,2,4);
+ packet(0x0918,clif->pStoragePassword,0);
+ packet(0x0920,clif->pDull/*,XXX*/);
+ packet(0x0960,clif->pHomMenu,2,4);
+ packet(0x0962,clif->pTakeItem,2);
+ packet(0x0965,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-10-24aRagexe
#if PACKETVER == 20121024
- packet(0x0436,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0437,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0438,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0817,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0838,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0868,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0872,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0875,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x087e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0882,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0888,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0889,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x088a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x089c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a9,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08aa,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0931,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0938,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x093a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0942,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0947,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0954,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0955,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x095d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0965,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x0436,clif->pWalkToXY,2);
+ packet(0x0437,clif->pUseSkillToId,2,4,6);
+ packet(0x0438,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0817,clif->pActionRequest,2,6);
+ packet(0x0838,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x085a,clif->pMoveFromKafra,2,4);
+ packet(0x0868,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0872,clif->pGetCharNameRequest,2);
+ packet(0x0875,clif->pDull/*,XXX*/);
+ packet(0x087a,clif->pMoveToKafra,2,4);
+ packet(0x087b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x087e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0882,clif->pStoragePassword,0);
+ packet(0x0888,clif->pHomMenu,2,4);
+ packet(0x0889,clif->pDropItem,2,4);
+ packet(0x088a,clif->pReqClickBuyingStore,2);
+ packet(0x089c,clif->pPartyInvite2,2);
+ packet(0x08a9,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08aa,clif->pChangeDir,2,4);
+ packet(0x0931,clif->pTakeItem,2);
+ packet(0x0938,clif->pReqCloseBuyingStore,0);
+ packet(0x093a,clif->pDull/*,XXX*/);
+ packet(0x0942,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0947,clif->pTickSend,2);
+ packet(0x0954,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0955,clif->pSearchStoreInfoNextPage,0);
+ packet(0x095d,clif->pFriendsListAdd,2);
+ packet(0x095e,clif->pSolveCharName,2);
+ packet(0x0965,clif->pWantToConnection,2,6,10,14,18);
#endif
// 2012-10-31aRagexe
#if PACKETVER == 20121031
- packet(0x022d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0871,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0877,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0898,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pTickSend,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pHomMenu,2,4);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pFriendsListAdd,2);
+ packet(0x0871,clif->pChangeDir,2,4);
+ packet(0x0877,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0898,clif->pStoragePassword,0);
+ packet(0x092b,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-11-07aRagexe
#if PACKETVER == 20121107
- packet(0x0360,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0361,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0365,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x085c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0861,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0865,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x086c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0871,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0873,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0878,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x087f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x088f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0890,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0891,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0896,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x089a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x089b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x08a2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08ad,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0922,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0934,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x093b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0945,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x094d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0960,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0963,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0966,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x096a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
+ packet(0x0360,clif->pTakeItem,2);
+ packet(0x0361,clif->pStoragePassword,0);
+ packet(0x0365,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x085c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0861,clif->pTickSend,2);
+ packet(0x0865,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x086c,clif->pHomMenu,2,4);
+ packet(0x086d,clif->pSolveCharName,2);
+ packet(0x0871,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0873,clif->pMoveToKafra,2,4);
+ packet(0x0878,clif->pPartyInvite2,2);
+ packet(0x087f,clif->pChangeDir,2,4);
+ packet(0x088f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0890,clif->pUseSkillToId,2,4,6);
+ packet(0x0891,clif->pMoveFromKafra,2,4);
+ packet(0x0896,clif->pReqClickBuyingStore,2);
+ packet(0x089a,clif->pActionRequest,2,6);
+ packet(0x089b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x08a2,clif->pReqCloseBuyingStore,0);
+ packet(0x08ad,clif->pGetCharNameRequest,2);
+ packet(0x0922,clif->pDull/*,XXX*/);
+ packet(0x0934,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x093b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0945,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x094d,clif->pWalkToXY,2);
+ packet(0x0960,clif->pDropItem,2,4);
+ packet(0x0963,clif->pDull/*,XXX*/);
+ packet(0x0966,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x096a,clif->pFriendsListAdd,2);
#endif
// 2012-11-14aRagexe
#if PACKETVER == 20121114
- packet(0x0364,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0365,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0437,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0815,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0838,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0862,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0876,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0879,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0881,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0898,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0899,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a9,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08aa,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08ab,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0930,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0935,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0938,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x093b,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x093c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0941,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0944,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0949,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x094b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x094f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x095c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0965,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x096a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x0364,clif->pStoragePassword,0);
+ packet(0x0365,clif->pHomMenu,2,4);
+ packet(0x0437,clif->pDropItem,2,4);
+ packet(0x0815,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0838,clif->pPartyInvite2,2);
+ packet(0x0862,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0876,clif->pSolveCharName,2);
+ packet(0x0879,clif->pGetCharNameRequest,2);
+ packet(0x0881,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0898,clif->pActionRequest,2,6);
+ packet(0x0899,clif->pWalkToXY,2);
+ packet(0x08a9,clif->pTickSend,2);
+ packet(0x08aa,clif->pReqCloseBuyingStore,0);
+ packet(0x08ab,clif->pChangeDir,2,4);
+ packet(0x091a,clif->pMoveFromKafra,2,4);
+ packet(0x0930,clif->pDull/*,XXX*/);
+ packet(0x0935,clif->pUseSkillToId,2,4,6);
+ packet(0x0938,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x093b,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x093c,clif->pMoveToKafra,2,4);
+ packet(0x0941,clif->pFriendsListAdd,2);
+ packet(0x0944,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0949,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x094a,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x094b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x094f,clif->pReqClickBuyingStore,2);
+ packet(0x095c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0965,clif->pTakeItem,2);
+ packet(0x096a,clif->pDull/*,XXX*/);
#endif
// 2012-11-21aRagexe
#if PACKETVER == 20121121
- packet(0x0202,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0362,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0437,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0863,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x086f,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0872,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0875,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087e,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0880,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0892,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0899,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089a,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a7,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08aa,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x091a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0921,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0927,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0929,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0938,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0946,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x094d,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0950,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0952,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0954,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0957,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0958,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
+ packet(0x0202,clif->pUseSkillToId,2,4,6);
+ packet(0x0362,clif->pReqCloseBuyingStore,0);
+ packet(0x0437,clif->pTakeItem,2);
+ packet(0x0863,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086d,clif->pSolveCharName,2);
+ packet(0x086f,clif->pMoveFromKafra,2,4);
+ packet(0x0872,clif->pGetCharNameRequest,2);
+ packet(0x0875,clif->pMoveToKafra,2,4);
+ packet(0x087e,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0880,clif->pChangeDir,2,4);
+ packet(0x0892,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0899,clif->pFriendsListAdd,2);
+ packet(0x089a,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x08a7,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08aa,clif->pActionRequest,2,6);
+ packet(0x091a,clif->pTickSend,2);
+ packet(0x0921,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0927,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0929,clif->pDull/*,XXX*/);
+ packet(0x0938,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0946,clif->pWalkToXY,2);
+ packet(0x094d,clif->pDull/*,XXX*/);
+ packet(0x0950,clif->pHomMenu,2,4);
+ packet(0x0952,clif->pDropItem,2,4);
+ packet(0x0954,clif->pStoragePassword,0);
+ packet(0x0957,clif->pPartyInvite2,2);
+ packet(0x0958,clif->pReqClickBuyingStore,2);
#endif
// 2012-11-28aRagexe
#if PACKETVER == 20121128
- packet(0x0362,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0363,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x07ec,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0802,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0861,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0867,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x086c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0872,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0888,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x088b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0894,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0895,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a8,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08ad,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x091b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x091c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x091e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x091f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0921,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0922,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0931,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0945,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0947,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0950,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0953,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0954,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0960,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
+ packet(0x0362,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0363,clif->pFriendsListAdd,2);
+ packet(0x07ec,clif->pPartyInvite2,2);
+ packet(0x0802,clif->pStoragePassword,0);
+ packet(0x0861,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0867,clif->pTickSend,2);
+ packet(0x086c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086e,clif->pDull/*,XXX*/);
+ packet(0x0872,clif->pUseSkillToId,2,4,6);
+ packet(0x0888,clif->pChangeDir,2,4);
+ packet(0x088b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0894,clif->pDull/*,XXX*/);
+ packet(0x0895,clif->pTakeItem,2);
+ packet(0x08a8,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08ad,clif->pWalkToXY,2);
+ packet(0x091b,clif->pSolveCharName,2);
+ packet(0x091c,clif->pGetCharNameRequest,2);
+ packet(0x091e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x091f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0921,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0922,clif->pMoveFromKafra,2,4);
+ packet(0x092f,clif->pReqClickBuyingStore,2);
+ packet(0x0931,clif->pActionRequest,2,6);
+ packet(0x0945,clif->pHomMenu,2,4);
+ packet(0x0947,clif->pReqCloseBuyingStore,0);
+ packet(0x0950,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0953,clif->pDropItem,2,4);
+ packet(0x0954,clif->pMoveToKafra,2,4);
+ packet(0x0960,clif->pReqTradeBuyingStore,2,4,8,12);
#endif
// 2012-12-05aRagexe, 2012-12-05bRagexe
#if PACKETVER == 20121205
- packet(0x035f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0360,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0815,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0863,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0864,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x086c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0870,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0873,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0875,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0878,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0888,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0889,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x088b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08ad,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x091a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x091c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0921,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x093a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x093e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0946,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x094b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0954,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0959,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0966,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0968,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x035f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0360,clif->pWalkToXY,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0815,clif->pTakeItem,2);
+ packet(0x0863,clif->pTickSend,2);
+ packet(0x0864,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x086c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0870,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0873,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0875,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0878,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0888,clif->pStoragePassword,0);
+ packet(0x0889,clif->pDropItem,2,4);
+ packet(0x088b,clif->pDull/*,XXX*/);
+ packet(0x089a,clif->pFriendsListAdd,2);
+ packet(0x089d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08ad,clif->pSolveCharName,2);
+ packet(0x091a,clif->pReqCloseBuyingStore,0);
+ packet(0x091c,clif->pMoveFromKafra,2,4);
+ packet(0x0921,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x093a,clif->pReqClickBuyingStore,2);
+ packet(0x093e,clif->pDull/*,XXX*/);
+ packet(0x093f,clif->pUseSkillToId,2,4,6);
+ packet(0x0946,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x094b,clif->pGetCharNameRequest,2);
+ packet(0x0954,clif->pActionRequest,2,6);
+ packet(0x0959,clif->pPartyInvite2,2);
+ packet(0x0966,clif->pMoveToKafra,2,4);
+ packet(0x0968,clif->pChangeDir,2,4);
#endif
// 2012-12-12aRagexe, 2012-12-12bRagexe
#if PACKETVER == 20121212
- packet(0x0362,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0368,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0369,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0436,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0438,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0817,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x085c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0877,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x087d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0893,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0895,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a3,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a7,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a9,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08aa,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08ac,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0917,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091a,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0920,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0932,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0947,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0951,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0953,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0957,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x095b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0965,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0966,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0362,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0368,clif->pFriendsListAdd,2);
+ packet(0x0369,clif->pPartyInvite2,2);
+ packet(0x0436,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0438,clif->pReqCloseBuyingStore,0);
+ packet(0x0817,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x085c,clif->pActionRequest,2,6);
+ packet(0x0877,clif->pTickSend,2);
+ packet(0x087d,clif->pUseSkillToId,2,4,6);
+ packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0893,clif->pSolveCharName,2);
+ packet(0x0895,clif->pReqClickBuyingStore,2);
+ packet(0x08a3,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a7,clif->pWalkToXY,2);
+ packet(0x08a9,clif->pStoragePassword,0);
+ packet(0x08aa,clif->pDull/*,XXX*/);
+ packet(0x08ac,clif->pDropItem,2,4);
+ packet(0x0917,clif->pMoveFromKafra,2,4);
+ packet(0x091a,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0920,clif->pChangeDir,2,4);
+ packet(0x0932,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0947,clif->pHomMenu,2,4);
+ packet(0x0951,clif->pDull/*,XXX*/);
+ packet(0x0953,clif->pTakeItem,2);
+ packet(0x0957,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x095b,clif->pMoveToKafra,2,4);
+ packet(0x0965,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0966,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-12-18aRagexe, 2012-12-18bRagexe
#if PACKETVER == 20121218
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0363,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0867,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0872,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0886,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0889,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0890,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x091a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0935,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0946,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0957,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pUseSkillToId,2,4,6);
+ packet(0x0363,clif->pTakeItem,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pDropItem,2,4);
+ packet(0x0867,clif->pHomMenu,2,4);
+ packet(0x0872,clif->pDull/*,XXX*/);
+ packet(0x087a,clif->pChangeDir,2,4);
+ packet(0x087b,clif->pPartyInvite2,2);
+ packet(0x0886,clif->pMoveToKafra,2,4);
+ packet(0x0889,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0890,clif->pDull/*,XXX*/);
+ packet(0x091a,clif->pMoveFromKafra,2,4);
+ packet(0x091c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0935,clif->pFriendsListAdd,2);
+ packet(0x0946,clif->pStoragePassword,0);
+ packet(0x0957,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-12-27aRagexe
#if PACKETVER == 20121227
- packet(0x0202,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x02c4,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0361,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0368,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0437,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0860,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0870,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0872,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x087a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0886,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0888,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0890,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0894,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0896,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a6,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08aa,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0917,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x091f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0920,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0932,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0933,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0940,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0943,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0947,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0953,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0958,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x095d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0962,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
+ packet(0x0202,clif->pHomMenu,2,4);
+ packet(0x02c4,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0361,clif->pStoragePassword,0);
+ packet(0x0368,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0437,clif->pDropItem,2,4);
+ packet(0x0860,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0870,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0872,clif->pReqClickBuyingStore,2);
+ packet(0x087a,clif->pActionRequest,2,6);
+ packet(0x0886,clif->pMoveFromKafra,2,4);
+ packet(0x0888,clif->pTickSend,2);
+ packet(0x088e,clif->pChangeDir,2,4);
+ packet(0x0890,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0894,clif->pFriendsListAdd,2);
+ packet(0x0896,clif->pSolveCharName,2);
+ packet(0x08a6,clif->pTakeItem,2);
+ packet(0x08aa,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0917,clif->pReqCloseBuyingStore,0);
+ packet(0x091f,clif->pDull/*,XXX*/);
+ packet(0x0920,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0932,clif->pWalkToXY,2);
+ packet(0x0933,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0940,clif->pUseSkillToId,2,4,6);
+ packet(0x0943,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0947,clif->pGetCharNameRequest,2);
+ packet(0x0953,clif->pDull/*,XXX*/);
+ packet(0x0958,clif->pMoveToKafra,2,4);
+ packet(0x095d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0962,clif->pPartyInvite2,2);
#endif
// 2013-01-03aRagexe, 2013-01-07aRagexe
#if PACKETVER == 20130103 || \
PACKETVER == 20130107
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0940,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pDull/*,XXX*/);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pStoragePassword,0);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0940,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-01-09aRagexe
#if PACKETVER == 20130109
- packet(0x0281,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0365,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0368,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0437,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0838,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0866,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0886,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0888,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x088a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0891,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0892,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a2,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08aa,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08ac,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0918,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0922,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0927,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0928,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0930,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0931,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0938,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x093e,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0950,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0951,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0955,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x095e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x0281,clif->pGetCharNameRequest,2);
+ packet(0x0365,clif->pDull/*,XXX*/);
+ packet(0x0368,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0437,clif->pActionRequest,2,6);
+ packet(0x0838,clif->pMoveFromKafra,2,4);
+ packet(0x0866,clif->pWalkToXY,2);
+ packet(0x0886,clif->pMoveToKafra,2,4);
+ packet(0x0888,clif->pChangeDir,2,4);
+ packet(0x088a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0891,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0892,clif->pUseSkillToId,2,4,6);
+ packet(0x08a2,clif->pSolveCharName,2);
+ packet(0x08aa,clif->pDull/*,XXX*/);
+ packet(0x08ac,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0918,clif->pFriendsListAdd,2);
+ packet(0x091b,clif->pDropItem,2,4);
+ packet(0x0922,clif->pReqClickBuyingStore,2);
+ packet(0x0927,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0928,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0930,clif->pHomMenu,2,4);
+ packet(0x0931,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0938,clif->pPartyInvite2,2);
+ packet(0x093e,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x094f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0950,clif->pStoragePassword,0);
+ packet(0x0951,clif->pTickSend,2);
+ packet(0x0955,clif->pReqCloseBuyingStore,0);
+ packet(0x095e,clif->pTakeItem,2);
#endif
// 2013-01-15bRagexe, 2013-01-16aRagexe, 2013-01-16bRagexe
#if PACKETVER == 20130115 || \
PACKETVER == 20130116
- packet(0x0361,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x07ec,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0817,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0861,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0863,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x086b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0870,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0871,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0877,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0879,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087c,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0888,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x088b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0894,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0895,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a0,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a4,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08ac,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0918,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0928,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x092d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0939,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0946,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x094b,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x095a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x0361,clif->pDull/*,XXX*/);
+ packet(0x07ec,clif->pDull/*,XXX*/);
+ packet(0x0817,clif->pWalkToXY,2);
+ packet(0x085e,clif->pReqCloseBuyingStore,0);
+ packet(0x0861,clif->pMoveFromKafra,2,4);
+ packet(0x0863,clif->pActionRequest,2,6);
+ packet(0x086b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0870,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0871,clif->pFriendsListAdd,2);
+ packet(0x0877,clif->pReqClickBuyingStore,2);
+ packet(0x0879,clif->pChangeDir,2,4);
+ packet(0x087c,clif->pSolveCharName,2);
+ packet(0x0888,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x088b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0894,clif->pHomMenu,2,4);
+ packet(0x0895,clif->pTickSend,2);
+ packet(0x08a0,clif->pPartyInvite2,2);
+ packet(0x08a4,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08ac,clif->pMoveToKafra,2,4);
+ packet(0x0918,clif->pUseSkillToId,2,4,6);
+ packet(0x0928,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x092d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0939,clif->pGetCharNameRequest,2);
+ packet(0x0946,clif->pItemListWindowSelected,2,4,8);
+ packet(0x094b,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x094c,clif->pTakeItem,2);
+ packet(0x094e,clif->pDropItem,2,4);
+ packet(0x095a,clif->pStoragePassword,0);
#endif
// 2013-01-21aRagexe
#if PACKETVER == 20130121
- packet(0x023b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x035f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07ec,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0802,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0815,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0817,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x085d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0874,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0884,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0893,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091f,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x094f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0956,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x095b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0963,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0969,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pReqCloseBuyingStore,0);
+ packet(0x035f,clif->pDull/*,XXX*/);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07ec,clif->pTickSend,2);
+ packet(0x0802,clif->pActionRequest,2,6);
+ packet(0x0815,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0817,clif->pStoragePassword,0);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pDull/*,XXX*/);
+ packet(0x085d,clif->pHomMenu,2,4);
+ packet(0x086c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0874,clif->pMoveToKafra,2,4);
+ packet(0x0884,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0893,clif->pFriendsListAdd,2);
+ packet(0x091f,clif->pTakeItem,2);
+ packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x094f,clif->pDropItem,2,4);
+ packet(0x0956,clif->pChangeDir,2,4);
+ packet(0x095b,clif->pPartyInvite2,2);
+ packet(0x0963,clif->pMoveFromKafra,2,4);
+ packet(0x0969,clif->pItemListWindowSelected,2,4,8);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-01-30aRagexe
#if PACKETVER == 20130130
- packet(0x035f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0362,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0367,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0368,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0437,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x085f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0862,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x086b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0885,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0886,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0887,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0889,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x089a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a0,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a4,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a9,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x091a,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0920,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0924,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x093a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0956,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0957,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x095b,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095d,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
+ packet(0x035f,clif->pMoveToKafra,2,4);
+ packet(0x0362,clif->pHomMenu,2,4);
+ packet(0x0367,clif->pGetCharNameRequest,2);
+ packet(0x0368,clif->pChangeDir,2,4);
+ packet(0x0437,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x085f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0862,clif->pReqCloseBuyingStore,0);
+ packet(0x086b,clif->pDull/*,XXX*/);
+ packet(0x087d,clif->pWalkToXY,2);
+ packet(0x087f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0885,clif->pActionRequest,2,6);
+ packet(0x0886,clif->pTakeItem,2);
+ packet(0x0887,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0889,clif->pTickSend,2);
+ packet(0x089a,clif->pPartyInvite2,2);
+ packet(0x089f,clif->pDropItem,2,4);
+ packet(0x08a0,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a4,clif->pUseSkillToId,2,4,6);
+ packet(0x08a9,clif->pDull/*,XXX*/);
+ packet(0x091a,clif->pSolveCharName,2);
+ packet(0x0920,clif->pFriendsListAdd,2);
+ packet(0x0924,clif->pReqClickBuyingStore,2);
+ packet(0x093a,clif->pStoragePassword,0);
+ packet(0x093d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0956,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0957,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x095b,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x095c,clif->pMoveFromKafra,2,4);
+ packet(0x095d,clif->pSearchStoreInfoNextPage,0);
#endif
// 2013-02-06aRagexe
#if PACKETVER == 20130206
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0811,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0876,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0883,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0885,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0899,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a0,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ac,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0920,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0925,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x093a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x093c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0950,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pStoragePassword,0);
+ packet(0x0811,clif->pTakeItem,2);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085d,clif->pMoveFromKafra,2,4);
+ packet(0x0876,clif->pDull/*,XXX*/);
+ packet(0x0883,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0885,clif->pMoveToKafra,2,4);
+ packet(0x0899,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a0,clif->pChangeDir,2,4);
+ packet(0x08ac,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0920,clif->pPartyInvite2,2);
+ packet(0x0925,clif->pDropItem,2,4);
+ packet(0x093a,clif->pHomMenu,2,4);
+ packet(0x093c,clif->pFriendsListAdd,2);
+ packet(0x0950,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-02-15aRagexe, 2013-02-15bRagexe
#if PACKETVER == 20130215
- packet(0x023b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0366,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0869,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x086f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0886,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08ad,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0923,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0941,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0956,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x095d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0962,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pReqClickBuyingStore,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pStoragePassword,0);
+ packet(0x0366,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0869,clif->pMoveToKafra,2,4);
+ packet(0x086f,clif->pDull/*,XXX*/);
+ packet(0x0886,clif->pDropItem,2,4);
+ packet(0x089e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089f,clif->pDull/*,XXX*/);
+ packet(0x08ad,clif->pTakeItem,2);
+ packet(0x0923,clif->pHomMenu,2,4);
+ packet(0x0941,clif->pFriendsListAdd,2);
+ packet(0x0956,clif->pPartyInvite2,2);
+ packet(0x095d,clif->pChangeDir,2,4);
+ packet(0x0962,clif->pMoveFromKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-02-20aRagexe
#if PACKETVER == 20130220
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x094b,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-02-27aRagexe
#if PACKETVER == 20130227
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x035f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0360,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0811,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0815,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0817,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085a,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0863,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0867,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0869,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x086e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0893,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0898,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a0,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08a1,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x091b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x091f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0924,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x092b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x092f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0936,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0946,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0951,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x095b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x095e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0967,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x035f,clif->pHomMenu,2,4);
+ packet(0x0360,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0811,clif->pTickSend,2);
+ packet(0x0815,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0817,clif->pReqClickBuyingStore,2);
+ packet(0x085a,clif->pUseSkillToId,2,4,6);
+ packet(0x0863,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0867,clif->pTakeItem,2);
+ packet(0x0869,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x086e,clif->pDull/*,XXX*/);
+ packet(0x087b,clif->pPartyInvite2,2);
+ packet(0x0893,clif->pMoveFromKafra,2,4);
+ packet(0x0898,clif->pChangeDir,2,4);
+ packet(0x08a0,clif->pReqCloseBuyingStore,0);
+ packet(0x08a1,clif->pDull/*,XXX*/);
+ packet(0x091b,clif->pGetCharNameRequest,2);
+ packet(0x091f,clif->pDropItem,2,4);
+ packet(0x0924,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x092b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x092f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0936,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0946,clif->pMoveToKafra,2,4);
+ packet(0x0951,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x095b,clif->pSolveCharName,2);
+ packet(0x095e,clif->pStoragePassword,0);
+ packet(0x095f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0967,clif->pActionRequest,2,6);
#endif
// 2013-03-06aRagexe
#if PACKETVER == 20130306
- packet(0x022d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0367,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0368,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0802,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0817,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x085b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085c,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0860,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x086d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0881,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0890,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0898,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x089f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a4,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08ac,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0917,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091e,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0926,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0934,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0936,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0943,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0945,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0946,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x094a,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0951,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0960,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0962,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x022d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0367,clif->pSolveCharName,2);
+ packet(0x0368,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0802,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0817,clif->pHomMenu,2,4);
+ packet(0x085b,clif->pWalkToXY,2);
+ packet(0x085c,clif->pReqClickBuyingStore,2);
+ packet(0x0860,clif->pChangeDir,2,4);
+ packet(0x086d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0881,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0890,clif->pDull/*,XXX*/);
+ packet(0x0898,clif->pActionRequest,2,6);
+ packet(0x089f,clif->pTickSend,2);
+ packet(0x08a4,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08ac,clif->pDull/*,XXX*/);
+ packet(0x0917,clif->pMoveFromKafra,2,4);
+ packet(0x091e,clif->pMoveToKafra,2,4);
+ packet(0x0926,clif->pStoragePassword,0);
+ packet(0x0934,clif->pFriendsListAdd,2);
+ packet(0x0936,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0943,clif->pUseSkillToId,2,4,6);
+ packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0945,clif->pReqCloseBuyingStore,0);
+ packet(0x0946,clif->pPartyInvite2,2);
+ packet(0x094a,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x094e,clif->pGetCharNameRequest,2);
+ packet(0x0951,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0960,clif->pDropItem,2,4);
+ packet(0x0962,clif->pTakeItem,2);
#endif
// 2013-03-13aRagexe
#if PACKETVER == 20130313
- packet(0x0202,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0887,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0920,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0947,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pPartyInvite2,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pFriendsListAdd,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0887,clif->pChangeDir,2,4);
+ packet(0x0920,clif->pStoragePassword,0);
+ packet(0x092d,clif->pHomMenu,2,4);
+ packet(0x0947,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-03-20dRagexe, 2013-03-20eRagexe
#if PACKETVER == 20130320
- packet(0x035f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0363,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0365,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0438,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x085a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x085d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0868,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x086f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0874,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0881,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0886,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0888,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0890,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0897,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0898,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08ac,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0922,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x092e,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0933,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0938,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x093f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0947,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094c,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x094e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0959,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x095a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x035f,clif->pReqClickBuyingStore,2);
+ packet(0x0363,clif->pTickSend,2);
+ packet(0x0365,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0438,clif->pDropItem,2,4);
+ packet(0x085a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x085d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0868,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086d,clif->pPartyInvite2,2);
+ packet(0x086f,clif->pFriendsListAdd,2);
+ packet(0x0874,clif->pMoveFromKafra,2,4);
+ packet(0x0881,clif->pWalkToXY,2);
+ packet(0x0886,clif->pReqCloseBuyingStore,0);
+ packet(0x0888,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088e,clif->pActionRequest,2,6);
+ packet(0x0890,clif->pDull/*,XXX*/);
+ packet(0x0897,clif->pChangeDir,2,4);
+ packet(0x0898,clif->pGetCharNameRequest,2);
+ packet(0x089b,clif->pUseSkillToId,2,4,6);
+ packet(0x08ac,clif->pMoveToKafra,2,4);
+ packet(0x0922,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x092e,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0933,clif->pTakeItem,2);
+ packet(0x0938,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x093f,clif->pHomMenu,2,4);
+ packet(0x0947,clif->pStoragePassword,0);
+ packet(0x094c,clif->pSolveCharName,2);
+ packet(0x094e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0959,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x095a,clif->pDull/*,XXX*/);
#endif
// 2013-03-27bRagexe
#if PACKETVER == 20130327
- packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x07ec,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0835,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0873,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0878,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x087a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0885,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x088f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0891,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0893,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0899,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a1,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08a2,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x091f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x092b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x092d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x092e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0933,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0938,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0939,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x094a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x094b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0955,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0960,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0961,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0967,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
+ packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x07ec,clif->pReqClickBuyingStore,2);
+ packet(0x0835,clif->pHomMenu,2,4);
+ packet(0x086d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0873,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0878,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x087a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0885,clif->pDropItem,2,4);
+ packet(0x088f,clif->pUseSkillToId,2,4,6);
+ packet(0x0891,clif->pMoveToKafra,2,4);
+ packet(0x0893,clif->pReqCloseBuyingStore,0);
+ packet(0x0899,clif->pTakeItem,2);
+ packet(0x08a1,clif->pGetCharNameRequest,2);
+ packet(0x08a2,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x091f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x092b,clif->pWalkToXY,2);
+ packet(0x092d,clif->pPartyInvite2,2);
+ packet(0x092e,clif->pDull/*,XXX*/);
+ packet(0x092f,clif->pDull/*,XXX*/);
+ packet(0x0933,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0938,clif->pMoveFromKafra,2,4);
+ packet(0x0939,clif->pTickSend,2);
+ packet(0x094a,clif->pChangeDir,2,4);
+ packet(0x094b,clif->pStoragePassword,0);
+ packet(0x094f,clif->pFriendsListAdd,2);
+ packet(0x0955,clif->pActionRequest,2,6);
+ packet(0x0960,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0961,clif->pSolveCharName,2);
+ packet(0x0967,clif->pItemListWindowSelected,2,4,8);
#endif
// 2013-04-03aRagexe
#if PACKETVER == 20130403
- packet(0x023b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0884,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a5,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0926,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0942,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0950,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pReqClickBuyingStore,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pStoragePassword,0);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0884,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a5,clif->pDull/*,XXX*/);
+ packet(0x0926,clif->pHomMenu,2,4);
+ packet(0x0942,clif->pChangeDir,2,4);
+ packet(0x0950,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-04-10aRagexe
#if PACKETVER == 20130410
- packet(0x0367,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0437,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0860,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0865,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x086c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0879,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0881,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x088c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0890,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0891,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x089c,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08a0,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08a7,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0917,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x091d,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0933,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0939,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x093d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0944,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0945,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0955,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0960,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0967,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x096a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
+ packet(0x0367,clif->pReqClickBuyingStore,2);
+ packet(0x0437,clif->pTakeItem,2);
+ packet(0x0860,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0865,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x086c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0879,clif->pMoveToKafra,2,4);
+ packet(0x087c,clif->pWalkToXY,2);
+ packet(0x087d,clif->pGetCharNameRequest,2);
+ packet(0x0881,clif->pReqCloseBuyingStore,0);
+ packet(0x088c,clif->pStoragePassword,0);
+ packet(0x088d,clif->pHomMenu,2,4);
+ packet(0x0890,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0891,clif->pDull/*,XXX*/);
+ packet(0x089c,clif->pSolveCharName,2);
+ packet(0x089e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08a0,clif->pTickSend,2);
+ packet(0x08a4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08a7,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0917,clif->pPartyInvite2,2);
+ packet(0x091d,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0933,clif->pUseSkillToId,2,4,6);
+ packet(0x0939,clif->pActionRequest,2,6);
+ packet(0x093d,clif->pMoveFromKafra,2,4);
+ packet(0x0944,clif->pDull/*,XXX*/);
+ packet(0x0945,clif->pChangeDir,2,4);
+ packet(0x0955,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0960,clif->pFriendsListAdd,2);
+ packet(0x0967,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x096a,clif->pDropItem,2,4);
#endif
// 2013-04-17aRagexe
#if PACKETVER == 20130417
- packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0875,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0929,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0962,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0969,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x096a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pFriendsListAdd,2);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0875,clif->pStoragePassword,0);
+ packet(0x0929,clif->pChangeDir,2,4);
+ packet(0x0962,clif->pHomMenu,2,4);
+ packet(0x0969,clif->pGetCharNameRequest,2);
+ packet(0x096a,clif->pDull/*,XXX*/);
#endif
// 2013-04-24aRagexe
#if PACKETVER == 20130424
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0969,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0969,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-05-02aRagexe, 2013-05-02bRagexe
#if PACKETVER == 20130502
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x07ec,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0867,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0870,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0874,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0875,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0877,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0888,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0889,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a1,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a3,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0961,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0967,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pStoragePassword,0);
+ packet(0x07ec,clif->pChangeDir,2,4);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pDull/*,XXX*/);
+ packet(0x0867,clif->pHomMenu,2,4);
+ packet(0x0870,clif->pPartyInvite2,2);
+ packet(0x0874,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0875,clif->pFriendsListAdd,2);
+ packet(0x0877,clif->pMoveToKafra,2,4);
+ packet(0x087c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0888,clif->pGetCharNameRequest,2);
+ packet(0x0889,clif->pDull/*,XXX*/);
+ packet(0x08a1,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a3,clif->pDropItem,2,4);
+ packet(0x0961,clif->pMoveFromKafra,2,4);
+ packet(0x0967,clif->pTakeItem,2);
#endif
// 2013-05-08bRagexe, 2013-05-08cRagexe, 2013-05-08dRagexe, 2013-05-08eRagexe, 2013-05-08fRagexe
#if PACKETVER == 20130508
- packet(0x022d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0868,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0878,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0893,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0895,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0897,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08ab,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x092d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0944,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0957,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pMoveToKafra,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pFriendsListAdd,2);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0868,clif->pStoragePassword,0);
+ packet(0x0878,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088b,clif->pTakeItem,2);
+ packet(0x0893,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0895,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0897,clif->pDull/*,XXX*/);
+ packet(0x08ab,clif->pPartyInvite2,2);
+ packet(0x092d,clif->pDropItem,2,4);
+ packet(0x0944,clif->pDull/*,XXX*/);
+ packet(0x094d,clif->pHomMenu,2,4);
+ packet(0x0957,clif->pMoveFromKafra,2,4);
+ packet(0x095c,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-05-15aRagexe
#if PACKETVER == 20130515
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0862,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0887,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a1,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08aa,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08ac,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0931,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x093e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0943,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0944,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0947,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0962,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0963,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pChangeDir,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0862,clif->pDull/*,XXX*/);
+ packet(0x0887,clif->pMoveToKafra,2,4);
+ packet(0x08a1,clif->pTakeItem,2);
+ packet(0x08aa,clif->pDull/*,XXX*/);
+ packet(0x08ac,clif->pMoveFromKafra,2,4);
+ packet(0x092d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0931,clif->pHomMenu,2,4);
+ packet(0x093e,clif->pStoragePassword,0);
+ packet(0x0943,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0944,clif->pDropItem,2,4);
+ packet(0x0947,clif->pPartyInvite2,2);
+ packet(0x0962,clif->pFriendsListAdd,2);
+ packet(0x0963,clif->pItemListWindowSelected,2,4,8);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-05-22aRagexe
#if PACKETVER == 20130522
- packet(0x0360,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0362,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0368,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0369,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x07ec,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0811,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0874,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x088e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x089c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a2,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a3,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a6,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08a9,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08aa,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x08ac,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0925,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0926,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0950,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0952,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x095b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x095c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x095e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0964,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0965,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x0360,clif->pWalkToXY,2);
+ packet(0x0362,clif->pFriendsListAdd,2);
+ packet(0x0368,clif->pReqClickBuyingStore,2);
+ packet(0x0369,clif->pSolveCharName,2);
+ packet(0x07ec,clif->pTickSend,2);
+ packet(0x0811,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086e,clif->pReqCloseBuyingStore,0);
+ packet(0x0874,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087e,clif->pMoveFromKafra,2,4);
+ packet(0x088e,clif->pStoragePassword,0);
+ packet(0x089b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x089c,clif->pDropItem,2,4);
+ packet(0x08a2,clif->pActionRequest,2,6);
+ packet(0x08a3,clif->pMoveToKafra,2,4);
+ packet(0x08a6,clif->pGetCharNameRequest,2);
+ packet(0x08a9,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08aa,clif->pSearchStoreInfoNextPage,0);
+ packet(0x08ac,clif->pDull/*,XXX*/);
+ packet(0x0925,clif->pChangeDir,2,4);
+ packet(0x0926,clif->pHomMenu,2,4);
+ packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0950,clif->pPartyInvite2,2);
+ packet(0x0952,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x095b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x095c,clif->pUseSkillToId,2,4,6);
+ packet(0x095e,clif->pTakeItem,2);
+ packet(0x0964,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0965,clif->pDull/*,XXX*/);
#endif
// 2013-05-29aRagexe
#if PACKETVER == 20130529
- packet(0x023b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0438,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x085e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0863,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0869,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0874,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0876,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0877,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0888,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0890,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0892,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0895,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0897,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a7,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a8,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0917,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0918,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0919,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0936,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0937,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0938,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0941,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0951,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0956,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0957,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0958,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0964,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
+ packet(0x023b,clif->pHomMenu,2,4);
+ packet(0x0438,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x085e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0863,clif->pGetCharNameRequest,2);
+ packet(0x0869,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0874,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0876,clif->pWalkToXY,2);
+ packet(0x0877,clif->pFriendsListAdd,2);
+ packet(0x0888,clif->pDull/*,XXX*/);
+ packet(0x088e,clif->pDull/*,XXX*/);
+ packet(0x0890,clif->pActionRequest,2,6);
+ packet(0x0892,clif->pReqClickBuyingStore,2);
+ packet(0x0895,clif->pTakeItem,2);
+ packet(0x0897,clif->pTickSend,2);
+ packet(0x08a7,clif->pDropItem,2,4);
+ packet(0x08a8,clif->pPartyInvite2,2);
+ packet(0x0917,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0918,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0919,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0936,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0937,clif->pSolveCharName,2);
+ packet(0x0938,clif->pMoveToKafra,2,4);
+ packet(0x0941,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0951,clif->pChangeDir,2,4);
+ packet(0x0956,clif->pStoragePassword,0);
+ packet(0x0957,clif->pMoveFromKafra,2,4);
+ packet(0x0958,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0964,clif->pReqCloseBuyingStore,0);
#endif
// 2013-06-05aRagexe, 2013-06-05bRagexe
#if PACKETVER == 20130605
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0883,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0883,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-06-12aRagexe, 2013-06-12bRagexe, 2013-06-12cRagexe, 2013-06-12dRagexe, 2013-06-12eRagexe
#if PACKETVER == 20130612
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0919,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x093a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0964,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087e,clif->pChangeDir,2,4);
+ packet(0x0919,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x093a,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pFriendsListAdd,2);
+ packet(0x0964,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-06-18#1aRagexe
#if PACKETVER == 20130618
- packet(0x0281,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x02c4,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0363,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x085a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0862,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0864,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0878,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0885,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0887,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0889,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x088e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0890,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0891,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08a6,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a7,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0917,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0930,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0932,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0936,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0942,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0944,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0945,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x094f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0951,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0953,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0962,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x096a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x0281,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x02c4,clif->pHomMenu,2,4);
+ packet(0x0363,clif->pSearchStoreInfoNextPage,0);
+ packet(0x085a,clif->pReqCloseBuyingStore,0);
+ packet(0x0862,clif->pReqClickBuyingStore,2);
+ packet(0x0864,clif->pStoragePassword,0);
+ packet(0x0878,clif->pDull/*,XXX*/);
+ packet(0x087a,clif->pDull/*,XXX*/);
+ packet(0x0885,clif->pMoveToKafra,2,4);
+ packet(0x0887,clif->pPartyInvite2,2);
+ packet(0x0889,clif->pActionRequest,2,6);
+ packet(0x088e,clif->pWalkToXY,2);
+ packet(0x0890,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0891,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08a6,clif->pChangeDir,2,4);
+ packet(0x08a7,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0917,clif->pDropItem,2,4);
+ packet(0x0930,clif->pTickSend,2);
+ packet(0x0932,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0936,clif->pMoveFromKafra,2,4);
+ packet(0x0942,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0944,clif->pGetCharNameRequest,2);
+ packet(0x0945,clif->pSolveCharName,2);
+ packet(0x094f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0951,clif->pUseSkillToId,2,4,6);
+ packet(0x0953,clif->pFriendsListAdd,2);
+ packet(0x095b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0962,clif->pTakeItem,2);
+ packet(0x096a,clif->pUseSkillToPos,2,4,6,8);
#endif
// 2013-06-26_3cRagexe, 2013-06-26bRagexe
#if PACKETVER == 20130626
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0860,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x088c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0894,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0895,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a5,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08ab,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0921,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0930,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0952,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0960,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pReqCloseBuyingStore,0);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pMoveFromKafra,2,4);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0860,clif->pDull/*,XXX*/);
+ packet(0x088b,clif->pTakeItem,2);
+ packet(0x088c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088f,clif->pDull/*,XXX*/);
+ packet(0x0894,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0895,clif->pPartyInvite2,2);
+ packet(0x08a5,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08ab,clif->pFriendsListAdd,2);
+ packet(0x0921,clif->pMoveToKafra,2,4);
+ packet(0x0930,clif->pStoragePassword,0);
+ packet(0x094d,clif->pChangeDir,2,4);
+ packet(0x0952,clif->pDropItem,2,4);
+ packet(0x0960,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-07-03aRagexe
#if PACKETVER == 20130703
- packet(0x0202,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0873,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0930,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x094a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pReqClickBuyingStore,2);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pFriendsListAdd,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0873,clif->pStoragePassword,0);
+ packet(0x0930,clif->pChangeDir,2,4);
+ packet(0x094a,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-07-10bRagexe
#if PACKETVER == 20130710
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0880,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0880,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-07-17cRagexe
#if PACKETVER == 20130717
- packet(0x02c4,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0819,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x083c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0862,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0863,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x086b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0882,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x088a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0897,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0898,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x089b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a6,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a9,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08aa,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0917,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0918,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x091d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x091e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x092f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x093b,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0956,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0958,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x095b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0960,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0967,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x096a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
+ packet(0x02c4,clif->pTickSend,2);
+ packet(0x0819,clif->pSearchStoreInfoNextPage,0);
+ packet(0x083c,clif->pWalkToXY,2);
+ packet(0x0862,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0863,clif->pFriendsListAdd,2);
+ packet(0x086b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086c,clif->pDull/*,XXX*/);
+ packet(0x0882,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x088a,clif->pHomMenu,2,4);
+ packet(0x088c,clif->pChangeDir,2,4);
+ packet(0x0897,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0898,clif->pReqClickBuyingStore,2);
+ packet(0x089b,clif->pMoveToKafra,2,4);
+ packet(0x08a6,clif->pDull/*,XXX*/);
+ packet(0x08a9,clif->pTakeItem,2);
+ packet(0x08aa,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0917,clif->pDropItem,2,4);
+ packet(0x0918,clif->pActionRequest,2,6);
+ packet(0x091d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x091e,clif->pUseSkillToId,2,4,6);
+ packet(0x092f,clif->pPartyInvite2,2);
+ packet(0x093b,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0956,clif->pMoveFromKafra,2,4);
+ packet(0x0958,clif->pGetCharNameRequest,2);
+ packet(0x095b,clif->pStoragePassword,0);
+ packet(0x0960,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0967,clif->pSolveCharName,2);
+ packet(0x096a,clif->pReqCloseBuyingStore,0);
#endif
// 2013-07-24eRagexe
#if PACKETVER == 20130724
- packet(0x023b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0437,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x085a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0860,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0867,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086a,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0874,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0876,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0890,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0891,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0893,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x089c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08ab,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0921,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0924,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0927,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x092b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x094a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0953,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0954,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0956,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0958,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x095c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x095d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0965,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0966,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x023b,clif->pReqCloseBuyingStore,0);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0437,clif->pDull/*,XXX*/);
+ packet(0x085a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x085e,clif->pMoveFromKafra,2,4);
+ packet(0x0860,clif->pStoragePassword,0);
+ packet(0x0867,clif->pGetCharNameRequest,2);
+ packet(0x086a,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0874,clif->pHomMenu,2,4);
+ packet(0x0876,clif->pActionRequest,2,6);
+ packet(0x0890,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0891,clif->pDropItem,2,4);
+ packet(0x0893,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x089c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08ab,clif->pDull/*,XXX*/);
+ packet(0x0921,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0924,clif->pReqClickBuyingStore,2);
+ packet(0x0927,clif->pPartyInvite2,2);
+ packet(0x092b,clif->pFriendsListAdd,2);
+ packet(0x092e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x094a,clif->pTakeItem,2);
+ packet(0x0953,clif->pWalkToXY,2);
+ packet(0x0954,clif->pSolveCharName,2);
+ packet(0x0956,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0958,clif->pUseSkillToId,2,4,6);
+ packet(0x095c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x095d,clif->pMoveToKafra,2,4);
+ packet(0x0965,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0966,clif->pChangeDir,2,4);
#endif
// 2013-07-31cRagexe
#if PACKETVER == 20130731
- packet(0x022d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0366,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0863,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0865,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0878,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x087e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0884,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0889,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0894,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0895,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0923,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0925,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x092b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0935,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0941,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x094c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0956,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0957,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0958,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x095d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x095f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0962,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
+ packet(0x022d,clif->pFriendsListAdd,2);
+ packet(0x0366,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pChangeDir,2,4);
+ packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0863,clif->pReqClickBuyingStore,2);
+ packet(0x0865,clif->pUseSkillToId,2,4,6);
+ packet(0x0878,clif->pActionRequest,2,6);
+ packet(0x087e,clif->pReqCloseBuyingStore,0);
+ packet(0x0884,clif->pStoragePassword,0);
+ packet(0x0889,clif->pDull/*,XXX*/);
+ packet(0x088b,clif->pGetCharNameRequest,2);
+ packet(0x0894,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0895,clif->pDull/*,XXX*/);
+ packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0923,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0925,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x092b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092d,clif->pHomMenu,2,4);
+ packet(0x0935,clif->pTakeItem,2);
+ packet(0x0941,clif->pMoveToKafra,2,4);
+ packet(0x094c,clif->pMoveFromKafra,2,4);
+ packet(0x0956,clif->pPartyInvite2,2);
+ packet(0x0957,clif->pSolveCharName,2);
+ packet(0x0958,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x095d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x095f,clif->pTickSend,2);
+ packet(0x0962,clif->pDropItem,2,4);
#endif
// 2013-08-07aRagexe
#if PACKETVER == 20130807
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0887,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0887,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-08-14aRagexe
#if PACKETVER == 20130814
- packet(0x0202,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0281,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0368,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0815,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0835,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0868,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0873,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0874,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0885,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0887,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0889,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0895,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0896,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a4,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0923,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0926,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0927,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0936,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0937,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x093a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0941,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0947,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0958,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0959,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0962,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
+ packet(0x0202,clif->pMoveToKafra,2,4);
+ packet(0x0281,clif->pFriendsListAdd,2);
+ packet(0x0368,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0815,clif->pDull/*,XXX*/);
+ packet(0x0835,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0868,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0873,clif->pMoveFromKafra,2,4);
+ packet(0x0874,clif->pActionRequest,2,6);
+ packet(0x0885,clif->pStoragePassword,0);
+ packet(0x0887,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0889,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088a,clif->pTickSend,2);
+ packet(0x088c,clif->pChangeDir,2,4);
+ packet(0x0895,clif->pReqClickBuyingStore,2);
+ packet(0x0896,clif->pDull/*,XXX*/);
+ packet(0x08a4,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0923,clif->pSolveCharName,2);
+ packet(0x0926,clif->pTakeItem,2);
+ packet(0x0927,clif->pPartyInvite2,2);
+ packet(0x0936,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0937,clif->pGetCharNameRequest,2);
+ packet(0x093a,clif->pWalkToXY,2);
+ packet(0x0941,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0947,clif->pUseSkillToId,2,4,6);
+ packet(0x094e,clif->pReqCloseBuyingStore,0);
+ packet(0x0958,clif->pHomMenu,2,4);
+ packet(0x0959,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x095f,clif->pDropItem,2,4);
+ packet(0x0962,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
#endif
// 2013-08-21bRagexe
#if PACKETVER == 20130821
- packet(0x0202,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0360,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0437,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0438,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x07ec,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0815,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0862,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0863,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x086e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0879,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0881,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x088d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0892,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a6,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08ad,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x091d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0923,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x093e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0947,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0954,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x095e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0962,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0964,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0967,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0969,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
+ packet(0x0202,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0360,clif->pStoragePassword,0);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0437,clif->pMoveToKafra,2,4);
+ packet(0x0438,clif->pDull/*,XXX*/);
+ packet(0x07ec,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0815,clif->pWalkToXY,2);
+ packet(0x0862,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0863,clif->pActionRequest,2,6);
+ packet(0x086e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0879,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0881,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x088d,clif->pTickSend,2);
+ packet(0x088f,clif->pFriendsListAdd,2);
+ packet(0x0892,clif->pReqClickBuyingStore,2);
+ packet(0x08a6,clif->pReqCloseBuyingStore,0);
+ packet(0x08ad,clif->pDull/*,XXX*/);
+ packet(0x091d,clif->pChangeDir,2,4);
+ packet(0x0923,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092d,clif->pGetCharNameRequest,2);
+ packet(0x093e,clif->pMoveFromKafra,2,4);
+ packet(0x0947,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0954,clif->pUseSkillToId,2,4,6);
+ packet(0x095e,clif->pSolveCharName,2);
+ packet(0x0962,clif->pTakeItem,2);
+ packet(0x0964,clif->pDropItem,2,4);
+ packet(0x0967,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0969,clif->pPartyInvite2,2);
#endif
// 2013-08-28bRagexe, 2013-08-28cRagexe
#if PACKETVER == 20130828
- packet(0x023b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0361,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0364,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x07ec,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0817,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0873,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x087e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0889,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0893,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a3,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08ac,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0917,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0919,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x091e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0923,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0924,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0928,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0929,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0930,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0944,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0946,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x094c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x094f,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x095d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0966,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x023b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0361,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0364,clif->pDull/*,XXX*/);
+ packet(0x07ec,clif->pReqClickBuyingStore,2);
+ packet(0x0817,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0873,clif->pSearchStoreInfoNextPage,0);
+ packet(0x087e,clif->pDropItem,2,4);
+ packet(0x0889,clif->pHomMenu,2,4);
+ packet(0x0893,clif->pStoragePassword,0);
+ packet(0x089e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089f,clif->pChangeDir,2,4);
+ packet(0x08a3,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08ac,clif->pGetCharNameRequest,2);
+ packet(0x0917,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0919,clif->pReqCloseBuyingStore,0);
+ packet(0x091e,clif->pTakeItem,2);
+ packet(0x0923,clif->pUseSkillToId,2,4,6);
+ packet(0x0924,clif->pTickSend,2);
+ packet(0x0928,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0929,clif->pMoveFromKafra,2,4);
+ packet(0x0930,clif->pSolveCharName,2);
+ packet(0x0944,clif->pFriendsListAdd,2);
+ packet(0x0946,clif->pDull/*,XXX*/);
+ packet(0x094a,clif->pPartyInvite2,2);
+ packet(0x094c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x094f,clif->pActionRequest,2,6);
+ packet(0x095d,clif->pWalkToXY,2);
+ packet(0x0966,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pWantToConnection,2,6,10,14,18);
#endif
// 2013-09-04aRagexe
#if PACKETVER == 20130904
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0838,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0937,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x093a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0956,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pChangeDir,2,4);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0838,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0937,clif->pFriendsListAdd,2);
+ packet(0x093a,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0956,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-09-11aRagexe, 2013-09-11bRagexe
#if PACKETVER == 20130911
- packet(0x035f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0364,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0868,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x086b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x086d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0889,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0891,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a4,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x091e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x093a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0940,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0948,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0967,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x096a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x035f,clif->pReqClickBuyingStore,2);
+ packet(0x0364,clif->pGetCharNameRequest,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085c,clif->pPartyInvite2,2);
+ packet(0x0868,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x086b,clif->pStoragePassword,0);
+ packet(0x086d,clif->pMoveFromKafra,2,4);
+ packet(0x087b,clif->pDull/*,XXX*/);
+ packet(0x0889,clif->pTakeItem,2);
+ packet(0x0891,clif->pHomMenu,2,4);
+ packet(0x08a4,clif->pItemListWindowSelected,2,4,8);
+ packet(0x091e,clif->pChangeDir,2,4);
+ packet(0x093a,clif->pDull/*,XXX*/);
+ packet(0x0940,clif->pTickSend,2);
+ packet(0x0948,clif->pFriendsListAdd,2);
+ packet(0x0967,clif->pDropItem,2,4);
+ packet(0x096a,clif->pMoveToKafra,2,4);
#endif
// 2013-09-17aRagexe
#if PACKETVER == 20130917
- packet(0x035f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0811,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0838,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x083c,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0863,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0868,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x086e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x086f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x087a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0895,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x089d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a0,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a2,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08a8,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0918,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0921,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0923,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0934,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x094c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0957,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0959,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x096a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
+ packet(0x035f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0811,clif->pActionRequest,2,6);
+ packet(0x0838,clif->pReqClickBuyingStore,2);
+ packet(0x083c,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0863,clif->pMoveFromKafra,2,4);
+ packet(0x0868,clif->pPartyInvite2,2);
+ packet(0x086e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x086f,clif->pTickSend,2);
+ packet(0x087a,clif->pTakeItem,2);
+ packet(0x087e,clif->pUseSkillToId,2,4,6);
+ packet(0x088a,clif->pStoragePassword,0);
+ packet(0x0895,clif->pSolveCharName,2);
+ packet(0x089b,clif->pReqCloseBuyingStore,0);
+ packet(0x089d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a0,clif->pMoveToKafra,2,4);
+ packet(0x08a2,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08a8,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0918,clif->pChangeDir,2,4);
+ packet(0x091c,clif->pDropItem,2,4);
+ packet(0x091e,clif->pDull/*,XXX*/);
+ packet(0x0921,clif->pGetCharNameRequest,2);
+ packet(0x0923,clif->pHomMenu,2,4);
+ packet(0x0934,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x094c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x094e,clif->pDull/*,XXX*/);
+ packet(0x0957,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0959,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095b,clif->pWalkToXY,2);
+ packet(0x096a,clif->pFriendsListAdd,2);
#endif
// 2013-09-25aRagexe, 2013-09-25bRagexe, 2013-09-25cRagexe
#if PACKETVER == 20130925
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x086e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0875,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0876,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0885,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0887,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0890,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0940,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0958,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0969,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086d,clif->pStoragePassword,0);
+ packet(0x086e,clif->pPartyInvite2,2);
+ packet(0x0875,clif->pHomMenu,2,4);
+ packet(0x0876,clif->pMoveFromKafra,2,4);
+ packet(0x087d,clif->pDropItem,2,4);
+ packet(0x0885,clif->pChangeDir,2,4);
+ packet(0x0887,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088f,clif->pFriendsListAdd,2);
+ packet(0x0890,clif->pDull/*,XXX*/);
+ packet(0x0940,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0958,clif->pTakeItem,2);
+ packet(0x095a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x095b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095c,clif->pMoveToKafra,2,4);
+ packet(0x0969,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-10-02aRagexe
#if PACKETVER == 20131002
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0940,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pStoragePassword,0);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pTickSend,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0940,clif->pWalkToXY,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-10-08aRagexe
#if PACKETVER == 20131008
- packet(0x0202,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0362,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x07e4,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x083c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x085d,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x085e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0863,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x086c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0883,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0884,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0885,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0896,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x089c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a9,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0917,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0923,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0927,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0932,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0934,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0936,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x093c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0947,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0952,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0954,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0956,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x095d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0969,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x0202,clif->pGetCharNameRequest,2);
+ packet(0x0362,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x07e4,clif->pActionRequest,2,6);
+ packet(0x083c,clif->pReqCloseBuyingStore,0);
+ packet(0x085d,clif->pDull/*,XXX*/);
+ packet(0x085e,clif->pWalkToXY,2);
+ packet(0x0863,clif->pPartyInvite2,2);
+ packet(0x086c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086d,clif->pSolveCharName,2);
+ packet(0x0883,clif->pMoveToKafra,2,4);
+ packet(0x0884,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0885,clif->pDull/*,XXX*/);
+ packet(0x0896,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x089c,clif->pChangeDir,2,4);
+ packet(0x08a9,clif->pUseSkillToId,2,4,6);
+ packet(0x0917,clif->pMoveFromKafra,2,4);
+ packet(0x091c,clif->pTakeItem,2);
+ packet(0x0923,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0927,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0932,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0934,clif->pTickSend,2);
+ packet(0x0936,clif->pReqClickBuyingStore,2);
+ packet(0x093c,clif->pHomMenu,2,4);
+ packet(0x0947,clif->pStoragePassword,0);
+ packet(0x0952,clif->pDropItem,2,4);
+ packet(0x0954,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0956,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x095d,clif->pFriendsListAdd,2);
+ packet(0x0969,clif->pReqOpenBuyingStore,2,4,8,9,89);
#endif
// 2013-10-16aRagexe, 2013-10-16bRagexe
#if PACKETVER == 20131016
- packet(0x022d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0281,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0361,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0364,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0366,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x07ec,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0802,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x085a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x085d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0863,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0864,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0867,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x086c,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0870,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0875,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0887,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0888,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0890,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0894,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x091a,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x091e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0927,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0946,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x095e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0962,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0966,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x022d,clif->pMoveToKafra,2,4);
+ packet(0x0281,clif->pPartyInvite2,2);
+ packet(0x0361,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0364,clif->pDropItem,2,4);
+ packet(0x0366,clif->pReqClickBuyingStore,2);
+ packet(0x07ec,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0802,clif->pDull/*,XXX*/);
+ packet(0x085a,clif->pDull/*,XXX*/);
+ packet(0x085d,clif->pGetCharNameRequest,2);
+ packet(0x0863,clif->pUseSkillToId,2,4,6);
+ packet(0x0864,clif->pStoragePassword,0);
+ packet(0x0867,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x086c,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0870,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0875,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0887,clif->pTakeItem,2);
+ packet(0x0888,clif->pHomMenu,2,4);
+ packet(0x088b,clif->pFriendsListAdd,2);
+ packet(0x0890,clif->pSolveCharName,2);
+ packet(0x0894,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x091a,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x091e,clif->pMoveFromKafra,2,4);
+ packet(0x091f,clif->pWalkToXY,2);
+ packet(0x0927,clif->pTickSend,2);
+ packet(0x0946,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x094e,clif->pReqCloseBuyingStore,0);
+ packet(0x095e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0962,clif->pActionRequest,2,6);
+ packet(0x0966,clif->pChangeDir,2,4);
#endif
// 2013-10-23aRagexe
#if PACKETVER == 20131023
- packet(0x0366,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0438,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0819,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0835,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x085b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0862,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x086e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0872,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0876,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0885,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x088f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a7,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08ab,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ac,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0919,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x091d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0923,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0924,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0935,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0937,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0944,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x094a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0951,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0954,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
+ packet(0x0366,clif->pReqCloseBuyingStore,0);
+ packet(0x0438,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0819,clif->pDropItem,2,4);
+ packet(0x0835,clif->pDull/*,XXX*/);
+ packet(0x085b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0862,clif->pDull/*,XXX*/);
+ packet(0x086e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0872,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0876,clif->pUseSkillToId,2,4,6);
+ packet(0x087f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0885,clif->pStoragePassword,0);
+ packet(0x088a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088b,clif->pTakeItem,2);
+ packet(0x088f,clif->pMoveToKafra,2,4);
+ packet(0x08a7,clif->pHomMenu,2,4);
+ packet(0x08ab,clif->pChangeDir,2,4);
+ packet(0x08ac,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0919,clif->pSolveCharName,2);
+ packet(0x091d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0923,clif->pActionRequest,2,6);
+ packet(0x0924,clif->pTickSend,2);
+ packet(0x0935,clif->pReqClickBuyingStore,2);
+ packet(0x0937,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0944,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x094a,clif->pFriendsListAdd,2);
+ packet(0x0951,clif->pGetCharNameRequest,2);
+ packet(0x0954,clif->pMoveFromKafra,2,4);
+ packet(0x095b,clif->pWalkToXY,2);
#endif
// 2013-10-30aRagexe
#if PACKETVER == 20131030
- packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0887,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a2,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0925,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pHomMenu,2,4);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087d,clif->pFriendsListAdd,2);
+ packet(0x0887,clif->pStoragePassword,0);
+ packet(0x08a2,clif->pDull/*,XXX*/);
+ packet(0x0925,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-11-06aRagexe, 2013-11-07aRagexe, 2013-11-07bRagexe, 2013-11-07cRagexe, 2013-11-08aRagexe
#if PACKETVER == 20131106 || \
PACKETVER == 20131107 || \
PACKETVER == 20131108
- packet(0x0281,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0363,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0369,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0436,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0802,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0817,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0866,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0867,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0870,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0875,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0887,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0891,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0893,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0894,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a2,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0919,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x091d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0929,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0935,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x093b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0942,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0946,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0947,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0948,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0950,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0954,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x095d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0962,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0967,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
+ packet(0x0281,clif->pGetCharNameRequest,2);
+ packet(0x0363,clif->pUseSkillToId,2,4,6);
+ packet(0x0369,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0436,clif->pStoragePassword,0);
+ packet(0x0802,clif->pChangeDir,2,4);
+ packet(0x0817,clif->pDull/*,XXX*/);
+ packet(0x0866,clif->pWalkToXY,2);
+ packet(0x0867,clif->pMoveToKafra,2,4);
+ packet(0x0870,clif->pReqCloseBuyingStore,0);
+ packet(0x0875,clif->pDropItem,2,4);
+ packet(0x0887,clif->pTickSend,2);
+ packet(0x0891,clif->pSolveCharName,2);
+ packet(0x0893,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0894,clif->pHomMenu,2,4);
+ packet(0x08a2,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0919,clif->pSearchStoreInfoNextPage,0);
+ packet(0x091d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0929,clif->pMoveFromKafra,2,4);
+ packet(0x0935,clif->pFriendsListAdd,2);
+ packet(0x093b,clif->pTakeItem,2);
+ packet(0x0942,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0946,clif->pReqClickBuyingStore,2);
+ packet(0x0947,clif->pActionRequest,2,6);
+ packet(0x0948,clif->pDull/*,XXX*/);
+ packet(0x0950,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0954,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x095d,clif->pPartyInvite2,2);
+ packet(0x0962,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0967,clif->pReqTradeBuyingStore,2,4,8,12);
#endif
// 2013-11-13bRagexe
#if PACKETVER == 20131113
- packet(0x0364,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x086d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0879,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x088c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x088f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a4,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x091c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0920,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0926,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0927,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0928,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0929,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x092b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x092e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x092f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0934,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0936,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x093c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0949,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0950,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x095d,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x095f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0960,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0964,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0969,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
+ packet(0x0364,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x086d,clif->pReqCloseBuyingStore,0);
+ packet(0x0879,clif->pSearchStoreInfoNextPage,0);
+ packet(0x088c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x088f,clif->pDropItem,2,4);
+ packet(0x089a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a4,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a8,clif->pDull/*,XXX*/);
+ packet(0x091c,clif->pMoveFromKafra,2,4);
+ packet(0x0920,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0926,clif->pHomMenu,2,4);
+ packet(0x0927,clif->pPartyInvite2,2);
+ packet(0x0928,clif->pStoragePassword,0);
+ packet(0x0929,clif->pTickSend,2);
+ packet(0x092b,clif->pTakeItem,2);
+ packet(0x092c,clif->pFriendsListAdd,2);
+ packet(0x092d,clif->pReqClickBuyingStore,2);
+ packet(0x092e,clif->pGetCharNameRequest,2);
+ packet(0x092f,clif->pSolveCharName,2);
+ packet(0x0934,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0936,clif->pWalkToXY,2);
+ packet(0x093c,clif->pChangeDir,2,4);
+ packet(0x0949,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0950,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x095d,clif->pActionRequest,2,6);
+ packet(0x095f,clif->pUseSkillToId,2,4,6);
+ packet(0x0960,clif->pMoveToKafra,2,4);
+ packet(0x0964,clif->pDull/*,XXX*/);
+ packet(0x0969,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
#endif
// 2013-11-20dRagexe
#if PACKETVER == 20131120
- packet(0x0361,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0368,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0802,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0811,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0817,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x085f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0862,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0884,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a1,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a8,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0917,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0926,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0927,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x092d,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x093e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x093f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0940,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0950,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0953,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0955,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0956,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x095e,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x0361,clif->pSolveCharName,2);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0368,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0802,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0811,clif->pDull/*,XXX*/);
+ packet(0x0817,clif->pTickSend,2);
+ packet(0x085a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x085f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0862,clif->pReqCloseBuyingStore,0);
+ packet(0x0884,clif->pUseSkillToId,2,4,6);
+ packet(0x088c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088d,clif->pFriendsListAdd,2);
+ packet(0x089e,clif->pTakeItem,2);
+ packet(0x08a1,clif->pHomMenu,2,4);
+ packet(0x08a4,clif->pStoragePassword,0);
+ packet(0x08a8,clif->pActionRequest,2,6);
+ packet(0x0917,clif->pDropItem,2,4);
+ packet(0x0926,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0927,clif->pMoveToKafra,2,4);
+ packet(0x092b,clif->pWalkToXY,2);
+ packet(0x092d,clif->pSearchStoreInfoNextPage,0);
+ packet(0x093e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x093f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0940,clif->pDull/*,XXX*/);
+ packet(0x0950,clif->pGetCharNameRequest,2);
+ packet(0x0953,clif->pPartyInvite2,2);
+ packet(0x0955,clif->pReqClickBuyingStore,2);
+ packet(0x0956,clif->pChangeDir,2,4);
+ packet(0x095e,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2013-11-27bRagexe
#if PACKETVER == 20131127
- packet(0x035f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0364,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0365,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0366,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0881,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0884,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0894,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0930,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x093a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0940,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x094c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x095c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0967,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x035f,clif->pReqClickBuyingStore,2);
+ packet(0x0364,clif->pGetCharNameRequest,2);
+ packet(0x0365,clif->pWalkToXY,2);
+ packet(0x0366,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pMoveFromKafra,2,4);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0881,clif->pDull/*,XXX*/);
+ packet(0x0884,clif->pHomMenu,2,4);
+ packet(0x088d,clif->pChangeDir,2,4);
+ packet(0x0894,clif->pStoragePassword,0);
+ packet(0x089e,clif->pDull/*,XXX*/);
+ packet(0x0930,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x093a,clif->pFriendsListAdd,2);
+ packet(0x0940,clif->pTickSend,2);
+ packet(0x094c,clif->pTakeItem,2);
+ packet(0x094f,clif->pDropItem,2,4);
+ packet(0x095c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0967,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pMoveToKafra,2,4);
#endif
// 2013-12-04eRagexe
#if PACKETVER == 20131204
- packet(0x0365,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0366,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x07e4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x07ec,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0862,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0869,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0877,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0879,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x087f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0882,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a0,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08a4,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a7,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08ad,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x091f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0928,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x092d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x092f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0932,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x093b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0941,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0951,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0958,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0959,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x095b,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0961,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0967,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
+ packet(0x0365,clif->pReqCloseBuyingStore,0);
+ packet(0x0366,clif->pTickSend,2);
+ packet(0x07e4,clif->pStoragePassword,0);
+ packet(0x07ec,clif->pReqClickBuyingStore,2);
+ packet(0x085a,clif->pPartyInvite2,2);
+ packet(0x0862,clif->pChangeDir,2,4);
+ packet(0x0869,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0877,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0879,clif->pSolveCharName,2);
+ packet(0x087f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0882,clif->pFriendsListAdd,2);
+ packet(0x08a0,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08a4,clif->pDropItem,2,4);
+ packet(0x08a7,clif->pTakeItem,2);
+ packet(0x08ad,clif->pGetCharNameRequest,2);
+ packet(0x091f,clif->pHomMenu,2,4);
+ packet(0x0928,clif->pActionRequest,2,6);
+ packet(0x092d,clif->pUseSkillToId,2,4,6);
+ packet(0x092f,clif->pWalkToXY,2);
+ packet(0x0932,clif->pSearchStoreInfoNextPage,0);
+ packet(0x093b,clif->pDull/*,XXX*/);
+ packet(0x0941,clif->pMoveToKafra,2,4);
+ packet(0x0951,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0958,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0959,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x095b,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0961,clif->pDull/*,XXX*/);
+ packet(0x0967,clif->pMoveFromKafra,2,4);
#endif
// 2013-12-11cRagexe, 2013-12-11dRagexe
#if PACKETVER == 20131211
- packet(0x0202,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0366,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0865,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x086e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0873,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0881,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0886,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0892,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a3,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a4,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ab,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x092b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0931,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x094c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pUseSkillToId,2,4,6);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0366,clif->pTakeItem,2);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pFriendsListAdd,2);
+ packet(0x0865,clif->pPartyInvite2,2);
+ packet(0x086e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0873,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0881,clif->pDull/*,XXX*/);
+ packet(0x0886,clif->pHomMenu,2,4);
+ packet(0x0892,clif->pMoveToKafra,2,4);
+ packet(0x08a3,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a4,clif->pChangeDir,2,4);
+ packet(0x08ab,clif->pDropItem,2,4);
+ packet(0x092b,clif->pStoragePassword,0);
+ packet(0x0931,clif->pMoveFromKafra,2,4);
+ packet(0x094c,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-12-18bRagexe
#if PACKETVER == 20131218
- packet(0x022d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x087b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08ab,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0947,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pHomMenu,2,4);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085c,clif->pStoragePassword,0);
+ packet(0x087b,clif->pDull/*,XXX*/);
+ packet(0x08ab,clif->pFriendsListAdd,2);
+ packet(0x092f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0947,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-12-23bRagexe, 2013-12-23cRagexe
#if PACKETVER == 20131223
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x08a4,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-12-30aRagexe
#if PACKETVER == 20131230
- packet(0x022d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x02c4,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x035f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0365,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0369,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0438,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0860,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0871,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x087b,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x087e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0895,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0898,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a9,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x091d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x091f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0926,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x092a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x093d,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x093e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0943,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0949,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x094c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0968,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0969,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x096a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
+ packet(0x022d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x02c4,clif->pUseSkillToId,2,4,6);
+ packet(0x035f,clif->pWalkToXY,2);
+ packet(0x0365,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0369,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0438,clif->pTickSend,2);
+ packet(0x0860,clif->pDropItem,2,4);
+ packet(0x0871,clif->pActionRequest,2,6);
+ packet(0x087b,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x087e,clif->pDull/*,XXX*/);
+ packet(0x087f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0895,clif->pMoveFromKafra,2,4);
+ packet(0x0898,clif->pSolveCharName,2);
+ packet(0x089c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a9,clif->pPartyInvite2,2);
+ packet(0x091d,clif->pStoragePassword,0);
+ packet(0x091e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x091f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0926,clif->pGetCharNameRequest,2);
+ packet(0x092a,clif->pTakeItem,2);
+ packet(0x093d,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x093e,clif->pDull/*,XXX*/);
+ packet(0x0943,clif->pFriendsListAdd,2);
+ packet(0x0949,clif->pHomMenu,2,4);
+ packet(0x094a,clif->pChangeDir,2,4);
+ packet(0x094c,clif->pReqCloseBuyingStore,0);
+ packet(0x0968,clif->pMoveToKafra,2,4);
+ packet(0x0969,clif->pReqClickBuyingStore,2);
+ packet(0x096a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
#endif
// 2014-01-08cRagexe, 2014-01-08dRagexe
#if PACKETVER == 20140108
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0936,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0936,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-01-15aRagexe, 2014-01-15bRagexe, 2014-01-15cRagexe, 2014-01-15eRagexe
#if PACKETVER == 20140115
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0367,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0865,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0887,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x088a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088e,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x089b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a7,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0965,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0966,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pDropItem,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0367,clif->pMoveFromKafra,2,4);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pGetCharNameRequest,2);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0865,clif->pStoragePassword,0);
+ packet(0x0887,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x088a,clif->pDull/*,XXX*/);
+ packet(0x088e,clif->pMoveToKafra,2,4);
+ packet(0x089b,clif->pFriendsListAdd,2);
+ packet(0x08a7,clif->pChangeDir,2,4);
+ packet(0x092d,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pTakeItem,2);
+ packet(0x095b,clif->pDull/*,XXX*/);
+ packet(0x095d,clif->pPartyInvite2,2);
+ packet(0x0965,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0966,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2014-01-22aRagexe
#if PACKETVER == 20140122
- packet(0x0360,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x07ec,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0811,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0863,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0870,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0871,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0872,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0890,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0893,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0899,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x089d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08a2,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08aa,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0917,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x091a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0925,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x092f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0940,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0941,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0942,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x094c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0950,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0952,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0955,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0957,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x095d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x0360,clif->pActionRequest,2,6);
+ packet(0x07ec,clif->pReqClickBuyingStore,2);
+ packet(0x0811,clif->pReqCloseBuyingStore,0);
+ packet(0x0863,clif->pHomMenu,2,4);
+ packet(0x0870,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0871,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0872,clif->pPartyInvite2,2);
+ packet(0x088c,clif->pDull/*,XXX*/);
+ packet(0x0890,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0893,clif->pFriendsListAdd,2);
+ packet(0x0899,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x089d,clif->pGetCharNameRequest,2);
+ packet(0x08a2,clif->pDull/*,XXX*/);
+ packet(0x08aa,clif->pDropItem,2,4);
+ packet(0x0917,clif->pTickSend,2);
+ packet(0x091a,clif->pChangeDir,2,4);
+ packet(0x0925,clif->pWalkToXY,2);
+ packet(0x092f,clif->pMoveToKafra,2,4);
+ packet(0x0940,clif->pUseSkillToId,2,4,6);
+ packet(0x0941,clif->pSolveCharName,2);
+ packet(0x0942,clif->pTakeItem,2);
+ packet(0x094b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x094c,clif->pMoveFromKafra,2,4);
+ packet(0x0950,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0952,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0955,clif->pStoragePassword,0);
+ packet(0x0957,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x095d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095f,clif->pReqOpenBuyingStore,2,4,8,9,89);
#endif
// 2014-01-29aRagexe, 2014-01-29cRagexe
#if PACKETVER == 20140129
- packet(0x0281,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0367,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07ec,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0802,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0884,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0885,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0889,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0921,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0924,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x092c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0958,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0961,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pUseSkillToId,2,4,6);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pDull/*,XXX*/);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0367,clif->pDropItem,2,4);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07ec,clif->pChangeDir,2,4);
+ packet(0x0802,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pDull/*,XXX*/);
+ packet(0x0884,clif->pHomMenu,2,4);
+ packet(0x0885,clif->pTakeItem,2);
+ packet(0x0889,clif->pMoveFromKafra,2,4);
+ packet(0x0921,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0924,clif->pItemListWindowSelected,2,4,8);
+ packet(0x092c,clif->pStoragePassword,0);
+ packet(0x094d,clif->pMoveToKafra,2,4);
+ packet(0x0958,clif->pPartyInvite2,2);
+ packet(0x0961,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-02-05bRagexe
#if PACKETVER == 20140205
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0938,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0938,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-02-12aRagexe
#if PACKETVER == 20140212
- packet(0x02c4,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0369,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0438,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x086e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0874,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0877,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0878,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x087e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0888,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x088c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x089d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x08a0,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a1,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a7,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08ac,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08ad,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0919,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0928,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0930,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0934,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0936,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x093d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0944,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0952,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0953,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0960,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
+ packet(0x02c4,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0369,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0438,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x086e,clif->pUseSkillToId,2,4,6);
+ packet(0x0874,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0877,clif->pReqClickBuyingStore,2);
+ packet(0x0878,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x087e,clif->pWalkToXY,2);
+ packet(0x0888,clif->pMoveFromKafra,2,4);
+ packet(0x088c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x089d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x08a0,clif->pStoragePassword,0);
+ packet(0x08a1,clif->pPartyInvite2,2);
+ packet(0x08a7,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08ac,clif->pMoveToKafra,2,4);
+ packet(0x08ad,clif->pDropItem,2,4);
+ packet(0x0919,clif->pChangeDir,2,4);
+ packet(0x091b,clif->pFriendsListAdd,2);
+ packet(0x0928,clif->pSolveCharName,2);
+ packet(0x0930,clif->pTickSend,2);
+ packet(0x0934,clif->pActionRequest,2,6);
+ packet(0x0936,clif->pDull/*,XXX*/);
+ packet(0x093d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0944,clif->pHomMenu,2,4);
+ packet(0x094e,clif->pDull/*,XXX*/);
+ packet(0x0952,clif->pGetCharNameRequest,2);
+ packet(0x0953,clif->pTakeItem,2);
+ packet(0x0960,clif->pReqCloseBuyingStore,0);
#endif
// 2014-02-19aRagexe
#if PACKETVER == 20140219
- packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0360,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0364,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0802,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0838,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x085d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085f,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0860,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0868,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x086f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x087c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0889,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0898,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x089f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a6,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08ac,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0921,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0927,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0939,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0946,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0949,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0953,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x095a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0961,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
+ packet(0x0202,clif->pFriendsListAdd,2);
+ packet(0x0360,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pSolveCharName,2);
+ packet(0x0802,clif->pTakeItem,2);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0838,clif->pUseSkillToId,2,4,6);
+ packet(0x085b,clif->pReqClickBuyingStore,2);
+ packet(0x085c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x085d,clif->pWalkToXY,2);
+ packet(0x085f,clif->pGetCharNameRequest,2);
+ packet(0x0860,clif->pHomMenu,2,4);
+ packet(0x0868,clif->pStoragePassword,0);
+ packet(0x086f,clif->pPartyInvite2,2);
+ packet(0x087c,clif->pMoveToKafra,2,4);
+ packet(0x0889,clif->pDull/*,XXX*/);
+ packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0898,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x089f,clif->pDropItem,2,4);
+ packet(0x08a6,clif->pChangeDir,2,4);
+ packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08ac,clif->pMoveFromKafra,2,4);
+ packet(0x0921,clif->pActionRequest,2,6);
+ packet(0x0927,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0939,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0946,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0949,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0953,clif->pSearchStoreInfoNextPage,0);
+ packet(0x095a,clif->pReqCloseBuyingStore,0);
+ packet(0x0961,clif->pTickSend,2);
#endif
// 2014-02-26aRagexe
#if PACKETVER == 20140226
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0362,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0364,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0867,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0877,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0887,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0894,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0895,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0921,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0931,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0941,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0962,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0964,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0969,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0362,clif->pFriendsListAdd,2);
+ packet(0x0364,clif->pStoragePassword,0);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pChangeDir,2,4);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0867,clif->pHomMenu,2,4);
+ packet(0x0877,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0887,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0894,clif->pDropItem,2,4);
+ packet(0x0895,clif->pMoveFromKafra,2,4);
+ packet(0x091a,clif->pMoveToKafra,2,4);
+ packet(0x0921,clif->pPartyInvite2,2);
+ packet(0x0931,clif->pDull/*,XXX*/);
+ packet(0x0941,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0962,clif->pDull/*,XXX*/);
+ packet(0x0964,clif->pTakeItem,2);
+ packet(0x0969,clif->pItemListWindowSelected,2,4,8);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-03-05aRagexe, 2014-03-05bRagexe
#if PACKETVER == 20140305
- packet(0x0202,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x07e4,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0878,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0934,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pTakeItem,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x07e4,clif->pFriendsListAdd,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pChangeDir,2,4);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0878,clif->pDull/*,XXX*/);
+ packet(0x0934,clif->pHomMenu,2,4);
+ packet(0x095e,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-03-12dRagexe
#if PACKETVER == 20140312
- packet(0x0202,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x023b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0366,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x085e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x086f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0889,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x088d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0891,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0894,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x089b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x089e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a6,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a9,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08ad,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x091b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x091c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x091e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x092a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0948,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x094c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0957,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x095e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0966,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x0202,clif->pUseSkillToId,2,4,6);
+ packet(0x023b,clif->pDull/*,XXX*/);
+ packet(0x0366,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x085e,clif->pReqClickBuyingStore,2);
+ packet(0x086f,clif->pTickSend,2);
+ packet(0x0889,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x088d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088e,clif->pActionRequest,2,6);
+ packet(0x0891,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0894,clif->pWalkToXY,2);
+ packet(0x089b,clif->pGetCharNameRequest,2);
+ packet(0x089d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x089e,clif->pDropItem,2,4);
+ packet(0x08a6,clif->pDull/*,XXX*/);
+ packet(0x08a9,clif->pFriendsListAdd,2);
+ packet(0x08ad,clif->pSolveCharName,2);
+ packet(0x091b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x091c,clif->pPartyInvite2,2);
+ packet(0x091e,clif->pHomMenu,2,4);
+ packet(0x092a,clif->pTakeItem,2);
+ packet(0x0948,clif->pReqCloseBuyingStore,0);
+ packet(0x094a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x094b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x094c,clif->pChangeDir,2,4);
+ packet(0x0957,clif->pMoveFromKafra,2,4);
+ packet(0x095d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x095e,clif->pStoragePassword,0);
+ packet(0x0966,clif->pMoveToKafra,2,4);
#endif
// 2014-03-19aRagexe
#if PACKETVER == 20140319
- packet(0x02c4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07e4,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0802,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0811,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0815,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x085a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0864,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0865,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0866,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x086e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0872,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0883,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x088e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0890,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0893,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x089f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a2,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091f,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0923,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0933,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0942,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0944,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0947,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x094c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0954,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0955,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0961,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0964,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x096a,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x02c4,clif->pTakeItem,2);
+ packet(0x07e4,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0802,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0811,clif->pReqClickBuyingStore,2);
+ packet(0x0815,clif->pHomMenu,2,4);
+ packet(0x085a,clif->pWalkToXY,2);
+ packet(0x0864,clif->pActionRequest,2,6);
+ packet(0x0865,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0866,clif->pChangeDir,2,4);
+ packet(0x086e,clif->pDull/*,XXX*/);
+ packet(0x0872,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0883,clif->pDropItem,2,4);
+ packet(0x088e,clif->pPartyInvite2,2);
+ packet(0x0890,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0893,clif->pDull/*,XXX*/);
+ packet(0x089f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a2,clif->pMoveToKafra,2,4);
+ packet(0x091f,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0923,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0933,clif->pReqCloseBuyingStore,0);
+ packet(0x0942,clif->pStoragePassword,0);
+ packet(0x0944,clif->pUseSkillToId,2,4,6);
+ packet(0x0947,clif->pMoveFromKafra,2,4);
+ packet(0x094c,clif->pGetCharNameRequest,2);
+ packet(0x0954,clif->pFriendsListAdd,2);
+ packet(0x0955,clif->pTickSend,2);
+ packet(0x0961,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0964,clif->pSolveCharName,2);
+ packet(0x096a,clif->pReqOpenBuyingStore,2,4,8,9,89);
#endif
// 2014-03-26aRagexe
#if PACKETVER == 20140326
- packet(0x0362,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0365,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x07ec,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x083c,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0865,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0867,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0869,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x086b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x087f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0887,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0898,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08aa,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08ac,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08ad,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0918,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0928,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x092a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093d,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0942,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0945,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0946,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0956,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0959,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x095a,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x095c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0969,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
+ packet(0x0362,clif->pGetCharNameRequest,2);
+ packet(0x0365,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x07ec,clif->pTakeItem,2);
+ packet(0x083c,clif->pReqClickBuyingStore,2);
+ packet(0x085b,clif->pReqCloseBuyingStore,0);
+ packet(0x0865,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0867,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0869,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x086b,clif->pMoveFromKafra,2,4);
+ packet(0x087c,clif->pWalkToXY,2);
+ packet(0x087e,clif->pFriendsListAdd,2);
+ packet(0x087f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0887,clif->pDull/*,XXX*/);
+ packet(0x0898,clif->pDropItem,2,4);
+ packet(0x08aa,clif->pDull/*,XXX*/);
+ packet(0x08ac,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08ad,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0918,clif->pTickSend,2);
+ packet(0x0928,clif->pSearchStoreInfoNextPage,0);
+ packet(0x092a,clif->pStoragePassword,0);
+ packet(0x093d,clif->pActionRequest,2,6);
+ packet(0x0942,clif->pHomMenu,2,4);
+ packet(0x0945,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0946,clif->pPartyInvite2,2);
+ packet(0x0956,clif->pChangeDir,2,4);
+ packet(0x0959,clif->pMoveToKafra,2,4);
+ packet(0x095a,clif->pSolveCharName,2);
+ packet(0x095c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0969,clif->pUseSkillToId,2,4,6);
#endif
// 2014-04-02fRagexe, 2014-04-02gRagexe
#if PACKETVER == 20140402
- packet(0x023b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0360,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0364,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07ec,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x085b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x085d,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0867,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0868,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0882,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0883,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x088c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0890,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0896,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x089a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08ac,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0920,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0926,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0933,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x093f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0944,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0946,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x094c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0950,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0958,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0965,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
+ packet(0x023b,clif->pReqClickBuyingStore,2);
+ packet(0x0360,clif->pChangeDir,2,4);
+ packet(0x0364,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07ec,clif->pSolveCharName,2);
+ packet(0x085b,clif->pMoveFromKafra,2,4);
+ packet(0x085d,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0867,clif->pReqCloseBuyingStore,0);
+ packet(0x0868,clif->pUseSkillToId,2,4,6);
+ packet(0x0882,clif->pDropItem,2,4);
+ packet(0x0883,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088a,clif->pGetCharNameRequest,2);
+ packet(0x088c,clif->pDull/*,XXX*/);
+ packet(0x0890,clif->pPartyInvite2,2);
+ packet(0x0896,clif->pHomMenu,2,4);
+ packet(0x089a,clif->pFriendsListAdd,2);
+ packet(0x08ac,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0920,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0926,clif->pStoragePassword,0);
+ packet(0x092d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0933,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x093f,clif->pWalkToXY,2);
+ packet(0x0944,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0946,clif->pActionRequest,2,6);
+ packet(0x094c,clif->pDull/*,XXX*/);
+ packet(0x0950,clif->pTickSend,2);
+ packet(0x0958,clif->pTakeItem,2);
+ packet(0x095c,clif->pMoveToKafra,2,4);
+ packet(0x0965,clif->pSearchStoreInfoListItemClick,2,6,10);
#endif
// 2014-04-09aRagexe, 2014-04-09bRagexe
#if PACKETVER == 20140409
- packet(0x0819,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x085b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0868,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x086a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0873,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0875,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x087e,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0883,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0884,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x088a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0890,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0893,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0896,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0899,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a2,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a4,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a6,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x08a7,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a9,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0918,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x092e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0942,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0947,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x095e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x0819,clif->pMoveFromKafra,2,4);
+ packet(0x085b,clif->pSolveCharName,2);
+ packet(0x0868,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x086a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0873,clif->pReqCloseBuyingStore,0);
+ packet(0x0875,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x087e,clif->pTickSend,2);
+ packet(0x0883,clif->pWalkToXY,2);
+ packet(0x0884,clif->pGetCharNameRequest,2);
+ packet(0x088a,clif->pDull/*,XXX*/);
+ packet(0x0890,clif->pTakeItem,2);
+ packet(0x0893,clif->pActionRequest,2,6);
+ packet(0x0896,clif->pUseSkillToId,2,4,6);
+ packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0899,clif->pFriendsListAdd,2);
+ packet(0x08a2,clif->pDull/*,XXX*/);
+ packet(0x08a4,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a6,clif->pSearchStoreInfoNextPage,0);
+ packet(0x08a7,clif->pChangeDir,2,4);
+ packet(0x08a9,clif->pStoragePassword,0);
+ packet(0x0918,clif->pDropItem,2,4);
+ packet(0x091c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x092e,clif->pPartyInvite2,2);
+ packet(0x0942,clif->pMoveToKafra,2,4);
+ packet(0x0947,clif->pHomMenu,2,4);
+ packet(0x094c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x095a,clif->pReqClickBuyingStore,2);
+ packet(0x095e,clif->pWantToConnection,2,6,10,14,18);
#endif
// 2014-04-16aRagexe, 2014-04-16bRagexe
#if PACKETVER == 20140416
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x095c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x095c,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-04-23aRagexe
#if PACKETVER == 20140423
- packet(0x022d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0360,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0436,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0811,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x083c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x085a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x085b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0862,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0863,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0866,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x086b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x086f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0873,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0890,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0895,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0896,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0898,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x089d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08a8,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08ad,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x091a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0920,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x094f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x095e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x022d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0360,clif->pStoragePassword,0);
+ packet(0x0436,clif->pFriendsListAdd,2);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x0811,clif->pMoveFromKafra,2,4);
+ packet(0x083c,clif->pChangeDir,2,4);
+ packet(0x085a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x085b,clif->pWalkToXY,2);
+ packet(0x0862,clif->pMoveToKafra,2,4);
+ packet(0x0863,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0866,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x086b,clif->pDropItem,2,4);
+ packet(0x086f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0873,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088b,clif->pSolveCharName,2);
+ packet(0x0890,clif->pUseSkillToId,2,4,6);
+ packet(0x0895,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0896,clif->pActionRequest,2,6);
+ packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0898,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089b,clif->pReqClickBuyingStore,2);
+ packet(0x089d,clif->pGetCharNameRequest,2);
+ packet(0x089f,clif->pReqCloseBuyingStore,0);
+ packet(0x08a8,clif->pHomMenu,2,4);
+ packet(0x08ad,clif->pDull/*,XXX*/);
+ packet(0x091a,clif->pTickSend,2);
+ packet(0x0920,clif->pPartyInvite2,2);
+ packet(0x094f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x095e,clif->pDull/*,XXX*/);
#endif
// 2014-04-30aRagexe
#if PACKETVER == 20140430
- packet(0x023b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x035f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0363,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0860,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0870,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0871,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0875,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087f,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0884,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0899,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a1,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0940,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x094b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0953,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0956,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
+ packet(0x023b,clif->pTickSend,2);
+ packet(0x035f,clif->pStoragePassword,0);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0363,clif->pUseSkillToId,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pDropItem,2,4);
+ packet(0x0860,clif->pFriendsListAdd,2);
+ packet(0x0870,clif->pPartyInvite2,2);
+ packet(0x0871,clif->pHomMenu,2,4);
+ packet(0x0875,clif->pMoveFromKafra,2,4);
+ packet(0x087f,clif->pTakeItem,2);
+ packet(0x0884,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0899,clif->pChangeDir,2,4);
+ packet(0x08a1,clif->pDull/*,XXX*/);
+ packet(0x093b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0940,clif->pGetCharNameRequest,2);
+ packet(0x094b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0953,clif->pDull/*,XXX*/);
+ packet(0x0956,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pSolveCharName,2);
#endif
// 2014-05-08bRagexe
#if PACKETVER == 20140508
- packet(0x022d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0366,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0368,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0802,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0861,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0886,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x089b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08ab,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0927,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0930,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0932,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0934,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x094e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x022d,clif->pSolveCharName,2);
+ packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pChangeDir,2,4);
+ packet(0x0366,clif->pPartyInvite2,2);
+ packet(0x0368,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pHomMenu,2,4);
+ packet(0x0802,clif->pGetCharNameRequest,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0861,clif->pTakeItem,2);
+ packet(0x0886,clif->pMoveToKafra,2,4);
+ packet(0x089b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08ab,clif->pDull/*,XXX*/);
+ packet(0x0927,clif->pStoragePassword,0);
+ packet(0x0930,clif->pMoveFromKafra,2,4);
+ packet(0x0932,clif->pDropItem,2,4);
+ packet(0x0934,clif->pDull/*,XXX*/);
+ packet(0x094e,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2014-05-14bRagexe
#if PACKETVER == 20140514
- packet(0x0437,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0817,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0865,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0868,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0876,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0877,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0885,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0886,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x088b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0895,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x089a,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a5,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0918,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0921,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0925,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x092c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x094d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0958,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0962,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0965,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x096a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
+ packet(0x0437,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0817,clif->pDull/*,XXX*/);
+ packet(0x0865,clif->pActionRequest,2,6);
+ packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0868,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0876,clif->pUseSkillToId,2,4,6);
+ packet(0x0877,clif->pDull/*,XXX*/);
+ packet(0x087d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0885,clif->pStoragePassword,0);
+ packet(0x0886,clif->pTickSend,2);
+ packet(0x088a,clif->pChangeDir,2,4);
+ packet(0x088b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0895,clif->pTakeItem,2);
+ packet(0x089a,clif->pSolveCharName,2);
+ packet(0x089c,clif->pFriendsListAdd,2);
+ packet(0x08a5,clif->pGetCharNameRequest,2);
+ packet(0x0918,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0921,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0925,clif->pReqClickBuyingStore,2);
+ packet(0x092c,clif->pMoveToKafra,2,4);
+ packet(0x092f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x094d,clif->pReqCloseBuyingStore,0);
+ packet(0x094e,clif->pMoveFromKafra,2,4);
+ packet(0x0958,clif->pHomMenu,2,4);
+ packet(0x095f,clif->pWalkToXY,2);
+ packet(0x0962,clif->pPartyInvite2,2);
+ packet(0x0965,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x096a,clif->pDropItem,2,4);
#endif
// 2014-05-21bRagexe
#if PACKETVER == 20140521
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0869,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x089c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08ac,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0968,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0869,clif->pStoragePassword,0);
+ packet(0x088b,clif->pDull/*,XXX*/);
+ packet(0x088d,clif->pChangeDir,2,4);
+ packet(0x089c,clif->pFriendsListAdd,2);
+ packet(0x08ac,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0968,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-05-28aRagexe
#if PACKETVER == 20140528
- packet(0x0202,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0360,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x085f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0862,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0872,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0875,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0877,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0879,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088a,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x088f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0894,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0896,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a4,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a8,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x08ab,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x091d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0929,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0930,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0938,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x093a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x093f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x094a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x094b,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x095f,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0963,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0964,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0966,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
+ packet(0x0202,clif->pWalkToXY,2);
+ packet(0x0360,clif->pStoragePassword,0);
+ packet(0x085f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0862,clif->pSolveCharName,2);
+ packet(0x0872,clif->pHomMenu,2,4);
+ packet(0x0875,clif->pDropItem,2,4);
+ packet(0x0877,clif->pTickSend,2);
+ packet(0x0879,clif->pMoveFromKafra,2,4);
+ packet(0x087e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088a,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x088f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0894,clif->pDull/*,XXX*/);
+ packet(0x0896,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089d,clif->pTakeItem,2);
+ packet(0x08a4,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a8,clif->pSearchStoreInfoNextPage,0);
+ packet(0x08ab,clif->pDull/*,XXX*/);
+ packet(0x091d,clif->pFriendsListAdd,2);
+ packet(0x0929,clif->pActionRequest,2,6);
+ packet(0x0930,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0938,clif->pReqCloseBuyingStore,0);
+ packet(0x093a,clif->pMoveToKafra,2,4);
+ packet(0x093f,clif->pPartyInvite2,2);
+ packet(0x094a,clif->pReqClickBuyingStore,2);
+ packet(0x094b,clif->pChangeDir,2,4);
+ packet(0x095f,clif->pGetCharNameRequest,2);
+ packet(0x0963,clif->pUseSkillToId,2,4,6);
+ packet(0x0964,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0966,clif->pReqTradeBuyingStore,2,4,8,12);
#endif
// 2014-06-05aRagexe, 2014-06-05bRagexe
#if PACKETVER == 20140605
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0369,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0921,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0931,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x094c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pReqCloseBuyingStore,0);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pActionRequest,2,6);
+ packet(0x0369,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pChangeDir,2,4);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0921,clif->pStoragePassword,0);
+ packet(0x0931,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pSolveCharName,2);
+ packet(0x094c,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-06-11cRagexe, 2014-06-11dRagexe, 2014-06-11hRagexe, 2014-06-12aRagexe, 2014-06-13aRagexe
#if PACKETVER == 20140611 || \
PACKETVER == 20140612 || \
PACKETVER == 20140613
- packet(0x0364,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0438,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x07e4,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0838,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0864,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0867,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x086c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0874,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0878,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x088c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0891,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0893,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0894,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x089b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a1,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a2,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0924,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0936,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0941,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x094f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0950,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0951,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0952,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0957,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0958,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0963,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0965,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0969,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
-#endif
-
-// 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-28bRagexe, 2018-04-04bRagexe, 2018-04-18aRagexe, 2018-04-25cRagexe, 2018-05-02bRagexe, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-23aRagexe, 2018-05-30aRagexe, 2018-06-05bRagexe, 2018-06-20cRagexe, 2018-06-20eRagexe, 2018-06-21aRagexe, 2018-07-04aRagexe, 2018-07-18bRagexe, 2018-07-18cRagexe, 2018-08-01cRagexe, 2018-08-08bRagexe, 2018-08-22cRagexe, 2018-08-29aRagexe, 2018-08-31aRagexe, 2018-09-12dRagexe, 2018-09-19aRagexe, 2018-10-02aRagexe, 2018-10-02bRagexe, 2018-10-17_02aRagexe, 2018-10-17_03aRagexe, 2018-10-17bRagexe, 2018-10-24bRagexe, 2018-10-31aRagexe, 2018-10-31bRagexe, 2018-11-07aRagexe, 2018-11-14cRagexe, 2018-11-14dRagexe
+ packet(0x0364,clif->pReqCloseBuyingStore,0);
+ packet(0x0438,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x07e4,clif->pMoveToKafra,2,4);
+ packet(0x0838,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0864,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0867,clif->pTickSend,2);
+ packet(0x086c,clif->pDull/*,XXX*/);
+ packet(0x0874,clif->pPartyInvite2,2);
+ packet(0x0878,clif->pTakeItem,2);
+ packet(0x088c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0891,clif->pActionRequest,2,6);
+ packet(0x0893,clif->pWalkToXY,2);
+ packet(0x0894,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x089b,clif->pFriendsListAdd,2);
+ packet(0x08a1,clif->pUseSkillToId,2,4,6);
+ packet(0x08a2,clif->pDull/*,XXX*/);
+ packet(0x0924,clif->pGetCharNameRequest,2);
+ packet(0x0936,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0941,clif->pStoragePassword,0);
+ packet(0x094a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x094f,clif->pSolveCharName,2);
+ packet(0x0950,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0951,clif->pChangeDir,2,4);
+ packet(0x0952,clif->pMoveFromKafra,2,4);
+ packet(0x0957,clif->pReqClickBuyingStore,2);
+ packet(0x0958,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0963,clif->pDropItem,2,4);
+ packet(0x0965,clif->pHomMenu,2,4);
+ packet(0x0969,clif->pSearchStoreInfoNextPage,0);
+#endif
+
+// 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-28bRagexe, 2018-04-04bRagexe, 2018-04-18aRagexe, 2018-04-25cRagexe, 2018-05-02bRagexe, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-23aRagexe, 2018-05-30aRagexe, 2018-06-05bRagexe, 2018-06-20cRagexe, 2018-06-20eRagexe, 2018-06-21aRagexe, 2018-07-04aRagexe, 2018-07-18bRagexe, 2018-07-18cRagexe, 2018-08-01cRagexe, 2018-08-08bRagexe, 2018-08-22cRagexe, 2018-08-29aRagexe, 2018-08-31aRagexe, 2018-09-12dRagexe, 2018-09-19aRagexe, 2018-10-02aRagexe, 2018-10-02bRagexe, 2018-10-17_02aRagexe, 2018-10-17_03aRagexe, 2018-10-17bRagexe, 2018-10-24bRagexe, 2018-10-31aRagexe, 2018-10-31bRagexe, 2018-11-07aRagexe, 2018-11-14cRagexe, 2018-11-14dRagexe, 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, 2019-09-04aRagexe, 2019-09-04bRagexe, 2019-09-18bRagexe, 2019-09-25aRagexe, 2019-09-25bRagexe, 2019-10-02cRagexe, 2019-10-02dRagexe, 2019-10-16fRagexe, 2019-10-16gRagexe, 2019-10-18aRagexe, 2019-10-23aRagexe, 2019-10-30cRagexe, 2019-11-06aRagexe, 2019-11-07aRagexe, 2019-11-13cRagexe, 2019-11-13eRagexe, 2019-11-20aRagexe, 2019-11-20dRagexe, 2019-11-27aRagexe, 2019-11-27bRagexe, 2019-12-04aRagexe, 2019-12-04bRagexe, 2019-12-11aRagexe, 2019-12-18bRagexe, 2019-12-24aRagexe, 2019-12-24bRagexe, 2020-01-08aRagexe, 2020-01-22cRagexe, 2020-01-29bRagexe, 2020-01-30aRagexe, 2020-02-05aRagexe, 2020-02-06aRagexe, 2020-02-12aRagexe, 2020-02-19dRagexe, 2020-03-04aRagexe, 2020-03-18bRagexe, 2020-04-01bRagexe, 2020-04-14_6aRagexe, 2020-04-14eRagexe, 2020-05-06aRagexe, 2020-05-20bRagexe, 2020-06-03aRagexe, 2020-06-17aRagexe, 2020-07-01bRagexe, 2020-07-01cRagexe
#if PACKETVER == 20140611 || \
PACKETVER == 20150225 || \
PACKETVER == 20180315 || \
@@ -3376,6477 +3376,6424 @@
PACKETVER == 20181024 || \
PACKETVER == 20181031 || \
PACKETVER == 20181107 || \
- PACKETVER == 20181114
- 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 // 90
- 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 // 12
+ PACKETVER == 20181114 || \
+ PACKETVER == 20181121 || \
+ PACKETVER == 20181128 || \
+ PACKETVER == 20181205 || \
+ PACKETVER == 20181212 || \
+ PACKETVER == 20181219 || \
+ PACKETVER == 20181226 || \
+ PACKETVER == 20190109 || \
+ PACKETVER == 20190116 || \
+ PACKETVER == 20190123 || \
+ PACKETVER == 20190213 || \
+ PACKETVER == 20190227 || \
+ PACKETVER == 20190228 || \
+ PACKETVER == 20190306 || \
+ PACKETVER == 20190313 || \
+ PACKETVER == 20190320 || \
+ PACKETVER == 20190322 || \
+ PACKETVER == 20190327 || \
+ PACKETVER == 20190403 || \
+ PACKETVER == 20190417 || \
+ PACKETVER == 20190418 || \
+ PACKETVER == 20190508 || \
+ PACKETVER == 20190522 || \
+ PACKETVER == 20190523 || \
+ PACKETVER == 20190529 || \
+ PACKETVER == 20190530 || \
+ PACKETVER == 20190605 || \
+ PACKETVER == 20190619 || \
+ PACKETVER == 20190703 || \
+ PACKETVER == 20190717 || \
+ PACKETVER == 20190724 || \
+ PACKETVER == 20190731 || \
+ PACKETVER == 20190802 || \
+ PACKETVER == 20190807 || \
+ PACKETVER == 20190821 || \
+ PACKETVER == 20190828 || \
+ PACKETVER == 20190904 || \
+ PACKETVER == 20190918 || \
+ PACKETVER == 20190925 || \
+ PACKETVER == 20191002 || \
+ PACKETVER == 20191016 || \
+ PACKETVER == 20191018 || \
+ PACKETVER == 20191023 || \
+ PACKETVER == 20191030 || \
+ PACKETVER == 20191106 || \
+ PACKETVER == 20191107 || \
+ PACKETVER == 20191113 || \
+ PACKETVER == 20191120 || \
+ PACKETVER == 20191127 || \
+ PACKETVER == 20191204 || \
+ PACKETVER == 20191211 || \
+ PACKETVER == 20191218 || \
+ PACKETVER == 20191224 || \
+ PACKETVER == 20200108 || \
+ PACKETVER == 20200122 || \
+ PACKETVER == 20200129 || \
+ PACKETVER == 20200130 || \
+ PACKETVER == 20200205 || \
+ PACKETVER == 20200206 || \
+ PACKETVER == 20200212 || \
+ PACKETVER == 20200219 || \
+ PACKETVER == 20200304 || \
+ PACKETVER == 20200318 || \
+ PACKETVER == 20200401 || \
+ PACKETVER == 20200414 || \
+ PACKETVER == 20200506 || \
+ PACKETVER == 20200520 || \
+ PACKETVER == 20200603 || \
+ PACKETVER == 20200617 || \
+ PACKETVER >= 20200701
+ packet(0x0202,clif->pFriendsListAdd,2);
+ packet(0x022d,clif->pHomMenu,2,4);
+ packet(0x023b,clif->pStoragePassword,0);
+ packet(0x0281,clif->pDull/*,XXX*/);
+ packet(0x02c4,clif->pPartyInvite2,2);
+ packet(0x035f,clif->pWalkToXY,2);
+ packet(0x0360,clif->pTickSend,2);
+ packet(0x0361,clif->pChangeDir,2,4);
+ packet(0x0362,clif->pTakeItem,2);
+ packet(0x0363,clif->pDropItem,2,4);
+ packet(0x0364,clif->pMoveToKafra,2,4);
+ packet(0x0365,clif->pMoveFromKafra,2,4);
+ packet(0x0366,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pGetCharNameRequest,2);
+ packet(0x0369,clif->pSolveCharName,2);
+ packet(0x0436,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0437,clif->pActionRequest,2,6);
+ packet(0x0438,clif->pUseSkillToId,2,4,6);
+ packet(0x07e4,clif->pItemListWindowSelected,2,4,8);
+ packet(0x07ec,clif->pDull/*,XXX*/);
+ packet(0x0802,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0811,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0815,clif->pReqCloseBuyingStore,0);
+ packet(0x0817,clif->pReqClickBuyingStore,2);
+ packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0835,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0838,clif->pSearchStoreInfoNextPage,0);
+ packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10);
#endif
// 2014-06-18aRagexe
#if PACKETVER == 20140618
- packet(0x085d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x085f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0860,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0861,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0878,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0884,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0885,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0886,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0890,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0892,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a7,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08ac,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0917,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x091f,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0929,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0935,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0938,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0939,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x093b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0945,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0954,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0957,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x095e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0962,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0967,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
+ packet(0x085d,clif->pMoveToKafra,2,4);
+ packet(0x085f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0860,clif->pTickSend,2);
+ packet(0x0861,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0878,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087d,clif->pSolveCharName,2);
+ packet(0x0884,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0885,clif->pMoveFromKafra,2,4);
+ packet(0x0886,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0890,clif->pChangeDir,2,4);
+ packet(0x0892,clif->pUseSkillToId,2,4,6);
+ packet(0x08a6,clif->pReqClickBuyingStore,2);
+ packet(0x08a7,clif->pWalkToXY,2);
+ packet(0x08ac,clif->pDull/*,XXX*/);
+ packet(0x0917,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x091f,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0929,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0935,clif->pTakeItem,2);
+ packet(0x0938,clif->pPartyInvite2,2);
+ packet(0x0939,clif->pReqCloseBuyingStore,0);
+ packet(0x093b,clif->pActionRequest,2,6);
+ packet(0x0945,clif->pDropItem,2,4);
+ packet(0x0954,clif->pFriendsListAdd,2);
+ packet(0x0957,clif->pStoragePassword,0);
+ packet(0x095d,clif->pGetCharNameRequest,2);
+ packet(0x095e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0962,clif->pDull/*,XXX*/);
+ packet(0x0967,clif->pHomMenu,2,4);
#endif
// 2014-06-25aRagexe, 2014-06-25bRagexe
#if PACKETVER == 20140625
- packet(0x0202,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x023b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0815,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0817,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0835,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085a,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0861,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0875,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x087b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0885,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0886,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0888,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x088a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0897,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a1,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a2,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0923,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0928,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0946,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0959,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0960,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0968,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0969,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pMoveToKafra,2,4);
+ packet(0x023b,clif->pMoveFromKafra,2,4);
+ packet(0x0815,clif->pDull/*,XXX*/);
+ packet(0x0817,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0835,clif->pWalkToXY,2);
+ packet(0x085a,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0861,clif->pUseSkillToId,2,4,6);
+ packet(0x086b,clif->pPartyInvite2,2);
+ packet(0x0875,clif->pSolveCharName,2);
+ packet(0x087b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0885,clif->pDropItem,2,4);
+ packet(0x0886,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0888,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x088a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0897,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a1,clif->pTickSend,2);
+ packet(0x08a2,clif->pChangeDir,2,4);
+ packet(0x091a,clif->pTakeItem,2);
+ packet(0x0923,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0928,clif->pReqCloseBuyingStore,0);
+ packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0946,clif->pHomMenu,2,4);
+ packet(0x094e,clif->pDull/*,XXX*/);
+ packet(0x0959,clif->pActionRequest,2,6);
+ packet(0x0960,clif->pStoragePassword,0);
+ packet(0x0968,clif->pReqClickBuyingStore,2);
+ packet(0x0969,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-07-02aRagexe
#if PACKETVER == 20140702
- packet(0x022d,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x023b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0364,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0438,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x07e4,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0835,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x086c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0887,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0892,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0895,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a0,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a2,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0925,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0933,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0940,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x023b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0364,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pFriendsListAdd,2);
+ packet(0x0438,clif->pMoveToKafra,2,4);
+ packet(0x07e4,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pStoragePassword,0);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pHomMenu,2,4);
+ packet(0x0835,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pDropItem,2,4);
+ packet(0x086c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0887,clif->pWalkToXY,2);
+ packet(0x0892,clif->pMoveFromKafra,2,4);
+ packet(0x0895,clif->pDull/*,XXX*/);
+ packet(0x08a0,clif->pPartyInvite2,2);
+ packet(0x08a2,clif->pTakeItem,2);
+ packet(0x0925,clif->pChangeDir,2,4);
+ packet(0x092c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0933,clif->pDull/*,XXX*/);
+ packet(0x0940,clif->pSearchStoreInfoNextPage,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-07-09aRagexe
#if PACKETVER == 20140709
- packet(0x0364,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0437,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0860,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0866,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0869,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0875,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0877,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0879,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x087a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0887,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0888,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0894,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0897,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0898,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08ad,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0925,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x092f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0931,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0934,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0939,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x093f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x094d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x094f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0961,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x0364,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0437,clif->pActionRequest,2,6);
+ packet(0x0860,clif->pStoragePassword,0);
+ packet(0x0866,clif->pDull/*,XXX*/);
+ packet(0x0869,clif->pChangeDir,2,4);
+ packet(0x0875,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0877,clif->pUseSkillToId,2,4,6);
+ packet(0x0879,clif->pGetCharNameRequest,2);
+ packet(0x087a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0887,clif->pMoveToKafra,2,4);
+ packet(0x0888,clif->pDull/*,XXX*/);
+ packet(0x088b,clif->pPartyInvite2,2);
+ packet(0x0894,clif->pReqCloseBuyingStore,0);
+ packet(0x0897,clif->pReqClickBuyingStore,2);
+ packet(0x0898,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08ad,clif->pDropItem,2,4);
+ packet(0x091a,clif->pWalkToXY,2);
+ packet(0x0925,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x092f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0931,clif->pSolveCharName,2);
+ packet(0x0934,clif->pTickSend,2);
+ packet(0x0939,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x093f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x094d,clif->pHomMenu,2,4);
+ packet(0x094e,clif->pMoveFromKafra,2,4);
+ packet(0x094f,clif->pFriendsListAdd,2);
+ packet(0x095f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0961,clif->pTakeItem,2);
#endif
// 2014-07-16aRagexe, 2014-07-16bRagexe, 2014-07-16cRagexe
#if PACKETVER == 20140716
- packet(0x0362,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x07e4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0811,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0868,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0871,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0881,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x088d,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0896,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x089a,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08a2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08a4,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08ac,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0918,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x091f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0926,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x092c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0938,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0947,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0952,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0958,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0959,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0969,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
+ packet(0x0362,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x07e4,clif->pStoragePassword,0);
+ packet(0x0811,clif->pActionRequest,2,6);
+ packet(0x085c,clif->pGetCharNameRequest,2);
+ packet(0x085f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0868,clif->pPartyInvite2,2);
+ packet(0x0871,clif->pMoveToKafra,2,4);
+ packet(0x0881,clif->pUseSkillToId,2,4,6);
+ packet(0x088b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x088d,clif->pDull/*,XXX*/);
+ packet(0x088f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0896,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x089a,clif->pSolveCharName,2);
+ packet(0x089f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08a2,clif->pReqCloseBuyingStore,0);
+ packet(0x08a4,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08ac,clif->pHomMenu,2,4);
+ packet(0x0918,clif->pWalkToXY,2);
+ packet(0x091f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0926,clif->pDropItem,2,4);
+ packet(0x092c,clif->pFriendsListAdd,2);
+ packet(0x092f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0938,clif->pMoveFromKafra,2,4);
+ packet(0x093b,clif->pReqClickBuyingStore,2);
+ packet(0x0947,clif->pDull/*,XXX*/);
+ packet(0x0952,clif->pChangeDir,2,4);
+ packet(0x0958,clif->pTakeItem,2);
+ packet(0x0959,clif->pTickSend,2);
+ packet(0x0969,clif->pItemListWindowSelected,2,4,8);
#endif
// 2014-07-23aRagexe, 2014-07-23bRagexe
#if PACKETVER == 20140723
- packet(0x02c4,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0364,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0368,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0436,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0819,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0838,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x085f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0869,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x086d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x087d,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0888,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0891,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0896,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0898,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x089e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08a2,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08ad,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0927,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x092f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0934,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0935,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0939,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x093d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0945,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0947,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0948,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0960,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x02c4,clif->pTickSend,2);
+ packet(0x0364,clif->pStoragePassword,0);
+ packet(0x0368,clif->pGetCharNameRequest,2);
+ packet(0x0436,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0819,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0838,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x085f,clif->pWalkToXY,2);
+ packet(0x0869,clif->pMoveToKafra,2,4);
+ packet(0x086d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x087d,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0888,clif->pReqClickBuyingStore,2);
+ packet(0x0891,clif->pReqCloseBuyingStore,0);
+ packet(0x0896,clif->pDropItem,2,4);
+ packet(0x0898,clif->pDull/*,XXX*/);
+ packet(0x089e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08a2,clif->pMoveFromKafra,2,4);
+ packet(0x08ad,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0927,clif->pSolveCharName,2);
+ packet(0x092f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0934,clif->pFriendsListAdd,2);
+ packet(0x0935,clif->pPartyInvite2,2);
+ packet(0x0939,clif->pItemListWindowSelected,2,4,8);
+ packet(0x093d,clif->pTakeItem,2);
+ packet(0x0945,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0947,clif->pActionRequest,2,6);
+ packet(0x0948,clif->pHomMenu,2,4);
+ packet(0x095f,clif->pDull/*,XXX*/);
+ packet(0x0960,clif->pChangeDir,2,4);
#endif
// 2014-07-30aRagexe
#if PACKETVER == 20140730
- packet(0x022d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0364,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0366,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0367,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0437,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x07ec,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0802,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0815,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0817,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x087d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x087f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0889,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x088b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0892,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a0,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a7,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a9,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08ad,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0924,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x092a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0934,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0940,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0946,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
+ packet(0x022d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0364,clif->pGetCharNameRequest,2);
+ packet(0x0366,clif->pUseSkillToId,2,4,6);
+ packet(0x0367,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0437,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x07ec,clif->pDull/*,XXX*/);
+ packet(0x0802,clif->pDull/*,XXX*/);
+ packet(0x0815,clif->pFriendsListAdd,2);
+ packet(0x0817,clif->pActionRequest,2,6);
+ packet(0x085e,clif->pWalkToXY,2);
+ packet(0x085f,clif->pReqCloseBuyingStore,0);
+ packet(0x087d,clif->pMoveFromKafra,2,4);
+ packet(0x087e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x087f,clif->pDropItem,2,4);
+ packet(0x0889,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x088b,clif->pTickSend,2);
+ packet(0x088d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0892,clif->pMoveToKafra,2,4);
+ packet(0x08a0,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a6,clif->pReqClickBuyingStore,2);
+ packet(0x08a7,clif->pSolveCharName,2);
+ packet(0x08a9,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08ad,clif->pStoragePassword,0);
+ packet(0x091e,clif->pPartyInvite2,2);
+ packet(0x0924,clif->pSearchStoreInfoNextPage,0);
+ packet(0x092a,clif->pTakeItem,2);
+ packet(0x0934,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0940,clif->pChangeDir,2,4);
+ packet(0x0946,clif->pHomMenu,2,4);
#endif
// 2014-08-06aRagexe, 2014-08-06bRagexe
#if PACKETVER == 20140806
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0948,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0948,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-08-13aRagexe, 2014-08-13bRagexe, 2014-08-14aRagexe
#if PACKETVER == 20140813 || \
PACKETVER == 20140814
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0802,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0868,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0878,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0882,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0895,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0897,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0899,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a3,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a7,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08ab,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0967,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pStoragePassword,0);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0802,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0868,clif->pHomMenu,2,4);
+ packet(0x0878,clif->pChangeDir,2,4);
+ packet(0x087c,clif->pPartyInvite2,2);
+ packet(0x0882,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0895,clif->pMoveFromKafra,2,4);
+ packet(0x0897,clif->pFriendsListAdd,2);
+ packet(0x0899,clif->pDropItem,2,4);
+ packet(0x08a3,clif->pTakeItem,2);
+ packet(0x08a7,clif->pDull/*,XXX*/);
+ packet(0x08ab,clif->pDull/*,XXX*/);
+ packet(0x0967,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-08-20aRagexe
#if PACKETVER == 20140820
- packet(0x035f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0835,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0861,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0864,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0869,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x086c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0872,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0876,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0891,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0899,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089a,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x089b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a3,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a7,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x091d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x092f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0936,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0937,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x093a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x094a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0951,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0952,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0956,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0958,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0961,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x035f,clif->pReqCloseBuyingStore,0);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0835,clif->pChangeDir,2,4);
+ packet(0x0861,clif->pTickSend,2);
+ packet(0x0864,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0869,clif->pDull/*,XXX*/);
+ packet(0x086c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086e,clif->pPartyInvite2,2);
+ packet(0x0872,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0876,clif->pDropItem,2,4);
+ packet(0x0891,clif->pGetCharNameRequest,2);
+ packet(0x0899,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089a,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x089b,clif->pMoveFromKafra,2,4);
+ packet(0x08a3,clif->pWalkToXY,2);
+ packet(0x08a7,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x091d,clif->pSolveCharName,2);
+ packet(0x092f,clif->pUseSkillToId,2,4,6);
+ packet(0x0936,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0937,clif->pHomMenu,2,4);
+ packet(0x093a,clif->pStoragePassword,0);
+ packet(0x093e,clif->pReqClickBuyingStore,2);
+ packet(0x094a,clif->pFriendsListAdd,2);
+ packet(0x0951,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0952,clif->pActionRequest,2,6);
+ packet(0x0956,clif->pMoveToKafra,2,4);
+ packet(0x0958,clif->pDull/*,XXX*/);
+ packet(0x0961,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2014-08-27aRagexe
#if PACKETVER == 20140827
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0943,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0943,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-09-03aRagexe
#if PACKETVER == 20140903
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x089b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0931,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0941,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0943,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0945,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x088f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x089b,clif->pFriendsListAdd,2);
+ packet(0x0931,clif->pHomMenu,2,4);
+ packet(0x0941,clif->pStoragePassword,0);
+ packet(0x0943,clif->pDull/*,XXX*/);
+ packet(0x0945,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-09-17aRagexe
#if PACKETVER == 20140917
- packet(0x022d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0364,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0365,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0366,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0367,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0369,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0838,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0864,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0889,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0895,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0897,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0898,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089c,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a8,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0919,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x091e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x092a,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0930,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0949,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0951,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0955,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0956,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0957,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x095a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x095c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x095e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0966,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x022d,clif->pPartyInvite2,2);
+ packet(0x0364,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0365,clif->pMoveToKafra,2,4);
+ packet(0x0366,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0367,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0369,clif->pSolveCharName,2);
+ packet(0x0838,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0864,clif->pTakeItem,2);
+ packet(0x086d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0889,clif->pActionRequest,2,6);
+ packet(0x0895,clif->pHomMenu,2,4);
+ packet(0x0897,clif->pTickSend,2);
+ packet(0x0898,clif->pGetCharNameRequest,2);
+ packet(0x089c,clif->pReqClickBuyingStore,2);
+ packet(0x08a8,clif->pStoragePassword,0);
+ packet(0x0919,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x091e,clif->pReqCloseBuyingStore,0);
+ packet(0x092a,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0930,clif->pMoveFromKafra,2,4);
+ packet(0x0949,clif->pUseSkillToId,2,4,6);
+ packet(0x094f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0951,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0955,clif->pFriendsListAdd,2);
+ packet(0x0956,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0957,clif->pDull/*,XXX*/);
+ packet(0x095a,clif->pDropItem,2,4);
+ packet(0x095c,clif->pWalkToXY,2);
+ packet(0x095e,clif->pChangeDir,2,4);
+ packet(0x0966,clif->pDull/*,XXX*/);
#endif
// 2014-09-24cRagexe
#if PACKETVER == 20140924
- packet(0x0366,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0367,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x07e4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0802,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0815,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0862,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0864,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0865,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x086b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x086d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0886,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x088b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0894,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0898,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x089c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a5,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a7,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0918,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x091b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0925,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0926,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0928,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x092d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0934,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0949,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0952,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
+ packet(0x0366,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0367,clif->pPartyInvite2,2);
+ packet(0x07e4,clif->pStoragePassword,0);
+ packet(0x0802,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0815,clif->pWalkToXY,2);
+ packet(0x0862,clif->pDull/*,XXX*/);
+ packet(0x0864,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0865,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x086b,clif->pReqCloseBuyingStore,0);
+ packet(0x086d,clif->pTakeItem,2);
+ packet(0x086e,clif->pHomMenu,2,4);
+ packet(0x0886,clif->pGetCharNameRequest,2);
+ packet(0x088b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0894,clif->pActionRequest,2,6);
+ packet(0x0898,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x089c,clif->pMoveToKafra,2,4);
+ packet(0x08a5,clif->pSolveCharName,2);
+ packet(0x08a7,clif->pUseSkillToId,2,4,6);
+ packet(0x0918,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x091b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0925,clif->pDull/*,XXX*/);
+ packet(0x0926,clif->pTickSend,2);
+ packet(0x0928,clif->pMoveFromKafra,2,4);
+ packet(0x092b,clif->pReqClickBuyingStore,2);
+ packet(0x092d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0934,clif->pChangeDir,2,4);
+ packet(0x0949,clif->pDropItem,2,4);
+ packet(0x0952,clif->pFriendsListAdd,2);
#endif
// 2014-10-01aRagexe
#if PACKETVER == 20141001
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0365,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0884,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0885,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x089d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08ad,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0937,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0939,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093f,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0952,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pDropItem,2,4);
+ packet(0x0365,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pMoveFromKafra,2,4);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087c,clif->pMoveToKafra,2,4);
+ packet(0x0884,clif->pPartyInvite2,2);
+ packet(0x0885,clif->pGetCharNameRequest,2);
+ packet(0x089c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x089d,clif->pFriendsListAdd,2);
+ packet(0x08ad,clif->pChangeDir,2,4);
+ packet(0x091c,clif->pDull/*,XXX*/);
+ packet(0x092a,clif->pStoragePassword,0);
+ packet(0x0937,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0939,clif->pDull/*,XXX*/);
+ packet(0x093f,clif->pTakeItem,2);
+ packet(0x094b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0952,clif->pHomMenu,2,4);
#endif
// 2014-10-08aRagexe, 2014-10-08bRagexe, 2014-10-08cRagexe, 2014-10-08dRagexe
#if PACKETVER == 20141008
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0942,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0942,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-10-15bRagexe, 2014-10-15cRagexe, 2014-10-15dRagexe, 2014-10-16aRagexe
#if PACKETVER == 20141015 || \
PACKETVER == 20141016
- packet(0x022d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0922,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0936,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0967,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pMoveFromKafra,2,4);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pHomMenu,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0922,clif->pDull/*,XXX*/);
+ packet(0x0936,clif->pStoragePassword,0);
+ packet(0x094b,clif->pFriendsListAdd,2);
+ packet(0x0967,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-10-22bRagexe
#if PACKETVER == 20141022
- packet(0x023b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0878,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0896,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0899,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08aa,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08ab,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08ad,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0940,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x094e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0955,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pStoragePassword,0);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0878,clif->pMoveToKafra,2,4);
+ packet(0x087d,clif->pDropItem,2,4);
+ packet(0x0896,clif->pPartyInvite2,2);
+ packet(0x0899,clif->pHomMenu,2,4);
+ packet(0x08aa,clif->pMoveFromKafra,2,4);
+ packet(0x08ab,clif->pDull/*,XXX*/);
+ packet(0x08ad,clif->pChangeDir,2,4);
+ packet(0x091a,clif->pFriendsListAdd,2);
+ packet(0x092b,clif->pDull/*,XXX*/);
+ packet(0x093b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0940,clif->pSearchStoreInfoNextPage,0);
+ packet(0x094e,clif->pTakeItem,2);
+ packet(0x0955,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-10-29aRagexe
#if PACKETVER == 20141029
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0940,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pWalkToXY,2);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pStoragePassword,0);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0940,clif->pActionRequest,2,6);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-11-05aRagexe, 2014-11-05bRagexe
#if PACKETVER == 20141105
- packet(0x022d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x035f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0360,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x085c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0863,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0864,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0865,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0871,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0874,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0875,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0877,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0879,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0887,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0892,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0898,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a0,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a7,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08ad,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x091e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x092b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x093e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0944,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0948,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0950,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0957,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x095f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0968,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x022d,clif->pDull/*,XXX*/);
+ packet(0x035f,clif->pUseSkillToId,2,4,6);
+ packet(0x0360,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x085c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0863,clif->pGetCharNameRequest,2);
+ packet(0x0864,clif->pTickSend,2);
+ packet(0x0865,clif->pFriendsListAdd,2);
+ packet(0x0871,clif->pStoragePassword,0);
+ packet(0x0874,clif->pDull/*,XXX*/);
+ packet(0x0875,clif->pActionRequest,2,6);
+ packet(0x0877,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0879,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0887,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0892,clif->pDropItem,2,4);
+ packet(0x0898,clif->pMoveFromKafra,2,4);
+ packet(0x08a0,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a5,clif->pChangeDir,2,4);
+ packet(0x08a7,clif->pReqCloseBuyingStore,0);
+ packet(0x08ad,clif->pMoveToKafra,2,4);
+ packet(0x091d,clif->pSolveCharName,2);
+ packet(0x091e,clif->pReqClickBuyingStore,2);
+ packet(0x092b,clif->pTakeItem,2);
+ packet(0x093e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0944,clif->pHomMenu,2,4);
+ packet(0x0948,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0950,clif->pPartyInvite2,2);
+ packet(0x0957,clif->pWalkToXY,2);
+ packet(0x095f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0968,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2014-11-12cRagexe, 2014-11-12dRagexe
#if PACKETVER == 20141112
- packet(0x0362,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0438,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x07e4,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0835,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0838,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x083c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x085f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0863,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0869,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0871,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0885,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0886,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0887,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08a0,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a1,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08ab,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0919,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0926,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0929,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0943,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x094b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x094c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0955,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0960,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0962,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x0362,clif->pFriendsListAdd,2);
+ packet(0x0438,clif->pSolveCharName,2);
+ packet(0x07e4,clif->pReqCloseBuyingStore,0);
+ packet(0x0835,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0838,clif->pSearchStoreInfoNextPage,0);
+ packet(0x083c,clif->pMoveToKafra,2,4);
+ packet(0x085f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0863,clif->pUseSkillToId,2,4,6);
+ packet(0x0869,clif->pGetCharNameRequest,2);
+ packet(0x086c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0871,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0885,clif->pChangeDir,2,4);
+ packet(0x0886,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0887,clif->pPartyInvite2,2);
+ packet(0x088d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08a0,clif->pWalkToXY,2);
+ packet(0x08a1,clif->pReqClickBuyingStore,2);
+ packet(0x08ab,clif->pStoragePassword,0);
+ packet(0x0919,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0926,clif->pHomMenu,2,4);
+ packet(0x0929,clif->pActionRequest,2,6);
+ packet(0x0943,clif->pDropItem,2,4);
+ packet(0x094b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x094c,clif->pDull/*,XXX*/);
+ packet(0x094f,clif->pDull/*,XXX*/);
+ packet(0x0955,clif->pMoveFromKafra,2,4);
+ packet(0x095d,clif->pTickSend,2);
+ packet(0x0960,clif->pTakeItem,2);
+ packet(0x0962,clif->pUseSkillToPos,2,4,6,8);
#endif
// 2014-11-19dRagexe
#if PACKETVER == 20141119
- packet(0x0202,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x085a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0861,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0865,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0866,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0872,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0873,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0875,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x087c,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0885,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0887,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0888,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x088d,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0895,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a8,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0918,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0920,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0921,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0929,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0933,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0938,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0940,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0941,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0942,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0948,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x094c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0963,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
+ packet(0x0202,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x085a,clif->pReqClickBuyingStore,2);
+ packet(0x0861,clif->pFriendsListAdd,2);
+ packet(0x0865,clif->pPartyInvite2,2);
+ packet(0x0866,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0872,clif->pActionRequest,2,6);
+ packet(0x0873,clif->pUseSkillToId,2,4,6);
+ packet(0x0875,clif->pGetCharNameRequest,2);
+ packet(0x087c,clif->pSolveCharName,2);
+ packet(0x0885,clif->pDull/*,XXX*/);
+ packet(0x0887,clif->pReqCloseBuyingStore,0);
+ packet(0x0888,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x088d,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0895,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a8,clif->pTakeItem,2);
+ packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0918,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0920,clif->pChangeDir,2,4);
+ packet(0x0921,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0929,clif->pMoveFromKafra,2,4);
+ packet(0x092f,clif->pDull/*,XXX*/);
+ packet(0x0933,clif->pStoragePassword,0);
+ packet(0x0938,clif->pTickSend,2);
+ packet(0x0940,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0941,clif->pMoveToKafra,2,4);
+ packet(0x0942,clif->pHomMenu,2,4);
+ packet(0x0948,clif->pWalkToXY,2);
+ packet(0x094c,clif->pDropItem,2,4);
+ packet(0x0963,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
#endif
// 2014-11-26aRagexe, 2014-11-26bRagexe, 2014-11-26cRagexe, 2014-11-26dRagexe
#if PACKETVER == 20141126
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0367,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0871,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0884,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0896,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a4,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ad,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0920,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0942,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0965,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0367,clif->pDull/*,XXX*/);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0871,clif->pMoveFromKafra,2,4);
+ packet(0x0884,clif->pDull/*,XXX*/);
+ packet(0x0896,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a4,clif->pChangeDir,2,4);
+ packet(0x08ad,clif->pStoragePassword,0);
+ packet(0x0920,clif->pDropItem,2,4);
+ packet(0x0942,clif->pFriendsListAdd,2);
+ packet(0x095a,clif->pTakeItem,2);
+ packet(0x095b,clif->pHomMenu,2,4);
+ packet(0x095f,clif->pMoveToKafra,2,4);
+ packet(0x0965,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-12-03aRagexe
#if PACKETVER == 20141203
- packet(0x0202,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0281,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0362,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0367,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0368,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0802,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0861,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x086e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0880,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0889,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0898,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08a5,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08aa,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0917,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x091c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0928,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x092a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0936,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0957,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x095c,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0962,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
+ packet(0x0202,clif->pSolveCharName,2);
+ packet(0x0281,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0362,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0367,clif->pGetCharNameRequest,2);
+ packet(0x0368,clif->pDull/*,XXX*/);
+ packet(0x0802,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0861,clif->pMoveToKafra,2,4);
+ packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086d,clif->pMoveFromKafra,2,4);
+ packet(0x086e,clif->pTakeItem,2);
+ packet(0x087b,clif->pWalkToXY,2);
+ packet(0x087e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0880,clif->pChangeDir,2,4);
+ packet(0x0889,clif->pFriendsListAdd,2);
+ packet(0x0898,clif->pStoragePassword,0);
+ packet(0x089c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08a5,clif->pActionRequest,2,6);
+ packet(0x08aa,clif->pDropItem,2,4);
+ packet(0x0917,clif->pSearchStoreInfoNextPage,0);
+ packet(0x091c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091d,clif->pPartyInvite2,2);
+ packet(0x0928,clif->pTickSend,2);
+ packet(0x092a,clif->pDull/*,XXX*/);
+ packet(0x0936,clif->pHomMenu,2,4);
+ packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0957,clif->pReqCloseBuyingStore,0);
+ packet(0x095c,clif->pReqClickBuyingStore,2);
+ packet(0x0962,clif->pUseSkillToId,2,4,6);
#endif
// 2014-12-10bRagexe, 2014-12-10cRagexe
#if PACKETVER == 20141210
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0885,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08ac,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0917,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0927,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x092b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0947,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0954,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0955,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0958,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0961,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0963,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0967,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pHomMenu,2,4);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pChangeDir,2,4);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087b,clif->pTakeItem,2);
+ packet(0x0885,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08ac,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0917,clif->pPartyInvite2,2);
+ packet(0x0927,clif->pDull/*,XXX*/);
+ packet(0x092b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0947,clif->pDull/*,XXX*/);
+ packet(0x0954,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0955,clif->pMoveFromKafra,2,4);
+ packet(0x0958,clif->pDropItem,2,4);
+ packet(0x0961,clif->pFriendsListAdd,2);
+ packet(0x0963,clif->pStoragePassword,0);
+ packet(0x0967,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-12-17aRagexe
#if PACKETVER == 20141217
- packet(0x0360,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x085b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0860,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x086c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0875,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0878,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0879,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0883,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0889,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x088e,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x089f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a1,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a2,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a8,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08ab,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08ac,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0919,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0924,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0930,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0932,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0933,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0936,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0939,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0940,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0944,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0945,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0948,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0960,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x0360,clif->pMoveToKafra,2,4);
+ packet(0x085b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0860,clif->pStoragePassword,0);
+ packet(0x086c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0875,clif->pMoveFromKafra,2,4);
+ packet(0x0878,clif->pWalkToXY,2);
+ packet(0x0879,clif->pHomMenu,2,4);
+ packet(0x0883,clif->pTakeItem,2);
+ packet(0x0889,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x088e,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x089f,clif->pDropItem,2,4);
+ packet(0x08a1,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a2,clif->pDull/*,XXX*/);
+ packet(0x08a8,clif->pPartyInvite2,2);
+ packet(0x08ab,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08ac,clif->pTickSend,2);
+ packet(0x0919,clif->pChangeDir,2,4);
+ packet(0x091f,clif->pUseSkillToId,2,4,6);
+ packet(0x0924,clif->pActionRequest,2,6);
+ packet(0x0930,clif->pReqCloseBuyingStore,0);
+ packet(0x0932,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0933,clif->pFriendsListAdd,2);
+ packet(0x0936,clif->pGetCharNameRequest,2);
+ packet(0x0939,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0940,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0944,clif->pReqClickBuyingStore,2);
+ packet(0x0945,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0948,clif->pSolveCharName,2);
+ packet(0x0960,clif->pDull/*,XXX*/);
#endif
// 2014-12-24aRagexe
#if PACKETVER == 20141224
- packet(0x0361,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0438,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0835,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x085a,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x085e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0865,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0867,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086c,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0870,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x089b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a3,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a8,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08ac,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0930,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0932,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0945,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0946,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0949,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x094f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0950,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0953,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0956,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x095b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x095f,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
+ packet(0x0361,clif->pMoveToKafra,2,4);
+ packet(0x0438,clif->pFriendsListAdd,2);
+ packet(0x0835,clif->pItemListWindowSelected,2,4,8);
+ packet(0x085a,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x085e,clif->pReqCloseBuyingStore,0);
+ packet(0x0865,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0867,clif->pHomMenu,2,4);
+ packet(0x086c,clif->pReqClickBuyingStore,2);
+ packet(0x0870,clif->pChangeDir,2,4);
+ packet(0x087a,clif->pTakeItem,2);
+ packet(0x087b,clif->pDull/*,XXX*/);
+ packet(0x089a,clif->pWalkToXY,2);
+ packet(0x089b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a3,clif->pPartyInvite2,2);
+ packet(0x08a4,clif->pStoragePassword,0);
+ packet(0x08a8,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08ac,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0930,clif->pDropItem,2,4);
+ packet(0x0932,clif->pDull/*,XXX*/);
+ packet(0x093a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0945,clif->pTickSend,2);
+ packet(0x0946,clif->pGetCharNameRequest,2);
+ packet(0x0949,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x094f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0950,clif->pSolveCharName,2);
+ packet(0x0953,clif->pMoveFromKafra,2,4);
+ packet(0x0956,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x095b,clif->pUseSkillToId,2,4,6);
+ packet(0x095f,clif->pActionRequest,2,6);
#endif
// 2014-12-31aRagexe
#if PACKETVER == 20141231
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086d,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-01-07aRagexe
#if PACKETVER == 20150107
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0895,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0943,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0947,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087c,clif->pFriendsListAdd,2);
+ packet(0x0895,clif->pStoragePassword,0);
+ packet(0x092d,clif->pHomMenu,2,4);
+ packet(0x0943,clif->pChangeDir,2,4);
+ packet(0x0947,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-01-14aRagexe, 2015-01-14bRagexe, 2015-01-14cRagexe, 2015-01-14dRagexe
#if PACKETVER == 20150114
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0868,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0899,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0946,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0955,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0957,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pUseSkillToId,2,4,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0868,clif->pFriendsListAdd,2);
+ packet(0x0899,clif->pHomMenu,2,4);
+ packet(0x0946,clif->pStoragePassword,0);
+ packet(0x0955,clif->pDull/*,XXX*/);
+ packet(0x0957,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-01-21aRagexe
#if PACKETVER == 20150121
- packet(0x0281,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x089e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ab,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0918,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0919,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0955,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0959,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0963,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0967,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087c,clif->pDull/*,XXX*/);
+ packet(0x088b,clif->pFriendsListAdd,2);
+ packet(0x089d,clif->pHomMenu,2,4);
+ packet(0x089e,clif->pChangeDir,2,4);
+ packet(0x08ab,clif->pStoragePassword,0);
+ packet(0x0918,clif->pDull/*,XXX*/);
+ packet(0x0919,clif->pDropItem,2,4);
+ packet(0x091d,clif->pTakeItem,2);
+ packet(0x0955,clif->pMoveToKafra,2,4);
+ packet(0x0959,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0963,clif->pMoveFromKafra,2,4);
+ packet(0x0967,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-01-28aRagexe, 2015-01-29aRagexe, 2015-01-30aRagexe
#if PACKETVER == 20150128 || \
PACKETVER == 20150129 || \
PACKETVER == 20150130
- packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x023b,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x035f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0368,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0838,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085a,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0864,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0870,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0874,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0875,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0876,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x087d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0888,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08ab,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0927,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0929,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092d,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0938,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x093a,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0944,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x094d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0963,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0968,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
+ packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x023b,clif->pChangeDir,2,4);
+ packet(0x035f,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0368,clif->pDull/*,XXX*/);
+ packet(0x0838,clif->pActionRequest,2,6);
+ packet(0x085a,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0864,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086d,clif->pMoveToKafra,2,4);
+ packet(0x0870,clif->pWalkToXY,2);
+ packet(0x0874,clif->pGetCharNameRequest,2);
+ packet(0x0875,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0876,clif->pHomMenu,2,4);
+ packet(0x087d,clif->pSolveCharName,2);
+ packet(0x0888,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08ab,clif->pTakeItem,2);
+ packet(0x091f,clif->pTickSend,2);
+ packet(0x0927,clif->pPartyInvite2,2);
+ packet(0x0929,clif->pStoragePassword,0);
+ packet(0x092d,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0938,clif->pDull/*,XXX*/);
+ packet(0x093a,clif->pUseSkillToId,2,4,6);
+ packet(0x0944,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x094d,clif->pReqCloseBuyingStore,0);
+ packet(0x094e,clif->pMoveFromKafra,2,4);
+ packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0963,clif->pFriendsListAdd,2);
+ packet(0x0968,clif->pDropItem,2,4);
#endif
// 2015-02-04aRagexe
#if PACKETVER == 20150204
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0966,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0966,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-02-11aRagexe
#if PACKETVER == 20150211
- packet(0x023b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0368,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0369,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0436,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0437,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x07e4,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0817,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0819,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0835,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0862,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0863,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0870,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0873,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x087f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0882,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0883,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0885,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0886,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x089c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a0,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a4,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08aa,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0919,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0920,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0951,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0957,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0958,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x023b,clif->pDull/*,XXX*/);
+ packet(0x0368,clif->pHomMenu,2,4);
+ packet(0x0369,clif->pChangeDir,2,4);
+ packet(0x0436,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0437,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x07e4,clif->pDropItem,2,4);
+ packet(0x0817,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0819,clif->pReqCloseBuyingStore,0);
+ packet(0x0835,clif->pDull/*,XXX*/);
+ packet(0x0862,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0863,clif->pUseSkillToId,2,4,6);
+ packet(0x0870,clif->pTakeItem,2);
+ packet(0x0873,clif->pWalkToXY,2);
+ packet(0x087b,clif->pGetCharNameRequest,2);
+ packet(0x087f,clif->pStoragePassword,0);
+ packet(0x0882,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0883,clif->pMoveFromKafra,2,4);
+ packet(0x0885,clif->pTickSend,2);
+ packet(0x0886,clif->pReqClickBuyingStore,2);
+ packet(0x089c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a0,clif->pFriendsListAdd,2);
+ packet(0x08a4,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08aa,clif->pActionRequest,2,6);
+ packet(0x0919,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0920,clif->pSolveCharName,2);
+ packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0951,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0957,clif->pPartyInvite2,2);
+ packet(0x0958,clif->pMoveToKafra,2,4);
#endif
// 2015-02-17aRagexe
#if PACKETVER == 20150217
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085b,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-02-25eRagexe, 2015-02-25fRagexe, 2015-02-25gRagexe, 2015-02-25iRagexe, 2015-02-25jRagexe, 2015-02-26aRagexe
#if PACKETVER == 20150225 || \
PACKETVER == 20150226
- packet(0x02c4,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0362,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0819,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0867,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0885,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0896,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x089c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0940,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0946,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0948,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x094f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0952,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0955,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x02c4,clif->pReqClickBuyingStore,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pPartyInvite2,2);
+ packet(0x0362,clif->pReqCloseBuyingStore,0);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pGetCharNameRequest,2);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pTakeItem,2);
+ packet(0x0819,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0867,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0885,clif->pDull/*,XXX*/);
+ packet(0x0896,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089b,clif->pDull/*,XXX*/);
+ packet(0x089c,clif->pMoveToKafra,2,4);
+ packet(0x08a4,clif->pStoragePassword,0);
+ packet(0x0940,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0946,clif->pFriendsListAdd,2);
+ packet(0x0948,clif->pDropItem,2,4);
+ packet(0x094f,clif->pHomMenu,2,4);
+ packet(0x0952,clif->pMoveFromKafra,2,4);
+ packet(0x0955,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pWantToConnection,2,6,10,14,18);
#endif
// 2015-03-04aRagexe
#if PACKETVER == 20150304
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0862,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x086d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0879,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0892,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x093a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0947,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x095d,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0960,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0961,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pTakeItem,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pDull/*,XXX*/);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0862,clif->pMoveFromKafra,2,4);
+ packet(0x086d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0879,clif->pChangeDir,2,4);
+ packet(0x087e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0892,clif->pStoragePassword,0);
+ packet(0x089a,clif->pPartyInvite2,2);
+ packet(0x093a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0947,clif->pMoveToKafra,2,4);
+ packet(0x095d,clif->pDull/*,XXX*/);
+ packet(0x0960,clif->pFriendsListAdd,2);
+ packet(0x0961,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-03-11aRagexe, 2015-03-11bRagexe
#if PACKETVER == 20150311
- packet(0x023b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0360,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0438,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0838,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x087b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0883,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0886,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0888,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0896,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a1,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a3,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a5,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08a6,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0928,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x092e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0943,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0946,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0957,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0958,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x095b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0963,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0964,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x023b,clif->pHomMenu,2,4);
+ packet(0x0360,clif->pReqCloseBuyingStore,0);
+ packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0438,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0838,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086a,clif->pGetCharNameRequest,2);
+ packet(0x086c,clif->pStoragePassword,0);
+ packet(0x087b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0883,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0886,clif->pWalkToXY,2);
+ packet(0x0888,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0896,clif->pActionRequest,2,6);
+ packet(0x08a1,clif->pUseSkillToId,2,4,6);
+ packet(0x08a3,clif->pTakeItem,2);
+ packet(0x08a5,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08a6,clif->pFriendsListAdd,2);
+ packet(0x091c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0928,clif->pChangeDir,2,4);
+ packet(0x092a,clif->pDull/*,XXX*/);
+ packet(0x092e,clif->pMoveFromKafra,2,4);
+ packet(0x093b,clif->pPartyInvite2,2);
+ packet(0x0943,clif->pSolveCharName,2);
+ packet(0x0946,clif->pDull/*,XXX*/);
+ packet(0x0957,clif->pReqClickBuyingStore,2);
+ packet(0x0958,clif->pTickSend,2);
+ packet(0x095b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0963,clif->pDropItem,2,4);
+ packet(0x0964,clif->pMoveToKafra,2,4);
#endif
// 2015-03-18aRagexe, 2015-03-18bRagexe
#if PACKETVER == 20150318
- packet(0x0202,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x023b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0281,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x07e4,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0802,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0811,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0862,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0863,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0873,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0885,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0889,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x088c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x089c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a4,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x091d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0920,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0927,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0928,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0936,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0937,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0938,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x093a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x093c,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x094c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0951,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0958,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0959,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0960,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x0202,clif->pDull/*,XXX*/);
+ packet(0x023b,clif->pTickSend,2);
+ packet(0x0281,clif->pDull/*,XXX*/);
+ packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x07e4,clif->pFriendsListAdd,2);
+ packet(0x0802,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0811,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0862,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0863,clif->pReqClickBuyingStore,2);
+ packet(0x0873,clif->pStoragePassword,0);
+ packet(0x0885,clif->pReqCloseBuyingStore,0);
+ packet(0x0889,clif->pActionRequest,2,6);
+ packet(0x088c,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x089c,clif->pMoveToKafra,2,4);
+ packet(0x08a4,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x091d,clif->pMoveFromKafra,2,4);
+ packet(0x0920,clif->pDropItem,2,4);
+ packet(0x0927,clif->pChangeDir,2,4);
+ packet(0x0928,clif->pTakeItem,2);
+ packet(0x0936,clif->pUseSkillToId,2,4,6);
+ packet(0x0937,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0938,clif->pPartyInvite2,2);
+ packet(0x093a,clif->pWalkToXY,2);
+ packet(0x093c,clif->pSolveCharName,2);
+ packet(0x094c,clif->pHomMenu,2,4);
+ packet(0x0951,clif->pGetCharNameRequest,2);
+ packet(0x0958,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0959,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0960,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2015-03-25aRagexe
#if PACKETVER == 20150325
- packet(0x0202,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0363,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0365,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0438,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0802,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0819,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x086f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0883,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0885,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0891,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0893,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0897,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0899,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a1,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a7,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0919,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0931,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0932,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0938,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0947,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0950,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0954,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0969,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
+ packet(0x0202,clif->pPartyInvite2,2);
+ packet(0x0363,clif->pDropItem,2,4);
+ packet(0x0365,clif->pUseSkillToId,2,4,6);
+ packet(0x0438,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0802,clif->pDull/*,XXX*/);
+ packet(0x0819,clif->pReqClickBuyingStore,2);
+ packet(0x085d,clif->pSolveCharName,2);
+ packet(0x086f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087c,clif->pMoveToKafra,2,4);
+ packet(0x087e,clif->pChangeDir,2,4);
+ packet(0x0883,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0885,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0891,clif->pGetCharNameRequest,2);
+ packet(0x0893,clif->pDull/*,XXX*/);
+ packet(0x0897,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0899,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a1,clif->pActionRequest,2,6);
+ packet(0x08a7,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0919,clif->pStoragePassword,0);
+ packet(0x092c,clif->pTakeItem,2);
+ packet(0x0931,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0932,clif->pWalkToXY,2);
+ packet(0x0938,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pFriendsListAdd,2);
+ packet(0x0947,clif->pReqCloseBuyingStore,0);
+ packet(0x094a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0950,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0954,clif->pTickSend,2);
+ packet(0x0969,clif->pMoveFromKafra,2,4);
#endif
// 2015-04-01aRagexe
#if PACKETVER == 20150401
- packet(0x0362,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0367,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0437,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x083c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x085e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x086f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0875,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x087e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x088f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0895,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0898,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x089c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a5,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x091c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0922,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0924,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0938,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0939,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x093a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x093b,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x093e,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0946,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0949,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0953,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0964,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x0362,clif->pActionRequest,2,6);
+ packet(0x0367,clif->pGetCharNameRequest,2);
+ packet(0x0437,clif->pReqClickBuyingStore,2);
+ packet(0x083c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x085e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x086f,clif->pWalkToXY,2);
+ packet(0x0875,clif->pItemListWindowSelected,2,4,8);
+ packet(0x087e,clif->pDull/*,XXX*/);
+ packet(0x088c,clif->pDropItem,2,4);
+ packet(0x088f,clif->pTickSend,2);
+ packet(0x0895,clif->pMoveFromKafra,2,4);
+ packet(0x0898,clif->pHomMenu,2,4);
+ packet(0x089c,clif->pStoragePassword,0);
+ packet(0x08a5,clif->pMoveToKafra,2,4);
+ packet(0x091b,clif->pPartyInvite2,2);
+ packet(0x091c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0922,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0924,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0938,clif->pReqCloseBuyingStore,0);
+ packet(0x0939,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x093a,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x093b,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x093e,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0946,clif->pDull/*,XXX*/);
+ packet(0x0949,clif->pTakeItem,2);
+ packet(0x094b,clif->pUseSkillToId,2,4,6);
+ packet(0x0953,clif->pFriendsListAdd,2);
+ packet(0x095f,clif->pSolveCharName,2);
+ packet(0x0964,clif->pChangeDir,2,4);
#endif
// 2015-04-08aRagexe
#if PACKETVER == 20150408
- packet(0x0819,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x085a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0865,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0868,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x086b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x086e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0878,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x087e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x087f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0888,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0889,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0891,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0898,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a2,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a4,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x091e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0922,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0946,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0955,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0957,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0959,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0963,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
+ packet(0x0819,clif->pMoveFromKafra,2,4);
+ packet(0x085a,clif->pTickSend,2);
+ packet(0x085c,clif->pUseSkillToId,2,4,6);
+ packet(0x085e,clif->pHomMenu,2,4);
+ packet(0x0865,clif->pActionRequest,2,6);
+ packet(0x0868,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x086b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x086e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0878,clif->pPartyInvite2,2);
+ packet(0x087e,clif->pGetCharNameRequest,2);
+ packet(0x087f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0888,clif->pMoveToKafra,2,4);
+ packet(0x0889,clif->pStoragePassword,0);
+ packet(0x0891,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0898,clif->pDropItem,2,4);
+ packet(0x089c,clif->pWalkToXY,2);
+ packet(0x08a2,clif->pSolveCharName,2);
+ packet(0x08a4,clif->pFriendsListAdd,2);
+ packet(0x091b,clif->pDull/*,XXX*/);
+ packet(0x091e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0922,clif->pChangeDir,2,4);
+ packet(0x092a,clif->pDull/*,XXX*/);
+ packet(0x0946,clif->pReqCloseBuyingStore,0);
+ packet(0x094f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0955,clif->pReqClickBuyingStore,2);
+ packet(0x0957,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0959,clif->pTakeItem,2);
+ packet(0x095e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0963,clif->pSearchStoreInfoNextPage,0);
#endif
// 2015-04-15aRagexe
#if PACKETVER == 20150415
- packet(0x0361,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0364,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0366,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0368,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0802,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0817,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0835,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x085e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0863,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0867,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0868,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0869,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0880,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0891,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0898,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a0,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0922,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x093c,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0941,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0946,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0953,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x095c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0960,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0961,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x0361,clif->pMoveToKafra,2,4);
+ packet(0x0364,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0366,clif->pWalkToXY,2);
+ packet(0x0368,clif->pReqClickBuyingStore,2);
+ packet(0x0802,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0817,clif->pTakeItem,2);
+ packet(0x0835,clif->pDropItem,2,4);
+ packet(0x085e,clif->pDull/*,XXX*/);
+ packet(0x0863,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0867,clif->pPartyInvite2,2);
+ packet(0x0868,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0869,clif->pHomMenu,2,4);
+ packet(0x086c,clif->pActionRequest,2,6);
+ packet(0x0880,clif->pDull/*,XXX*/);
+ packet(0x088e,clif->pUseSkillToId,2,4,6);
+ packet(0x0891,clif->pGetCharNameRequest,2);
+ packet(0x0898,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a0,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0922,clif->pMoveFromKafra,2,4);
+ packet(0x092e,clif->pSolveCharName,2);
+ packet(0x093c,clif->pTickSend,2);
+ packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0941,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0946,clif->pReqCloseBuyingStore,0);
+ packet(0x094d,clif->pChangeDir,2,4);
+ packet(0x0953,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x095c,clif->pFriendsListAdd,2);
+ packet(0x0960,clif->pStoragePassword,0);
+ packet(0x0961,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2015-04-22aRagexe
#if PACKETVER == 20150422
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0955,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0955,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-04-29aRagexe
#if PACKETVER == 20150429
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0363,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0867,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x086a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0886,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0894,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0899,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x089f,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a6,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a8,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08ad,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0929,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0943,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0363,clif->pChangeDir,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0867,clif->pStoragePassword,0);
+ packet(0x086a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0886,clif->pPartyInvite2,2);
+ packet(0x088f,clif->pHomMenu,2,4);
+ packet(0x0894,clif->pDropItem,2,4);
+ packet(0x0899,clif->pMoveToKafra,2,4);
+ packet(0x089f,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a6,clif->pDull/*,XXX*/);
+ packet(0x08a8,clif->pDull/*,XXX*/);
+ packet(0x08ad,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0929,clif->pMoveFromKafra,2,4);
+ packet(0x093d,clif->pFriendsListAdd,2);
+ packet(0x0943,clif->pTakeItem,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-05-07bRagexe, 2015-05-07cRagexe
#if PACKETVER == 20150507
- packet(0x023b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0864,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0887,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0889,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0924,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x093b,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0941,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0942,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0953,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0955,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0958,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pHomMenu,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pReqCloseBuyingStore,0);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pTakeItem,2);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pMoveToKafra,2,4);
+ packet(0x0864,clif->pPartyInvite2,2);
+ packet(0x0887,clif->pDull/*,XXX*/);
+ packet(0x0889,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0924,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x093b,clif->pChangeDir,2,4);
+ packet(0x0941,clif->pMoveFromKafra,2,4);
+ packet(0x0942,clif->pDull/*,XXX*/);
+ packet(0x0953,clif->pStoragePassword,0);
+ packet(0x0955,clif->pDropItem,2,4);
+ packet(0x0958,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-05-13aRagexe
#if PACKETVER == 20150513
- packet(0x022d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x02c4,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0363,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0864,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0879,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0883,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0885,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a8,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0923,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0924,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0927,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0958,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0960,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pReqCloseBuyingStore,0);
+ packet(0x02c4,clif->pDull/*,XXX*/);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0363,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pHomMenu,2,4);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0864,clif->pMoveFromKafra,2,4);
+ packet(0x0879,clif->pMoveToKafra,2,4);
+ packet(0x0883,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0885,clif->pDropItem,2,4);
+ packet(0x08a8,clif->pFriendsListAdd,2);
+ packet(0x0923,clif->pStoragePassword,0);
+ packet(0x0924,clif->pChangeDir,2,4);
+ packet(0x0927,clif->pDull/*,XXX*/);
+ packet(0x094a,clif->pPartyInvite2,2);
+ packet(0x0958,clif->pTakeItem,2);
+ packet(0x0960,clif->pItemListWindowSelected,2,4,8);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-05-20aRagexe
#if PACKETVER == 20150520
- packet(0x0202,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0361,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0835,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x085e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0865,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0868,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0880,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0882,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x089c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a2,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08ad,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091d,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0924,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0931,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0936,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x093d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0940,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0945,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x094e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x095b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0960,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0961,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x0202,clif->pTickSend,2);
+ packet(0x0361,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0835,clif->pReqCloseBuyingStore,0);
+ packet(0x085e,clif->pReqClickBuyingStore,2);
+ packet(0x0865,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0868,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0880,clif->pPartyInvite2,2);
+ packet(0x0882,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x089c,clif->pStoragePassword,0);
+ packet(0x089e,clif->pDropItem,2,4);
+ packet(0x08a2,clif->pGetCharNameRequest,2);
+ packet(0x08ad,clif->pChangeDir,2,4);
+ packet(0x091c,clif->pTakeItem,2);
+ packet(0x091d,clif->pActionRequest,2,6);
+ packet(0x0924,clif->pMoveFromKafra,2,4);
+ packet(0x092b,clif->pWalkToXY,2);
+ packet(0x0931,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0936,clif->pUseSkillToId,2,4,6);
+ packet(0x093d,clif->pFriendsListAdd,2);
+ packet(0x0940,clif->pDull/*,XXX*/);
+ packet(0x0945,clif->pSolveCharName,2);
+ packet(0x094e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x095b,clif->pHomMenu,2,4);
+ packet(0x095f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0960,clif->pDull/*,XXX*/);
+ packet(0x0961,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2015-05-27aRagexe
#if PACKETVER == 20150527
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x083c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0940,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pUseSkillToId,2,4,6);
+ packet(0x083c,clif->pStoragePassword,0);
+ packet(0x0940,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-06-03aRagexe
#if PACKETVER == 20150603
- packet(0x0361,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0437,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0811,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0819,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0860,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0864,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0867,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x086a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0873,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0877,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0881,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0884,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0897,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x089a,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x089d,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x089e,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a1,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08ad,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x091b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0922,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x093b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x093f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0955,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0956,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0960,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0969,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x096a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
+ packet(0x0361,clif->pPartyInvite2,2);
+ packet(0x0437,clif->pDull/*,XXX*/);
+ packet(0x0811,clif->pChangeDir,2,4);
+ packet(0x0819,clif->pReqClickBuyingStore,2);
+ packet(0x0860,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0864,clif->pFriendsListAdd,2);
+ packet(0x0867,clif->pMoveToKafra,2,4);
+ packet(0x086a,clif->pMoveFromKafra,2,4);
+ packet(0x0873,clif->pActionRequest,2,6);
+ packet(0x0877,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0881,clif->pGetCharNameRequest,2);
+ packet(0x0884,clif->pDull/*,XXX*/);
+ packet(0x088b,clif->pDropItem,2,4);
+ packet(0x0897,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x089a,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x089d,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x089e,clif->pTickSend,2);
+ packet(0x08a1,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08ad,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x091b,clif->pSolveCharName,2);
+ packet(0x0922,clif->pStoragePassword,0);
+ packet(0x092d,clif->pTakeItem,2);
+ packet(0x093b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x093f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0955,clif->pHomMenu,2,4);
+ packet(0x0956,clif->pReqCloseBuyingStore,0);
+ packet(0x0960,clif->pUseSkillToId,2,4,6);
+ packet(0x0969,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x096a,clif->pWalkToXY,2);
#endif
// 2015-06-10aRagexe
#if PACKETVER == 20150610
- packet(0x022d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0438,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x07e4,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0835,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0870,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0872,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0877,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x087e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0884,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0885,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0888,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x088d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x088f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0897,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a0,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08ac,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0925,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x092c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x092e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0932,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x093e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0940,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0946,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0949,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0957,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x095d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0964,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x022d,clif->pReqCloseBuyingStore,0);
+ packet(0x0438,clif->pItemListWindowSelected,2,4,8);
+ packet(0x07e4,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0835,clif->pDull/*,XXX*/);
+ packet(0x0870,clif->pPartyInvite2,2);
+ packet(0x0872,clif->pSolveCharName,2);
+ packet(0x0877,clif->pReqClickBuyingStore,2);
+ packet(0x087e,clif->pGetCharNameRequest,2);
+ packet(0x0884,clif->pMoveFromKafra,2,4);
+ packet(0x0885,clif->pHomMenu,2,4);
+ packet(0x0888,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088c,clif->pMoveToKafra,2,4);
+ packet(0x088d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x088f,clif->pWalkToXY,2);
+ packet(0x0897,clif->pFriendsListAdd,2);
+ packet(0x08a0,clif->pStoragePassword,0);
+ packet(0x08ac,clif->pDropItem,2,4);
+ packet(0x0925,clif->pTakeItem,2);
+ packet(0x092b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x092c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x092e,clif->pDull/*,XXX*/);
+ packet(0x0932,clif->pSearchStoreInfoNextPage,0);
+ packet(0x093e,clif->pActionRequest,2,6);
+ packet(0x0940,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0946,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0949,clif->pUseSkillToId,2,4,6);
+ packet(0x0957,clif->pTickSend,2);
+ packet(0x095d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0964,clif->pChangeDir,2,4);
#endif
// 2015-06-17aRagexe, 2015-06-18aRagexe
#if PACKETVER == 20150617 || \
PACKETVER == 20150618
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0362,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0363,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0365,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07ec,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0811,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0869,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x086a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x086b,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0870,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x087a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0886,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0894,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0940,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x094e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pTakeItem,2);
+ packet(0x0362,clif->pReqClickBuyingStore,2);
+ packet(0x0363,clif->pStoragePassword,0);
+ packet(0x0365,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07ec,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0811,clif->pDull/*,XXX*/);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0869,clif->pMoveFromKafra,2,4);
+ packet(0x086a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x086b,clif->pChangeDir,2,4);
+ packet(0x0870,clif->pPartyInvite2,2);
+ packet(0x087a,clif->pMoveToKafra,2,4);
+ packet(0x0886,clif->pHomMenu,2,4);
+ packet(0x0894,clif->pDull/*,XXX*/);
+ packet(0x0940,clif->pDropItem,2,4);
+ packet(0x094e,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-06-24aRagexe
#if PACKETVER == 20150624
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0365,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0870,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0940,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0941,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0966,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0365,clif->pHomMenu,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0870,clif->pStoragePassword,0);
+ packet(0x0940,clif->pMoveFromKafra,2,4);
+ packet(0x0941,clif->pFriendsListAdd,2);
+ packet(0x0966,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-07-01bRagexe, 2015-07-02aRagexe
#if PACKETVER == 20150701 || \
PACKETVER == 20150702
- packet(0x023b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0281,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x07e4,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0802,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x087d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x087e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0883,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0893,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a0,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a4,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a5,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a6,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08ad,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0919,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0923,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0928,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x093e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x093f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0946,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0954,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0956,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0958,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x095f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0960,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0968,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x023b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0281,clif->pSearchStoreInfoNextPage,0);
+ packet(0x07e4,clif->pMoveFromKafra,2,4);
+ packet(0x0802,clif->pGetCharNameRequest,2);
+ packet(0x086d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x087d,clif->pTickSend,2);
+ packet(0x087e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0883,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088e,clif->pReqCloseBuyingStore,0);
+ packet(0x0893,clif->pDull/*,XXX*/);
+ packet(0x08a0,clif->pDropItem,2,4);
+ packet(0x08a4,clif->pReqClickBuyingStore,2);
+ packet(0x08a5,clif->pPartyInvite2,2);
+ packet(0x08a6,clif->pUseSkillToId,2,4,6);
+ packet(0x08ad,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0919,clif->pStoragePassword,0);
+ packet(0x0923,clif->pDull/*,XXX*/);
+ packet(0x0928,clif->pMoveToKafra,2,4);
+ packet(0x092c,clif->pWalkToXY,2);
+ packet(0x093e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x093f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0946,clif->pTakeItem,2);
+ packet(0x094e,clif->pSolveCharName,2);
+ packet(0x0954,clif->pHomMenu,2,4);
+ packet(0x0956,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0958,clif->pActionRequest,2,6);
+ packet(0x095f,clif->pFriendsListAdd,2);
+ packet(0x0960,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0968,clif->pChangeDir,2,4);
#endif
// 2015-07-08cRagexe
#if PACKETVER == 20150708
- packet(0x022d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0368,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085e,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0872,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0884,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x089d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a5,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08ad,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x092a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0962,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pSolveCharName,2);
+ packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pPartyInvite2,2);
+ packet(0x0368,clif->pHomMenu,2,4);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085e,clif->pMoveToKafra,2,4);
+ packet(0x0872,clif->pTakeItem,2);
+ packet(0x087f,clif->pDull/*,XXX*/);
+ packet(0x0884,clif->pWalkToXY,2);
+ packet(0x089d,clif->pChangeDir,2,4);
+ packet(0x08a5,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08ad,clif->pStoragePassword,0);
+ packet(0x091f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x092a,clif->pMoveFromKafra,2,4);
+ packet(0x093c,clif->pFriendsListAdd,2);
+ packet(0x095b,clif->pDropItem,2,4);
+ packet(0x0962,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-07-15aRagexe
#if PACKETVER == 20150715
- packet(0x023b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0362,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0364,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0436,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0437,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0438,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0835,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x083c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086f,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0873,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0879,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x087c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x087f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0886,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0895,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0896,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0897,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0899,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x089a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08ac,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0917,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x093e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0944,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0950,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0956,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0961,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0965,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x023b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0362,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0364,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0436,clif->pSolveCharName,2);
+ packet(0x0437,clif->pUseSkillToId,2,4,6);
+ packet(0x0438,clif->pWalkToXY,2);
+ packet(0x0835,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x083c,clif->pActionRequest,2,6);
+ packet(0x085c,clif->pGetCharNameRequest,2);
+ packet(0x086f,clif->pMoveFromKafra,2,4);
+ packet(0x0873,clif->pTickSend,2);
+ packet(0x0879,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x087c,clif->pDropItem,2,4);
+ packet(0x087f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0886,clif->pDull/*,XXX*/);
+ packet(0x0895,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0896,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0897,clif->pPartyInvite2,2);
+ packet(0x0899,clif->pReqCloseBuyingStore,0);
+ packet(0x089a,clif->pTakeItem,2);
+ packet(0x08a4,clif->pDull/*,XXX*/);
+ packet(0x08ac,clif->pChangeDir,2,4);
+ packet(0x0917,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x093e,clif->pHomMenu,2,4);
+ packet(0x0944,clif->pFriendsListAdd,2);
+ packet(0x0950,clif->pReqClickBuyingStore,2);
+ packet(0x0956,clif->pStoragePassword,0);
+ packet(0x0961,clif->pMoveToKafra,2,4);
+ packet(0x0965,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2015-07-22bRagexe
#if PACKETVER == 20150722
- packet(0x023b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0281,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0360,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0361,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0368,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0811,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0815,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0817,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0869,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0878,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x087b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x087d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0880,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0884,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0899,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a8,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0919,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0921,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0925,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x092e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x093c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x093d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x094c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0951,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0958,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x023b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0281,clif->pGetCharNameRequest,2);
+ packet(0x0360,clif->pActionRequest,2,6);
+ packet(0x0361,clif->pDropItem,2,4);
+ packet(0x0368,clif->pPartyInvite2,2);
+ packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0811,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0815,clif->pReqCloseBuyingStore,0);
+ packet(0x0817,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0869,clif->pTakeItem,2);
+ packet(0x0878,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x087b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x087d,clif->pWalkToXY,2);
+ packet(0x087e,clif->pSolveCharName,2);
+ packet(0x0880,clif->pReqClickBuyingStore,2);
+ packet(0x0884,clif->pHomMenu,2,4);
+ packet(0x088d,clif->pTickSend,2);
+ packet(0x0899,clif->pMoveFromKafra,2,4);
+ packet(0x08a8,clif->pChangeDir,2,4);
+ packet(0x0919,clif->pDull/*,XXX*/);
+ packet(0x0921,clif->pMoveToKafra,2,4);
+ packet(0x0925,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x092e,clif->pFriendsListAdd,2);
+ packet(0x093c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x093d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x094c,clif->pUseSkillToId,2,4,6);
+ packet(0x094f,clif->pDull/*,XXX*/);
+ packet(0x0951,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0958,clif->pStoragePassword,0);
#endif
// 2015-07-29aRagexe
#if PACKETVER == 20150729
- packet(0x0437,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0438,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x085b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0860,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x086d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x086e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x086f,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0870,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0880,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0881,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0886,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a3,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a4,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ac,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08ad,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0920,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x092b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x092f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x093a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x093f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0940,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x094f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0955,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0961,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
+ packet(0x0437,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0438,clif->pHomMenu,2,4);
+ packet(0x085b,clif->pDull/*,XXX*/);
+ packet(0x0860,clif->pTakeItem,2);
+ packet(0x086c,clif->pMoveToKafra,2,4);
+ packet(0x086d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x086e,clif->pWalkToXY,2);
+ packet(0x086f,clif->pMoveFromKafra,2,4);
+ packet(0x0870,clif->pGetCharNameRequest,2);
+ packet(0x0880,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0881,clif->pActionRequest,2,6);
+ packet(0x0886,clif->pSolveCharName,2);
+ packet(0x089a,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089b,clif->pFriendsListAdd,2);
+ packet(0x08a3,clif->pDull/*,XXX*/);
+ packet(0x08a4,clif->pChangeDir,2,4);
+ packet(0x08ac,clif->pPartyInvite2,2);
+ packet(0x08ad,clif->pReqClickBuyingStore,2);
+ packet(0x0920,clif->pSearchStoreInfoNextPage,0);
+ packet(0x092b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x092f,clif->pUseSkillToId,2,4,6);
+ packet(0x093a,clif->pTickSend,2);
+ packet(0x093f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0940,clif->pDropItem,2,4);
+ packet(0x094f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0955,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0961,clif->pStoragePassword,0);
+ packet(0x096a,clif->pReqCloseBuyingStore,0);
#endif
// 2015-08-05aRagexe
#if PACKETVER == 20150805
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x088a,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-08-12aRagexe
#if PACKETVER == 20150812
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087f,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-08-19aRagexe
#if PACKETVER == 20150819
- packet(0x0202,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x022d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0281,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x085d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0862,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0865,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0871,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0888,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0919,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0927,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0940,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0961,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0967,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pItemListWindowSelected,2,4,8);
+ packet(0x022d,clif->pUseSkillToId,2,4,6);
+ packet(0x0281,clif->pTakeItem,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x085d,clif->pMoveFromKafra,2,4);
+ packet(0x0862,clif->pDull/*,XXX*/);
+ packet(0x0865,clif->pFriendsListAdd,2);
+ packet(0x0871,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0888,clif->pHomMenu,2,4);
+ packet(0x0919,clif->pMoveToKafra,2,4);
+ packet(0x091e,clif->pStoragePassword,0);
+ packet(0x0927,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0940,clif->pDropItem,2,4);
+ packet(0x0961,clif->pPartyInvite2,2);
+ packet(0x0967,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-08-26aRagexe, 2015-08-26bRagexe
#if PACKETVER == 20150826
- packet(0x0362,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0368,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0436,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x07ec,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0819,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0861,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0865,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x086b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0870,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x088b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0890,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0891,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a0,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08a1,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a8,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0924,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0928,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x092e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x093b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0945,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0951,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0959,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0964,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0968,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0969,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
+ packet(0x0362,clif->pStoragePassword,0);
+ packet(0x0368,clif->pMoveFromKafra,2,4);
+ packet(0x0436,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x07ec,clif->pActionRequest,2,6);
+ packet(0x0819,clif->pReqClickBuyingStore,2);
+ packet(0x0861,clif->pDull/*,XXX*/);
+ packet(0x0865,clif->pWalkToXY,2);
+ packet(0x086b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0870,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087b,clif->pSolveCharName,2);
+ packet(0x088b,clif->pPartyInvite2,2);
+ packet(0x088d,clif->pFriendsListAdd,2);
+ packet(0x0890,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0891,clif->pUseSkillToId,2,4,6);
+ packet(0x08a0,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08a1,clif->pMoveToKafra,2,4);
+ packet(0x08a4,clif->pTakeItem,2);
+ packet(0x08a8,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0924,clif->pDropItem,2,4);
+ packet(0x0928,clif->pReqCloseBuyingStore,0);
+ packet(0x092e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x093b,clif->pGetCharNameRequest,2);
+ packet(0x0945,clif->pHomMenu,2,4);
+ packet(0x094f,clif->pChangeDir,2,4);
+ packet(0x0951,clif->pTickSend,2);
+ packet(0x0959,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0964,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0968,clif->pDull/*,XXX*/);
+ packet(0x0969,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
#endif
// 2015-09-02aRagexe
#if PACKETVER == 20150902
- packet(0x023b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0360,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0367,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0802,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x083c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x085b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0863,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x087b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0886,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0887,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0889,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x088d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0892,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0897,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0899,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08a9,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0923,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0928,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x092d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0941,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0947,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x094f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0953,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x095b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0960,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
+ packet(0x023b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0360,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0367,clif->pTickSend,2);
+ packet(0x0802,clif->pStoragePassword,0);
+ packet(0x083c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x085b,clif->pActionRequest,2,6);
+ packet(0x085d,clif->pSolveCharName,2);
+ packet(0x0863,clif->pUseSkillToId,2,4,6);
+ packet(0x086f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x087b,clif->pWalkToXY,2);
+ packet(0x087f,clif->pDull/*,XXX*/);
+ packet(0x0886,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0887,clif->pDull/*,XXX*/);
+ packet(0x0889,clif->pReqCloseBuyingStore,0);
+ packet(0x088d,clif->pMoveFromKafra,2,4);
+ packet(0x0892,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0897,clif->pMoveToKafra,2,4);
+ packet(0x0899,clif->pGetCharNameRequest,2);
+ packet(0x08a9,clif->pDropItem,2,4);
+ packet(0x0923,clif->pFriendsListAdd,2);
+ packet(0x0928,clif->pTakeItem,2);
+ packet(0x092a,clif->pHomMenu,2,4);
+ packet(0x092d,clif->pPartyInvite2,2);
+ packet(0x0941,clif->pChangeDir,2,4);
+ packet(0x0947,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x094f,clif->pReqClickBuyingStore,2);
+ packet(0x0953,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x095b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0960,clif->pSearchStoreInfoNextPage,0);
#endif
// 2015-09-09aRagexe
#if PACKETVER == 20150909
- packet(0x023b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0361,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0365,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0437,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0861,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0871,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x087b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0883,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0886,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0895,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0928,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0940,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0941,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0962,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x023b,clif->pActionRequest,2,6);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqCloseBuyingStore,0);
+ packet(0x0361,clif->pGetCharNameRequest,2);
+ packet(0x0365,clif->pWalkToXY,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pStoragePassword,0);
+ packet(0x0437,clif->pMoveFromKafra,2,4);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0861,clif->pDull/*,XXX*/);
+ packet(0x0871,clif->pItemListWindowSelected,2,4,8);
+ packet(0x087b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0883,clif->pTakeItem,2);
+ packet(0x0886,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088f,clif->pPartyInvite2,2);
+ packet(0x0895,clif->pFriendsListAdd,2);
+ packet(0x0928,clif->pDull/*,XXX*/);
+ packet(0x0940,clif->pReqClickBuyingStore,2);
+ packet(0x0941,clif->pHomMenu,2,4);
+ packet(0x095e,clif->pDropItem,2,4);
+ packet(0x0962,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pChangeDir,2,4);
#endif
// 2015-09-16aRagexe, 2015-09-16cRagexe
#if PACKETVER == 20150916
- packet(0x022d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0817,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0835,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0869,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0873,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0877,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0881,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x089b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x089c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x089e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08ac,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0920,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0924,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x092e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x092f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0934,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0936,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0938,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x093e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0941,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0942,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0948,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x094f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x095a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0960,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0961,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0969,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x022d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0817,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0835,clif->pReqClickBuyingStore,2);
+ packet(0x085e,clif->pMoveFromKafra,2,4);
+ packet(0x0869,clif->pActionRequest,2,6);
+ packet(0x0873,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0877,clif->pWalkToXY,2);
+ packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0881,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x089b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x089c,clif->pTakeItem,2);
+ packet(0x089e,clif->pFriendsListAdd,2);
+ packet(0x08ac,clif->pTickSend,2);
+ packet(0x0920,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0924,clif->pPartyInvite2,2);
+ packet(0x092e,clif->pReqCloseBuyingStore,0);
+ packet(0x092f,clif->pDropItem,2,4);
+ packet(0x0934,clif->pMoveToKafra,2,4);
+ packet(0x0936,clif->pChangeDir,2,4);
+ packet(0x0938,clif->pDull/*,XXX*/);
+ packet(0x093e,clif->pUseSkillToId,2,4,6);
+ packet(0x0941,clif->pStoragePassword,0);
+ packet(0x0942,clif->pSolveCharName,2);
+ packet(0x0948,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x094f,clif->pDull/*,XXX*/);
+ packet(0x095a,clif->pGetCharNameRequest,2);
+ packet(0x0960,clif->pHomMenu,2,4);
+ packet(0x0961,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0969,clif->pWantToConnection,2,6,10,14,18);
#endif
// 2015-09-23bRagexe, 2015-09-23cRagexe, 2015-09-23dRagexe, 2015-09-23eRagexe, 2015-09-23fRagexe
#if PACKETVER == 20150923
- packet(0x0361,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x07e4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0817,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x085c,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x085d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0864,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x086f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0870,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0879,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0886,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x088e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0892,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0895,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a0,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a2,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a5,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08a6,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x091e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x092b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0930,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0936,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x093b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0951,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0961,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
+ packet(0x0361,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x07e4,clif->pStoragePassword,0);
+ packet(0x0817,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x085c,clif->pSolveCharName,2);
+ packet(0x085d,clif->pFriendsListAdd,2);
+ packet(0x0864,clif->pHomMenu,2,4);
+ packet(0x086e,clif->pReqCloseBuyingStore,0);
+ packet(0x086f,clif->pUseSkillToId,2,4,6);
+ packet(0x0870,clif->pChangeDir,2,4);
+ packet(0x0879,clif->pMoveFromKafra,2,4);
+ packet(0x087f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0886,clif->pWalkToXY,2);
+ packet(0x088e,clif->pReqClickBuyingStore,2);
+ packet(0x0892,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0895,clif->pDull/*,XXX*/);
+ packet(0x089b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089f,clif->pMoveToKafra,2,4);
+ packet(0x08a0,clif->pTickSend,2);
+ packet(0x08a2,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a5,clif->pGetCharNameRequest,2);
+ packet(0x08a6,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x091e,clif->pDull/*,XXX*/);
+ packet(0x092b,clif->pTakeItem,2);
+ packet(0x0930,clif->pDropItem,2,4);
+ packet(0x0936,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x093b,clif->pPartyInvite2,2);
+ packet(0x0951,clif->pActionRequest,2,6);
+ packet(0x0961,clif->pItemListWindowSelected,2,4,8);
#endif
// 2015-10-01aRagexe
#if PACKETVER == 20151001
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0960,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0960,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-10-07aRagexe
#if PACKETVER == 20151007
- packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0862,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x093f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0961,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0967,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pFriendsListAdd,2);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0862,clif->pDull/*,XXX*/);
+ packet(0x093f,clif->pHomMenu,2,4);
+ packet(0x095f,clif->pChangeDir,2,4);
+ packet(0x0961,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0967,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-10-14bRagexe
#if PACKETVER == 20151014
- packet(0x0202,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0817,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0838,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x085a,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0860,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0863,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0872,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0874,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0881,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0883,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0884,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0889,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x088e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x089a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x089f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08aa,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x091d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0930,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0934,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0944,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x094f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0956,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x095e,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0961,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0964,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x0202,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0817,clif->pFriendsListAdd,2);
+ packet(0x0838,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x085a,clif->pUseSkillToId,2,4,6);
+ packet(0x085c,clif->pActionRequest,2,6);
+ packet(0x0860,clif->pDropItem,2,4);
+ packet(0x0863,clif->pChangeDir,2,4);
+ packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0872,clif->pHomMenu,2,4);
+ packet(0x0874,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0881,clif->pMoveFromKafra,2,4);
+ packet(0x0883,clif->pTickSend,2);
+ packet(0x0884,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0889,clif->pReqClickBuyingStore,2);
+ packet(0x088e,clif->pDull/*,XXX*/);
+ packet(0x089a,clif->pDull/*,XXX*/);
+ packet(0x089b,clif->pReqCloseBuyingStore,0);
+ packet(0x089f,clif->pWalkToXY,2);
+ packet(0x08aa,clif->pTakeItem,2);
+ packet(0x091c,clif->pPartyInvite2,2);
+ packet(0x091d,clif->pStoragePassword,0);
+ packet(0x0930,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0934,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0944,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x094f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0956,clif->pSolveCharName,2);
+ packet(0x095e,clif->pMoveToKafra,2,4);
+ packet(0x0961,clif->pGetCharNameRequest,2);
+ packet(0x0964,clif->pWantToConnection,2,6,10,14,18);
#endif
// 2015-10-21aRagexe, 2015-10-22aRagexe
#if PACKETVER == 20151021 || \
PACKETVER == 20151022
- packet(0x023b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x02c4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x02c4,clif->pStoragePassword,0);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pMoveToKafra,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pChangeDir,2,4);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086a,clif->pFriendsListAdd,2);
+ packet(0x091d,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-10-28cRagexe, 2015-10-28dRagexe, 2015-10-29aRagexe
#if PACKETVER == 20151028 || \
PACKETVER == 20151029
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0860,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0860,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-11-04aRagexe
#if PACKETVER == 20151104
- packet(0x023b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0360,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0363,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0437,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07ec,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0811,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0815,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0886,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0887,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x088b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x088d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a3,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a5,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0928,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0939,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093a,clif->pItemListWindowSelected,2,4,8,12); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0940,clif->pStoragePassword,2,4,20); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0964,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x023b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0360,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0363,clif->pWalkToXY,2);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pReqClickBuyingStore,2);
+ packet(0x0437,clif->pDropItem,2,4);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07ec,clif->pFriendsListAdd,2);
+ packet(0x0811,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0815,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0886,clif->pTickSend,2);
+ packet(0x0887,clif->pGetCharNameRequest,2);
+ packet(0x088b,clif->pMoveToKafra,2,4);
+ packet(0x088d,clif->pHomMenu,2,4);
+ packet(0x08a3,clif->pDull/*,XXX*/);
+ packet(0x08a5,clif->pPartyInvite2,2);
+ packet(0x0928,clif->pChangeDir,2,4);
+ packet(0x0939,clif->pDull/*,XXX*/);
+ packet(0x093a,clif->pItemListWindowSelected,2,4,8,12);
+ packet(0x0940,clif->pStoragePassword,2,4,20);
+ packet(0x0964,clif->pTakeItem,2);
#endif
// 2015-11-11aRagexe, 2015-11-11bRagexe
#if PACKETVER == 20151111
- packet(0x02c4,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085d,clif->pItemListWindowSelected,2,4,8,12); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0862,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0871,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0885,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x089c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0942,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0958,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0966,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0967,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0969,clif->pStoragePassword,2,4,20); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x02c4,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pHomMenu,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pMoveToKafra,2,4);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pDull/*,XXX*/);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pPartyInvite2,2);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085d,clif->pItemListWindowSelected,2,4,8,12);
+ packet(0x0862,clif->pDropItem,2,4);
+ packet(0x0871,clif->pFriendsListAdd,2);
+ packet(0x0885,clif->pActionRequest,2,6);
+ packet(0x089c,clif->pChangeDir,2,4);
+ packet(0x0942,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x094a,clif->pTakeItem,2);
+ packet(0x0958,clif->pDull/*,XXX*/);
+ packet(0x0966,clif->pMoveFromKafra,2,4);
+ packet(0x0967,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0969,clif->pStoragePassword,2,4,20);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-11-18aRagexe
#if PACKETVER == 20151118
- packet(0x022d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x035f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x088b,clif->pStoragePassword,2,4,20); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08ab,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0921,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0925,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0943,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0946,clif->pItemListWindowSelected,2,4,8,12); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0957,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095c,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pTickSend,2);
+ packet(0x035f,clif->pHomMenu,2,4);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pPartyInvite2,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086b,clif->pMoveToKafra,2,4);
+ packet(0x088b,clif->pStoragePassword,2,4,20);
+ packet(0x08ab,clif->pMoveFromKafra,2,4);
+ packet(0x0921,clif->pFriendsListAdd,2);
+ packet(0x0925,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092e,clif->pChangeDir,2,4);
+ packet(0x092f,clif->pDull/*,XXX*/);
+ packet(0x093c,clif->pDropItem,2,4);
+ packet(0x0943,clif->pTakeItem,2);
+ packet(0x0946,clif->pItemListWindowSelected,2,4,8,12);
+ packet(0x0957,clif->pDull/*,XXX*/);
+ packet(0x095c,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-11-25bRagexe, 2015-11-25dRagexe
#if PACKETVER == 20151125
- packet(0x0361,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0365,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0366,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0368,clif->pItemListWindowSelected,2,4,8,12); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0438,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0802,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0838,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0863,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0883,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0884,clif->pStoragePassword,2,4,20); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0885,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088c,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0899,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x089f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x08a9,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08ad,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0920,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x092a,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x092e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0939,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0951,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0956,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0957,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0959,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
+ packet(0x0361,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0365,clif->pWalkToXY,2);
+ packet(0x0366,clif->pMoveFromKafra,2,4);
+ packet(0x0368,clif->pItemListWindowSelected,2,4,8,12);
+ packet(0x0438,clif->pTakeItem,2);
+ packet(0x0802,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0838,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x085e,clif->pGetCharNameRequest,2);
+ packet(0x085f,clif->pMoveToKafra,2,4);
+ packet(0x0863,clif->pReqCloseBuyingStore,0);
+ packet(0x0883,clif->pChangeDir,2,4);
+ packet(0x0884,clif->pStoragePassword,2,4,20);
+ packet(0x0885,clif->pDull/*,XXX*/);
+ packet(0x088c,clif->pTickSend,2);
+ packet(0x088d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0899,clif->pFriendsListAdd,2);
+ packet(0x089c,clif->pActionRequest,2,6);
+ packet(0x089f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x08a9,clif->pDropItem,2,4);
+ packet(0x08ad,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0920,clif->pSolveCharName,2);
+ packet(0x092a,clif->pUseSkillToId,2,4,6);
+ packet(0x092e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0939,clif->pReqClickBuyingStore,2);
+ packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0951,clif->pHomMenu,2,4);
+ packet(0x0956,clif->pPartyInvite2,2);
+ packet(0x0957,clif->pDull/*,XXX*/);
+ packet(0x0959,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
#endif
// 2015-12-02aRagexe
#if PACKETVER == 20151202
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8,12); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0870,clif->pStoragePassword,2,4,20); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8,12);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0870,clif->pStoragePassword,2,4,20);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-12-09aRagexe
#if PACKETVER == 20151209
- packet(0x0365,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0369,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x07e4,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x07ec,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0811,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0819,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x085b,clif->pStoragePassword,2,4,20); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x085d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0861,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0866,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0875,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x087a,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x087f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x088e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0894,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a1,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0920,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x092d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0930,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0932,clif->pItemListWindowSelected,2,4,8,12); // CZ_ITEMLISTWIN_RES // -1
- packet(0x093b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0948,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x094a,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0956,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x095c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0961,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0964,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
+ packet(0x0365,clif->pWalkToXY,2);
+ packet(0x0369,clif->pSolveCharName,2);
+ packet(0x07e4,clif->pPartyInvite2,2);
+ packet(0x07ec,clif->pTakeItem,2);
+ packet(0x0811,clif->pTickSend,2);
+ packet(0x0819,clif->pReqCloseBuyingStore,0);
+ packet(0x085b,clif->pStoragePassword,2,4,20);
+ packet(0x085d,clif->pGetCharNameRequest,2);
+ packet(0x085e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0861,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0866,clif->pChangeDir,2,4);
+ packet(0x0875,clif->pSearchStoreInfoNextPage,0);
+ packet(0x087a,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x087f,clif->pReqClickBuyingStore,2);
+ packet(0x088e,clif->pUseSkillToId,2,4,6);
+ packet(0x088f,clif->pDull/*,XXX*/);
+ packet(0x0894,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a1,clif->pHomMenu,2,4);
+ packet(0x0920,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x092d,clif->pMoveFromKafra,2,4);
+ packet(0x0930,clif->pDropItem,2,4);
+ packet(0x0932,clif->pItemListWindowSelected,2,4,8,12);
+ packet(0x093b,clif->pMoveToKafra,2,4);
+ packet(0x0948,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x094a,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0956,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x095c,clif->pDull/*,XXX*/);
+ packet(0x0961,clif->pActionRequest,2,6);
+ packet(0x0964,clif->pFriendsListAdd,2);
#endif
// 2015-12-16aRagexe
#if PACKETVER == 20151216
- packet(0x022d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0361,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0364,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0436,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x085b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0864,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0865,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x086e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0870,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0874,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0885,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089d,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x089e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a2,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a9,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08ac,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0947,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0949,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0954,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0960,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0966,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0968,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
+ packet(0x022d,clif->pChangeDir,2,4);
+ packet(0x0361,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pHomMenu,2,4);
+ packet(0x0364,clif->pDull/*,XXX*/);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0436,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pReqCloseBuyingStore,0);
+ packet(0x085b,clif->pTickSend,2);
+ packet(0x0864,clif->pMoveFromKafra,2,4);
+ packet(0x0865,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086a,clif->pDull/*,XXX*/);
+ packet(0x086e,clif->pPartyInvite2,2);
+ packet(0x0870,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0874,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0885,clif->pStoragePassword,0);
+ packet(0x088b,clif->pGetCharNameRequest,2);
+ packet(0x089d,clif->pActionRequest,2,6);
+ packet(0x089e,clif->pSolveCharName,2);
+ packet(0x08a2,clif->pWalkToXY,2);
+ packet(0x08a9,clif->pTakeItem,2);
+ packet(0x08ac,clif->pMoveToKafra,2,4);
+ packet(0x091d,clif->pFriendsListAdd,2);
+ packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0947,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0949,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0954,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0960,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0966,clif->pDropItem,2,4);
+ packet(0x0968,clif->pUseSkillToId,2,4,6);
#endif
// 2015-12-23bRagexe
#if PACKETVER == 20151223
- packet(0x02c4,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0362,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0802,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0815,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0864,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0866,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x086e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0872,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0875,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0876,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0881,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0884,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0886,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x088d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0890,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0891,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0898,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08aa,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0918,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x091a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x091b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0920,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0923,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0924,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x095e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x095f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0965,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0967,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
+ packet(0x02c4,clif->pMoveToKafra,2,4);
+ packet(0x0362,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pTakeItem,2);
+ packet(0x0802,clif->pDull/*,XXX*/);
+ packet(0x0815,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0864,clif->pGetCharNameRequest,2);
+ packet(0x0866,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x086e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0872,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0875,clif->pUseSkillToId,2,4,6);
+ packet(0x0876,clif->pDropItem,2,4);
+ packet(0x0881,clif->pActionRequest,2,6);
+ packet(0x0884,clif->pMoveFromKafra,2,4);
+ packet(0x0886,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x088d,clif->pHomMenu,2,4);
+ packet(0x0890,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0891,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0898,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08aa,clif->pPartyInvite2,2);
+ packet(0x0918,clif->pSearchStoreInfoNextPage,0);
+ packet(0x091a,clif->pReqClickBuyingStore,2);
+ packet(0x091b,clif->pFriendsListAdd,2);
+ packet(0x0920,clif->pWalkToXY,2);
+ packet(0x0923,clif->pChangeDir,2,4);
+ packet(0x0924,clif->pTickSend,2);
+ packet(0x095e,clif->pSolveCharName,2);
+ packet(0x095f,clif->pReqCloseBuyingStore,0);
+ packet(0x0965,clif->pStoragePassword,0);
+ packet(0x0967,clif->pSearchStoreInfoListItemClick,2,6,10);
#endif
// 2015-12-30aRagexe
#if PACKETVER == 20151230
- packet(0x02c4,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x07ec,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0861,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0869,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0886,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x088e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0897,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0923,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0949,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x02c4,clif->pMoveToKafra,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pDull/*,XXX*/);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x07ec,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0861,clif->pPartyInvite2,2);
+ packet(0x0869,clif->pChangeDir,2,4);
+ packet(0x0886,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x088e,clif->pFriendsListAdd,2);
+ packet(0x0897,clif->pDropItem,2,4);
+ packet(0x091d,clif->pMoveFromKafra,2,4);
+ packet(0x0923,clif->pStoragePassword,0);
+ packet(0x093a,clif->pDull/*,XXX*/);
+ packet(0x0949,clif->pHomMenu,2,4);
+ packet(0x094e,clif->pTakeItem,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-01-06aRagexe
#if PACKETVER == 20160106
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07ec,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0861,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x086c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0878,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x087a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x087f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0885,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0889,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x088a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0891,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a0,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0940,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07ec,clif->pHomMenu,2,4);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0861,clif->pTakeItem,2);
+ packet(0x086a,clif->pDropItem,2,4);
+ packet(0x086c,clif->pDull/*,XXX*/);
+ packet(0x0878,clif->pStoragePassword,0);
+ packet(0x087a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x087f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0885,clif->pMoveToKafra,2,4);
+ packet(0x0889,clif->pChangeDir,2,4);
+ packet(0x088a,clif->pPartyInvite2,2);
+ packet(0x0891,clif->pMoveFromKafra,2,4);
+ packet(0x08a0,clif->pFriendsListAdd,2);
+ packet(0x091d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0940,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-01-13aRagexe, 2016-01-13bRagexe, 2016-01-13bRagexe_2
#if PACKETVER == 20160113
- packet(0x022d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x023b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x035f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0815,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x085b,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0864,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x086d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0873,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0875,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0888,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x088b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0892,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0893,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0899,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a0,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a6,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08aa,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0919,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x091b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0924,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0930,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0932,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x093c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0941,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x094d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x094f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0967,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x022d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x023b,clif->pWalkToXY,2);
+ packet(0x035f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0815,clif->pStoragePassword,0);
+ packet(0x085b,clif->pChangeDir,2,4);
+ packet(0x0864,clif->pReqClickBuyingStore,2);
+ packet(0x086d,clif->pHomMenu,2,4);
+ packet(0x0873,clif->pDull/*,XXX*/);
+ packet(0x0875,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0888,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x088b,clif->pPartyInvite2,2);
+ packet(0x088c,clif->pReqCloseBuyingStore,0);
+ packet(0x0892,clif->pUseSkillToId,2,4,6);
+ packet(0x0893,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0899,clif->pFriendsListAdd,2);
+ packet(0x089a,clif->pActionRequest,2,6);
+ packet(0x08a0,clif->pTickSend,2);
+ packet(0x08a6,clif->pTakeItem,2);
+ packet(0x08aa,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0919,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x091b,clif->pGetCharNameRequest,2);
+ packet(0x0924,clif->pDropItem,2,4);
+ packet(0x0930,clif->pSolveCharName,2);
+ packet(0x0932,clif->pMoveToKafra,2,4);
+ packet(0x093c,clif->pMoveFromKafra,2,4);
+ packet(0x0941,clif->pItemListWindowSelected,2,4,8);
+ packet(0x094d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x094f,clif->pDull/*,XXX*/);
+ packet(0x0967,clif->pReqOpenBuyingStore,2,4,8,9,89);
#endif
// 2016-01-20aRagexe
#if PACKETVER == 20160120
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0865,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0865,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-01-27cRagexe, 2016-01-27dRagexe
#if PACKETVER == 20160127
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0922,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0961,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085e,clif->pChangeDir,2,4);
+ packet(0x0922,clif->pHomMenu,2,4);
+ packet(0x095a,clif->pStoragePassword,0);
+ packet(0x0961,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-02-03aRagexe
#if PACKETVER == 20160203
- packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0437,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0811,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0835,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0872,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0873,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0918,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0940,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0947,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0954,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pFriendsListAdd,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0437,clif->pTickSend,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0811,clif->pChangeDir,2,4);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0835,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0872,clif->pHomMenu,2,4);
+ packet(0x0873,clif->pStoragePassword,0);
+ packet(0x088c,clif->pDull/*,XXX*/);
+ packet(0x0918,clif->pDull/*,XXX*/);
+ packet(0x093e,clif->pPartyInvite2,2);
+ packet(0x0940,clif->pWalkToXY,2);
+ packet(0x0947,clif->pDropItem,2,4);
+ packet(0x0954,clif->pMoveFromKafra,2,4);
+ packet(0x095a,clif->pTakeItem,2);
+ packet(0x095d,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-02-11aRagexe
#if PACKETVER == 20160211
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0870,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0886,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pStoragePassword,0);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086c,clif->pChangeDir,2,4);
+ packet(0x0870,clif->pFriendsListAdd,2);
+ packet(0x0886,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-02-17aRagexe
#if PACKETVER == 20160217
- packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x023b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0362,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0365,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0864,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0870,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0873,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x087a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0888,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x088f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0899,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a0,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a9,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08ac,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08ad,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x091d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0920,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0926,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x092e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x093b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x093e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0941,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x094f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x095e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0966,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0967,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0969,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x023b,clif->pReqCloseBuyingStore,0);
+ packet(0x0362,clif->pChangeDir,2,4);
+ packet(0x0365,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0864,clif->pMoveToKafra,2,4);
+ packet(0x0870,clif->pFriendsListAdd,2);
+ packet(0x0873,clif->pHomMenu,2,4);
+ packet(0x087a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0888,clif->pTickSend,2);
+ packet(0x088d,clif->pReqClickBuyingStore,2);
+ packet(0x088f,clif->pDropItem,2,4);
+ packet(0x0899,clif->pDull/*,XXX*/);
+ packet(0x08a0,clif->pMoveFromKafra,2,4);
+ packet(0x08a9,clif->pPartyInvite2,2);
+ packet(0x08ac,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08ad,clif->pSearchStoreInfoNextPage,0);
+ packet(0x091d,clif->pWalkToXY,2);
+ packet(0x0920,clif->pActionRequest,2,6);
+ packet(0x0926,clif->pUseSkillToId,2,4,6);
+ packet(0x092e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x093b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x093e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0941,clif->pTakeItem,2);
+ packet(0x094a,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x094f,clif->pDull/*,XXX*/);
+ packet(0x095e,clif->pStoragePassword,0);
+ packet(0x0966,clif->pGetCharNameRequest,2);
+ packet(0x0967,clif->pSolveCharName,2);
+ packet(0x0969,clif->pReqOpenBuyingStore,2,4,8,9,89);
#endif
// 2016-02-24aRagexe
#if PACKETVER == 20160224
- packet(0x022d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0364,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0436,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0861,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x086b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0884,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0885,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0888,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a9,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0920,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0929,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092f,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0936,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0938,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0961,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pPartyInvite2,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0364,clif->pUseSkillToId,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pMoveFromKafra,2,4);
+ packet(0x0436,clif->pDropItem,2,4);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pMoveToKafra,2,4);
+ packet(0x0861,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x086b,clif->pDull/*,XXX*/);
+ packet(0x0884,clif->pActionRequest,2,6);
+ packet(0x0885,clif->pReqClickBuyingStore,2);
+ packet(0x0888,clif->pWalkToXY,2);
+ packet(0x08a9,clif->pFriendsListAdd,2);
+ packet(0x0920,clif->pDull/*,XXX*/);
+ packet(0x0929,clif->pChangeDir,2,4);
+ packet(0x092f,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0936,clif->pStoragePassword,0);
+ packet(0x0938,clif->pTakeItem,2);
+ packet(0x094c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0961,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-03-02bRagexe
#if PACKETVER == 20160302
- packet(0x022d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0367,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0802,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0819,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0864,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0865,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0868,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0873,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0875,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x087a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x087d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0883,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a6,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08a9,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0927,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0945,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x094e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0950,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0957,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0960,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0961,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0967,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0968,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
+ packet(0x022d,clif->pChangeDir,2,4);
+ packet(0x0367,clif->pReqClickBuyingStore,2);
+ packet(0x0802,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0819,clif->pWalkToXY,2);
+ packet(0x085b,clif->pFriendsListAdd,2);
+ packet(0x0864,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0865,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0868,clif->pHomMenu,2,4);
+ packet(0x0873,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0875,clif->pSearchStoreInfoNextPage,0);
+ packet(0x087a,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x087d,clif->pPartyInvite2,2);
+ packet(0x0883,clif->pUseSkillToId,2,4,6);
+ packet(0x08a6,clif->pReqCloseBuyingStore,0);
+ packet(0x08a9,clif->pMoveFromKafra,2,4);
+ packet(0x091a,clif->pDropItem,2,4);
+ packet(0x0927,clif->pTakeItem,2);
+ packet(0x092d,clif->pDull/*,XXX*/);
+ packet(0x092f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0945,clif->pGetCharNameRequest,2);
+ packet(0x094e,clif->pStoragePassword,0);
+ packet(0x0950,clif->pDull/*,XXX*/);
+ packet(0x0957,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095a,clif->pTickSend,2);
+ packet(0x0960,clif->pMoveToKafra,2,4);
+ packet(0x0961,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0967,clif->pSolveCharName,2);
+ packet(0x0968,clif->pActionRequest,2,6);
#endif
// 2016-03-09cRagexe
#if PACKETVER == 20160309
- packet(0x023b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0281,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0364,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0819,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0838,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x083c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x085a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x085f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0866,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x086a,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0873,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x087e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x089b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a7,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0920,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0922,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0929,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092a,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x092e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0932,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094f,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0956,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x095e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x096a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x023b,clif->pDropItem,2,4);
+ packet(0x0281,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pFriendsListAdd,2);
+ packet(0x0364,clif->pStoragePassword,0);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0819,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0838,clif->pWalkToXY,2);
+ packet(0x083c,clif->pPartyInvite2,2);
+ packet(0x085a,clif->pMoveToKafra,2,4);
+ packet(0x085f,clif->pUseSkillToId,2,4,6);
+ packet(0x0866,clif->pSearchStoreInfoNextPage,0);
+ packet(0x086a,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0873,clif->pDull/*,XXX*/);
+ packet(0x087c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x087e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x089b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089d,clif->pChangeDir,2,4);
+ packet(0x08a7,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091d,clif->pGetCharNameRequest,2);
+ packet(0x0920,clif->pMoveFromKafra,2,4);
+ packet(0x0922,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0929,clif->pDull/*,XXX*/);
+ packet(0x092a,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x092e,clif->pReqCloseBuyingStore,0);
+ packet(0x0932,clif->pHomMenu,2,4);
+ packet(0x094f,clif->pActionRequest,2,6);
+ packet(0x0956,clif->pTickSend,2);
+ packet(0x095e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x096a,clif->pTakeItem,2);
#endif
// 2016-03-16aRagexe, 2016-03-18aRagexe
#if PACKETVER == 20160316 || \
PACKETVER == 20160318
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0922,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0922,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-03-23aRagexe, 2016-03-23bRagexe
#if PACKETVER == 20160323
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0867,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0869,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0872,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0878,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0883,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0896,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x091b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0926,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0927,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0933,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x093c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pFriendsListAdd,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0867,clif->pDull/*,XXX*/);
+ packet(0x0869,clif->pTakeItem,2);
+ packet(0x086a,clif->pMoveFromKafra,2,4);
+ packet(0x0872,clif->pStoragePassword,0);
+ packet(0x0878,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0883,clif->pPartyInvite2,2);
+ packet(0x0896,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089a,clif->pHomMenu,2,4);
+ packet(0x091b,clif->pDull/*,XXX*/);
+ packet(0x0926,clif->pMoveToKafra,2,4);
+ packet(0x0927,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0933,clif->pChangeDir,2,4);
+ packet(0x093c,clif->pDropItem,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-03-30aRagexe, 2016-03-30bRagexe
#if PACKETVER == 20160330
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0867,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x086d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0878,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087f,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0889,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x088b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0918,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0925,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x092c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0930,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0939,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x093b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pStoragePassword,0);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0867,clif->pPartyInvite2,2);
+ packet(0x086d,clif->pTakeItem,2);
+ packet(0x0878,clif->pDull/*,XXX*/);
+ packet(0x087f,clif->pMoveFromKafra,2,4);
+ packet(0x0889,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x088b,clif->pHomMenu,2,4);
+ packet(0x088d,clif->pDull/*,XXX*/);
+ packet(0x0918,clif->pMoveToKafra,2,4);
+ packet(0x0925,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x092c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0930,clif->pChangeDir,2,4);
+ packet(0x0939,clif->pDropItem,2,4);
+ packet(0x093b,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-04-06aRagexe, 2016-04-06bRagexe
#if PACKETVER == 20160406
- packet(0x0364,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x07e4,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0819,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x085a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0869,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0877,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0878,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0879,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0884,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0892,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0895,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0898,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a1,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a9,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08ac,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0927,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0933,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0934,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0940,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0949,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x094d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0953,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0962,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x0364,clif->pSolveCharName,2);
+ packet(0x07e4,clif->pDropItem,2,4);
+ packet(0x0819,clif->pSearchStoreInfoNextPage,0);
+ packet(0x085a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x085c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0869,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0877,clif->pTakeItem,2);
+ packet(0x0878,clif->pFriendsListAdd,2);
+ packet(0x0879,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0884,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0892,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0895,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0898,clif->pPartyInvite2,2);
+ packet(0x089b,clif->pGetCharNameRequest,2);
+ packet(0x089e,clif->pMoveFromKafra,2,4);
+ packet(0x08a1,clif->pActionRequest,2,6);
+ packet(0x08a9,clif->pReqCloseBuyingStore,0);
+ packet(0x08ac,clif->pDull/*,XXX*/);
+ packet(0x0927,clif->pMoveToKafra,2,4);
+ packet(0x092d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0933,clif->pChangeDir,2,4);
+ packet(0x0934,clif->pUseSkillToId,2,4,6);
+ packet(0x0940,clif->pTickSend,2);
+ packet(0x0949,clif->pItemListWindowSelected,2,4,8);
+ packet(0x094d,clif->pReqClickBuyingStore,2);
+ packet(0x0953,clif->pStoragePassword,0);
+ packet(0x095d,clif->pHomMenu,2,4);
+ packet(0x095f,clif->pWalkToXY,2);
+ packet(0x0962,clif->pDull/*,XXX*/);
#endif
// 2016-04-14aRagexe, 2016-04-14bRagexe, 2016-04-14bRagexe_2, 2016-04-14cRagexe
#if PACKETVER == 20160414
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0363,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0862,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x087a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0880,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0885,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x089e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0918,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0922,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0927,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0931,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0934,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0945,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0953,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0363,clif->pTakeItem,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0862,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x087a,clif->pDull/*,XXX*/);
+ packet(0x0880,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0885,clif->pMoveFromKafra,2,4);
+ packet(0x089e,clif->pPartyInvite2,2);
+ packet(0x0918,clif->pDull/*,XXX*/);
+ packet(0x0922,clif->pChangeDir,2,4);
+ packet(0x0927,clif->pStoragePassword,0);
+ packet(0x0931,clif->pDropItem,2,4);
+ packet(0x0934,clif->pHomMenu,2,4);
+ packet(0x0945,clif->pFriendsListAdd,2);
+ packet(0x0953,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-04-20cRagexe
#if PACKETVER == 20160420
- packet(0x022d,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x02c4,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x035f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0864,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0870,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0872,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0874,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0884,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0888,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a5,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0935,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x094e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x02c4,clif->pTickSend,2);
+ packet(0x035f,clif->pPartyInvite2,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pHomMenu,2,4);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0864,clif->pTakeItem,2);
+ packet(0x0870,clif->pDull/*,XXX*/);
+ packet(0x0872,clif->pChangeDir,2,4);
+ packet(0x0874,clif->pMoveToKafra,2,4);
+ packet(0x0884,clif->pDropItem,2,4);
+ packet(0x0888,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088b,clif->pMoveFromKafra,2,4);
+ packet(0x08a5,clif->pStoragePassword,0);
+ packet(0x092f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0935,clif->pFriendsListAdd,2);
+ packet(0x094e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095c,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-04-27aRagexe
#if PACKETVER == 20160427
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0835,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0940,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0835,clif->pStoragePassword,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0940,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-05-04aRagexe
#if PACKETVER == 20160504
- packet(0x0202,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0363,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0365,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x083c,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x085f,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x086b,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x087f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0884,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0886,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0887,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x088d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088f,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0890,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0893,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0898,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x089d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08ad,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0918,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0921,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0922,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0924,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x093e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0940,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0941,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0948,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0952,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0969,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x0202,clif->pHomMenu,2,4);
+ packet(0x0363,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0365,clif->pDull/*,XXX*/);
+ packet(0x083c,clif->pSearchStoreInfoNextPage,0);
+ packet(0x085f,clif->pActionRequest,2,6);
+ packet(0x086b,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x087f,clif->pReqCloseBuyingStore,0);
+ packet(0x0884,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0886,clif->pMoveToKafra,2,4);
+ packet(0x0887,clif->pPartyInvite2,2);
+ packet(0x088a,clif->pTakeItem,2);
+ packet(0x088d,clif->pUseSkillToId,2,4,6);
+ packet(0x088f,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0890,clif->pDropItem,2,4);
+ packet(0x0893,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0898,clif->pDull/*,XXX*/);
+ packet(0x089d,clif->pSolveCharName,2);
+ packet(0x08ad,clif->pChangeDir,2,4);
+ packet(0x0918,clif->pTickSend,2);
+ packet(0x0921,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0922,clif->pGetCharNameRequest,2);
+ packet(0x0924,clif->pWalkToXY,2);
+ packet(0x093e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0940,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0941,clif->pMoveFromKafra,2,4);
+ packet(0x0948,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0952,clif->pFriendsListAdd,2);
+ packet(0x095b,clif->pReqClickBuyingStore,2);
+ packet(0x0969,clif->pStoragePassword,0);
#endif
// 2016-05-11aRagexe
#if PACKETVER == 20160511
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0894,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0918,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0920,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0940,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085e,clif->pChangeDir,2,4);
+ packet(0x0894,clif->pFriendsListAdd,2);
+ packet(0x089b,clif->pDull/*,XXX*/);
+ packet(0x0918,clif->pHomMenu,2,4);
+ packet(0x0920,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0940,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-05-18aRagexe
#if PACKETVER == 20160518
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0874,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x089a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a9,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0928,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086c,clif->pChangeDir,2,4);
+ packet(0x0874,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x089a,clif->pStoragePassword,0);
+ packet(0x08a9,clif->pFriendsListAdd,2);
+ packet(0x0928,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-05-25aRagexe, 2016-05-26aRagexe
#if PACKETVER == 20160525 || \
PACKETVER == 20160526
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x085e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0867,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0899,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x089c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0937,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0945,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x094a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x094e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0951,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0956,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pDull/*,XXX*/);
+ packet(0x085e,clif->pDropItem,2,4);
+ packet(0x0867,clif->pHomMenu,2,4);
+ packet(0x086a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0899,clif->pTakeItem,2);
+ packet(0x089c,clif->pChangeDir,2,4);
+ packet(0x091d,clif->pStoragePassword,0);
+ packet(0x092c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0937,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0945,clif->pPartyInvite2,2);
+ packet(0x094a,clif->pMoveToKafra,2,4);
+ packet(0x094e,clif->pDull/*,XXX*/);
+ packet(0x0951,clif->pFriendsListAdd,2);
+ packet(0x0956,clif->pMoveFromKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-06-01aRagexe
#if PACKETVER == 20160601
- packet(0x0202,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x02c4,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0863,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0870,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x088f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0895,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a7,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08ac,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0924,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095b,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x095f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0961,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pReqCloseBuyingStore,0);
+ packet(0x02c4,clif->pPartyInvite2,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pFriendsListAdd,2);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0863,clif->pTakeItem,2);
+ packet(0x0870,clif->pMoveFromKafra,2,4);
+ packet(0x087d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088d,clif->pDropItem,2,4);
+ packet(0x088f,clif->pMoveToKafra,2,4);
+ packet(0x0895,clif->pHomMenu,2,4);
+ packet(0x08a7,clif->pDull/*,XXX*/);
+ packet(0x08ac,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0924,clif->pDull/*,XXX*/);
+ packet(0x095b,clif->pChangeDir,2,4);
+ packet(0x095f,clif->pStoragePassword,0);
+ packet(0x0961,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-06-08aRagexe, 2016-06-08bRagexe, 2016-06-09aRagexe
#if PACKETVER == 20160608 || \
PACKETVER == 20160609
- packet(0x022d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x02c4,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x035f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0437,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07ec,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0802,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0885,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0889,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0899,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x089b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a6,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0958,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0969,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x02c4,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x035f,clif->pPartyInvite2,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pWalkToXY,2);
+ packet(0x0437,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07ec,clif->pChangeDir,2,4);
+ packet(0x0802,clif->pTickSend,2);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085c,clif->pDull/*,XXX*/);
+ packet(0x0885,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0889,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0899,clif->pTakeItem,2);
+ packet(0x089b,clif->pHomMenu,2,4);
+ packet(0x08a6,clif->pMoveFromKafra,2,4);
+ packet(0x093b,clif->pDull/*,XXX*/);
+ packet(0x094d,clif->pDropItem,2,4);
+ packet(0x0958,clif->pStoragePassword,0);
+ packet(0x095b,clif->pMoveToKafra,2,4);
+ packet(0x0969,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-06-15aRagexe
#if PACKETVER == 20160615
- packet(0x0281,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0363,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0364,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0369,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x083c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0866,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0870,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x087e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0884,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0887,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0888,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0891,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0898,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x092f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x093e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0947,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0948,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x094a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x094b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0954,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0957,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0958,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0961,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
+ packet(0x0281,clif->pFriendsListAdd,2);
+ packet(0x0363,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0364,clif->pStoragePassword,0);
+ packet(0x0369,clif->pHomMenu,2,4);
+ packet(0x083c,clif->pGetCharNameRequest,2);
+ packet(0x0866,clif->pWalkToXY,2);
+ packet(0x0870,clif->pDull/*,XXX*/);
+ packet(0x087d,clif->pSolveCharName,2);
+ packet(0x087e,clif->pTakeItem,2);
+ packet(0x087f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0884,clif->pDull/*,XXX*/);
+ packet(0x0887,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0888,clif->pUseSkillToId,2,4,6);
+ packet(0x088a,clif->pTickSend,2);
+ packet(0x088d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0891,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0898,clif->pDropItem,2,4);
+ packet(0x092f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x093e,clif->pPartyInvite2,2);
+ packet(0x0947,clif->pReqCloseBuyingStore,0);
+ packet(0x0948,clif->pActionRequest,2,6);
+ packet(0x094a,clif->pReqClickBuyingStore,2);
+ packet(0x094b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0954,clif->pChangeDir,2,4);
+ packet(0x0957,clif->pMoveToKafra,2,4);
+ packet(0x0958,clif->pMoveFromKafra,2,4);
+ packet(0x095c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x095e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0961,clif->pSearchStoreInfoListItemClick,2,6,10);
#endif
// 2016-06-22aRagexe
#if PACKETVER == 20160622
- packet(0x023b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x035f,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0361,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x07e4,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0861,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0865,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0867,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0880,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0887,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0890,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0891,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0892,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x089a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x089e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a2,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a8,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x092f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0936,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0937,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x093b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x093f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0946,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0959,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0965,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0969,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
+ packet(0x023b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x035f,clif->pMoveFromKafra,2,4);
+ packet(0x0361,clif->pPartyInvite2,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x07e4,clif->pHomMenu,2,4);
+ packet(0x0861,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0865,clif->pDull/*,XXX*/);
+ packet(0x0867,clif->pDull/*,XXX*/);
+ packet(0x0880,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0887,clif->pReqCloseBuyingStore,0);
+ packet(0x0890,clif->pFriendsListAdd,2);
+ packet(0x0891,clif->pReqClickBuyingStore,2);
+ packet(0x0892,clif->pSearchStoreInfoNextPage,0);
+ packet(0x089a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x089e,clif->pActionRequest,2,6);
+ packet(0x08a2,clif->pSolveCharName,2);
+ packet(0x08a8,clif->pStoragePassword,0);
+ packet(0x091c,clif->pTakeItem,2);
+ packet(0x092d,clif->pTickSend,2);
+ packet(0x092f,clif->pUseSkillToId,2,4,6);
+ packet(0x0936,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0937,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x093b,clif->pMoveToKafra,2,4);
+ packet(0x093f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0946,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0959,clif->pGetCharNameRequest,2);
+ packet(0x0965,clif->pChangeDir,2,4);
+ packet(0x0969,clif->pDropItem,2,4);
#endif
// 2016-06-29aRagexe, 2016-06-30aRagexe
#if PACKETVER == 20160629 || \
PACKETVER == 20160630
- packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x022d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x035f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0363,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0368,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x085c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x085e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0860,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0861,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0863,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0867,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x086b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0881,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0885,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0893,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x091e,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0922,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0925,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0926,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x093e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0946,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0948,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x094a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0957,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x095a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0968,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0969,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x096a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x022d,clif->pWalkToXY,2);
+ packet(0x035f,clif->pDull/*,XXX*/);
+ packet(0x0363,clif->pReqClickBuyingStore,2);
+ packet(0x0368,clif->pItemListWindowSelected,2,4,8);
+ packet(0x085c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x085e,clif->pDull/*,XXX*/);
+ packet(0x0860,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0861,clif->pDropItem,2,4);
+ packet(0x0863,clif->pSolveCharName,2);
+ packet(0x0867,clif->pStoragePassword,0);
+ packet(0x086b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0881,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0885,clif->pHomMenu,2,4);
+ packet(0x088e,clif->pGetCharNameRequest,2);
+ packet(0x0893,clif->pTickSend,2);
+ packet(0x091e,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0922,clif->pMoveFromKafra,2,4);
+ packet(0x0925,clif->pUseSkillToId,2,4,6);
+ packet(0x0926,clif->pPartyInvite2,2);
+ packet(0x093e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0946,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0948,clif->pChangeDir,2,4);
+ packet(0x094a,clif->pFriendsListAdd,2);
+ packet(0x0957,clif->pReqCloseBuyingStore,0);
+ packet(0x095a,clif->pActionRequest,2,6);
+ packet(0x0968,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0969,clif->pTakeItem,2);
+ packet(0x096a,clif->pMoveToKafra,2,4);
#endif
// 2016-07-06bRagexe
#if PACKETVER == 20160706
- packet(0x0362,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0436,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0860,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0869,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x086b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0884,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0886,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0889,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0892,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0899,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a4,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a5,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a8,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0918,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x091b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0924,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0926,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0927,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0929,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0939,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x093d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0944,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0945,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x094c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0952,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0957,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0958,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x0362,clif->pSolveCharName,2);
+ packet(0x0436,clif->pReqClickBuyingStore,2);
+ packet(0x085f,clif->pPartyInvite2,2);
+ packet(0x0860,clif->pActionRequest,2,6);
+ packet(0x0869,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x086b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0884,clif->pFriendsListAdd,2);
+ packet(0x0886,clif->pDull/*,XXX*/);
+ packet(0x0889,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0892,clif->pHomMenu,2,4);
+ packet(0x0899,clif->pUseSkillToId,2,4,6);
+ packet(0x08a4,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a5,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a8,clif->pTickSend,2);
+ packet(0x0918,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x091b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0924,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0926,clif->pChangeDir,2,4);
+ packet(0x0927,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0929,clif->pMoveFromKafra,2,4);
+ packet(0x092d,clif->pWalkToXY,2);
+ packet(0x0939,clif->pMoveToKafra,2,4);
+ packet(0x093d,clif->pDropItem,2,4);
+ packet(0x0944,clif->pDull/*,XXX*/);
+ packet(0x0945,clif->pGetCharNameRequest,2);
+ packet(0x094c,clif->pStoragePassword,0);
+ packet(0x0952,clif->pReqCloseBuyingStore,0);
+ packet(0x0957,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0958,clif->pTakeItem,2);
#endif
// 2016-07-13aRagexe, 2016-07-13bRagexe, 2016-07-13cRagexe, 2016-07-13dRagexe
#if PACKETVER == 20160713
- packet(0x022d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0363,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0364,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0838,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0860,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0865,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0869,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0875,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0877,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x087b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0883,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0892,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x089a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a2,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a4,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x091c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x091d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0921,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0922,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x092c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0931,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0939,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0944,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0945,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0947,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0957,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x095b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x022d,clif->pStoragePassword,0);
+ packet(0x0363,clif->pChangeDir,2,4);
+ packet(0x0364,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0838,clif->pTakeItem,2);
+ packet(0x0860,clif->pReqClickBuyingStore,2);
+ packet(0x0865,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0869,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0875,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0877,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x087b,clif->pTickSend,2);
+ packet(0x0883,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0892,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x089a,clif->pPartyInvite2,2);
+ packet(0x089f,clif->pDull/*,XXX*/);
+ packet(0x08a2,clif->pMoveFromKafra,2,4);
+ packet(0x08a4,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x091c,clif->pWalkToXY,2);
+ packet(0x091d,clif->pSolveCharName,2);
+ packet(0x0921,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0922,clif->pHomMenu,2,4);
+ packet(0x092c,clif->pGetCharNameRequest,2);
+ packet(0x0931,clif->pUseSkillToId,2,4,6);
+ packet(0x0939,clif->pFriendsListAdd,2);
+ packet(0x0944,clif->pReqCloseBuyingStore,0);
+ packet(0x0945,clif->pActionRequest,2,6);
+ packet(0x0947,clif->pMoveToKafra,2,4);
+ packet(0x0957,clif->pDropItem,2,4);
+ packet(0x095b,clif->pDull/*,XXX*/);
#endif
// 2016-07-20aRagexe, 2016-07-20bRagexe
#if PACKETVER == 20160720
- packet(0x0362,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0363,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0365,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x07e4,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0838,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x086a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x086d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x087f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0883,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0887,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0897,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x089a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x089e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a0,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08aa,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0917,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x091c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x093b,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x093e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0946,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x094d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0953,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x095b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0960,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0969,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
+ packet(0x0362,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0363,clif->pUseSkillToId,2,4,6);
+ packet(0x0365,clif->pActionRequest,2,6);
+ packet(0x07e4,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0838,clif->pWalkToXY,2);
+ packet(0x085b,clif->pReqCloseBuyingStore,0);
+ packet(0x086a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x086d,clif->pReqClickBuyingStore,2);
+ packet(0x087f,clif->pDropItem,2,4);
+ packet(0x0883,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0887,clif->pGetCharNameRequest,2);
+ packet(0x0897,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x089a,clif->pStoragePassword,0);
+ packet(0x089c,clif->pHomMenu,2,4);
+ packet(0x089e,clif->pMoveFromKafra,2,4);
+ packet(0x08a0,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08aa,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0917,clif->pDull/*,XXX*/);
+ packet(0x091c,clif->pTakeItem,2);
+ packet(0x092a,clif->pFriendsListAdd,2);
+ packet(0x093b,clif->pChangeDir,2,4);
+ packet(0x093e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0946,clif->pTickSend,2);
+ packet(0x094d,clif->pSolveCharName,2);
+ packet(0x0953,clif->pDull/*,XXX*/);
+ packet(0x095b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0960,clif->pMoveToKafra,2,4);
+ packet(0x0969,clif->pPartyInvite2,2);
#endif
// 2016-07-27aRagexe, 2016-07-27bRagexe
#if PACKETVER == 20160727
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x023b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0362,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0363,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0436,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0438,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x07ec,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0866,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0868,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0869,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0874,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0877,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0883,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0887,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0891,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x089f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a2,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a4,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a7,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0936,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0941,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0946,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0949,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0951,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x095f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0966,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0969,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x023b,clif->pDull/*,XXX*/);
+ packet(0x0362,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0363,clif->pFriendsListAdd,2);
+ packet(0x0436,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0438,clif->pTickSend,2);
+ packet(0x07ec,clif->pDropItem,2,4);
+ packet(0x0866,clif->pDull/*,XXX*/);
+ packet(0x0868,clif->pPartyInvite2,2);
+ packet(0x0869,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0874,clif->pReqClickBuyingStore,2);
+ packet(0x0877,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0883,clif->pActionRequest,2,6);
+ packet(0x0887,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088e,clif->pUseSkillToId,2,4,6);
+ packet(0x0891,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x089f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a2,clif->pStoragePassword,0);
+ packet(0x08a4,clif->pSolveCharName,2);
+ packet(0x08a7,clif->pTakeItem,2);
+ packet(0x092e,clif->pWalkToXY,2);
+ packet(0x0936,clif->pHomMenu,2,4);
+ packet(0x0941,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0946,clif->pGetCharNameRequest,2);
+ packet(0x0949,clif->pMoveFromKafra,2,4);
+ packet(0x0951,clif->pMoveToKafra,2,4);
+ packet(0x095f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0966,clif->pReqCloseBuyingStore,0);
+ packet(0x0969,clif->pItemListWindowSelected,2,4,8);
#endif
// 2016-08-03bRagexe
#if PACKETVER == 20160803
- packet(0x0364,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x085d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0878,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0881,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0886,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0887,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0888,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x088b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0891,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0895,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089e,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x08a1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x091b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0929,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0930,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0932,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0934,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0937,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x093a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093e,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x093f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0952,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0955,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0956,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0959,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x095a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
+ packet(0x0364,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x085d,clif->pReqClickBuyingStore,2);
+ packet(0x0878,clif->pDull/*,XXX*/);
+ packet(0x087f,clif->pWalkToXY,2);
+ packet(0x0881,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0886,clif->pMoveToKafra,2,4);
+ packet(0x0887,clif->pGetCharNameRequest,2);
+ packet(0x0888,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x088b,clif->pReqCloseBuyingStore,0);
+ packet(0x0891,clif->pChangeDir,2,4);
+ packet(0x0895,clif->pFriendsListAdd,2);
+ packet(0x089c,clif->pDropItem,2,4);
+ packet(0x089e,clif->pSearchStoreInfoNextPage,0);
+ packet(0x08a1,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x091b,clif->pTakeItem,2);
+ packet(0x0929,clif->pStoragePassword,0);
+ packet(0x0930,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0932,clif->pUseSkillToId,2,4,6);
+ packet(0x0934,clif->pActionRequest,2,6);
+ packet(0x0937,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x093a,clif->pDull/*,XXX*/);
+ packet(0x093e,clif->pTickSend,2);
+ packet(0x093f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0952,clif->pHomMenu,2,4);
+ packet(0x0955,clif->pMoveFromKafra,2,4);
+ packet(0x0956,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0959,clif->pSolveCharName,2);
+ packet(0x095a,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pReqTradeBuyingStore,2,4,8,12);
#endif
// 2016-08-10aRagexe
#if PACKETVER == 20160810
- packet(0x0361,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0819,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0838,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x085d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x085e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x085f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0860,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x086f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0875,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0879,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x087a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0885,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0888,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0890,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x089d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x089f,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a9,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x091c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0926,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092b,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x092d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0935,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0943,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x094b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0959,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x095b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0967,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x0361,clif->pStoragePassword,0);
+ packet(0x0819,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0838,clif->pPartyInvite2,2);
+ packet(0x085d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x085e,clif->pDropItem,2,4);
+ packet(0x085f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0860,clif->pSolveCharName,2);
+ packet(0x086f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0875,clif->pHomMenu,2,4);
+ packet(0x0879,clif->pReqClickBuyingStore,2);
+ packet(0x087a,clif->pWalkToXY,2);
+ packet(0x0885,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0888,clif->pFriendsListAdd,2);
+ packet(0x0890,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x089d,clif->pChangeDir,2,4);
+ packet(0x089f,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a9,clif->pMoveToKafra,2,4);
+ packet(0x091a,clif->pTakeItem,2);
+ packet(0x091b,clif->pGetCharNameRequest,2);
+ packet(0x091c,clif->pUseSkillToId,2,4,6);
+ packet(0x0926,clif->pDull/*,XXX*/);
+ packet(0x092b,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x092d,clif->pMoveFromKafra,2,4);
+ packet(0x0935,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0943,clif->pTickSend,2);
+ packet(0x094b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0959,clif->pReqCloseBuyingStore,0);
+ packet(0x095b,clif->pActionRequest,2,6);
+ packet(0x0967,clif->pDull/*,XXX*/);
#endif
// 2016-08-17aRagexe
#if PACKETVER == 20160817
- packet(0x0364,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0437,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x07e4,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0811,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0819,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x083c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x085c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0867,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x086b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0875,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x087f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0886,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0891,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x089c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08a5,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a6,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a9,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x08ab,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08ac,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08ad,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0929,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x092d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0930,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0939,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0957,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0960,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0963,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x0364,clif->pReqClickBuyingStore,2);
+ packet(0x0437,clif->pFriendsListAdd,2);
+ packet(0x07e4,clif->pGetCharNameRequest,2);
+ packet(0x0811,clif->pDull/*,XXX*/);
+ packet(0x0819,clif->pTickSend,2);
+ packet(0x083c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x085c,clif->pTakeItem,2);
+ packet(0x0867,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x086b,clif->pSolveCharName,2);
+ packet(0x0875,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x087f,clif->pDropItem,2,4);
+ packet(0x0886,clif->pActionRequest,2,6);
+ packet(0x0891,clif->pUseSkillToId,2,4,6);
+ packet(0x089c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08a5,clif->pStoragePassword,0);
+ packet(0x08a6,clif->pPartyInvite2,2);
+ packet(0x08a9,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x08ab,clif->pHomMenu,2,4);
+ packet(0x08ac,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08ad,clif->pMoveToKafra,2,4);
+ packet(0x091b,clif->pReqCloseBuyingStore,0);
+ packet(0x0929,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x092d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0930,clif->pWalkToXY,2);
+ packet(0x0939,clif->pMoveFromKafra,2,4);
+ packet(0x093c,clif->pDull/*,XXX*/);
+ packet(0x0957,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0960,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0963,clif->pChangeDir,2,4);
#endif
// 2016-08-24aRagexe
#if PACKETVER == 20160824
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0934,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0934,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-08-31aRagexe, 2016-08-31bRagexe
#if PACKETVER == 20160831
- packet(0x022d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0366,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x07ec,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0835,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0865,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x086d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0870,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0874,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0876,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0878,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x087c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08a8,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08a9,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0917,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0938,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x093a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0946,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x094a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x094f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0950,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0954,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0957,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x095e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0960,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0964,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0967,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
+ packet(0x022d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0366,clif->pDropItem,2,4);
+ packet(0x07ec,clif->pReqClickBuyingStore,2);
+ packet(0x0835,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0865,clif->pWalkToXY,2);
+ packet(0x086d,clif->pReqCloseBuyingStore,0);
+ packet(0x0870,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0874,clif->pPartyInvite2,2);
+ packet(0x0876,clif->pDull/*,XXX*/);
+ packet(0x0878,clif->pActionRequest,2,6);
+ packet(0x087c,clif->pGetCharNameRequest,2);
+ packet(0x08a8,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08a9,clif->pTickSend,2);
+ packet(0x0917,clif->pStoragePassword,0);
+ packet(0x091b,clif->pDull/*,XXX*/);
+ packet(0x092c,clif->pFriendsListAdd,2);
+ packet(0x092e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0938,clif->pSearchStoreInfoNextPage,0);
+ packet(0x093a,clif->pHomMenu,2,4);
+ packet(0x0946,clif->pSolveCharName,2);
+ packet(0x094a,clif->pChangeDir,2,4);
+ packet(0x094f,clif->pMoveToKafra,2,4);
+ packet(0x0950,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0954,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0957,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x095e,clif->pMoveFromKafra,2,4);
+ packet(0x0960,clif->pTakeItem,2);
+ packet(0x0964,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0967,clif->pUseSkillToId,2,4,6);
#endif
// 2016-09-07aRagexe
#if PACKETVER == 20160907
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x091c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x091c,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-09-13aRagexe
#if PACKETVER == 20160913
- packet(0x0361,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0817,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x085b,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0865,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0874,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0875,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0879,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x087a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0887,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0889,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x088e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0891,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0892,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x089c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0928,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0935,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x093a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0949,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x094a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0950,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0952,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0954,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0962,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0963,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0968,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
+ packet(0x0361,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0817,clif->pMoveToKafra,2,4);
+ packet(0x085b,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0865,clif->pGetCharNameRequest,2);
+ packet(0x0874,clif->pReqClickBuyingStore,2);
+ packet(0x0875,clif->pTickSend,2);
+ packet(0x0879,clif->pDropItem,2,4);
+ packet(0x087a,clif->pDull/*,XXX*/);
+ packet(0x087b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0887,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0889,clif->pTakeItem,2);
+ packet(0x088e,clif->pUseSkillToId,2,4,6);
+ packet(0x088f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0891,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0892,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089b,clif->pMoveFromKafra,2,4);
+ packet(0x089c,clif->pStoragePassword,0);
+ packet(0x08a5,clif->pChangeDir,2,4);
+ packet(0x0928,clif->pFriendsListAdd,2);
+ packet(0x0935,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x093a,clif->pHomMenu,2,4);
+ packet(0x0949,clif->pPartyInvite2,2);
+ packet(0x094a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0950,clif->pActionRequest,2,6);
+ packet(0x0952,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0954,clif->pWalkToXY,2);
+ packet(0x0962,clif->pDull/*,XXX*/);
+ packet(0x0963,clif->pSolveCharName,2);
+ packet(0x0968,clif->pReqCloseBuyingStore,0);
#endif
// 2016-09-21aRagexe
#if PACKETVER == 20160921
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x094a,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-09-28cRagexe
#if PACKETVER == 20160928
- packet(0x0202,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0366,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0436,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0811,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0838,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0864,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0866,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x086d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0872,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0878,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0889,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0897,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x089a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a2,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a9,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0919,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x091e,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0927,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x092d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0944,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x094d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0953,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0955,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0957,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x0202,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pGetCharNameRequest,2);
+ packet(0x0366,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0436,clif->pReqClickBuyingStore,2);
+ packet(0x0811,clif->pDull/*,XXX*/);
+ packet(0x0838,clif->pPartyInvite2,2);
+ packet(0x0864,clif->pMoveFromKafra,2,4);
+ packet(0x0866,clif->pSearchStoreInfoNextPage,0);
+ packet(0x086d,clif->pDropItem,2,4);
+ packet(0x0872,clif->pHomMenu,2,4);
+ packet(0x0878,clif->pSolveCharName,2);
+ packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0889,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0897,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x089a,clif->pActionRequest,2,6);
+ packet(0x08a2,clif->pStoragePassword,0);
+ packet(0x08a9,clif->pMoveToKafra,2,4);
+ packet(0x0919,clif->pWalkToXY,2);
+ packet(0x091e,clif->pTickSend,2);
+ packet(0x0927,clif->pUseSkillToId,2,4,6);
+ packet(0x092d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0944,clif->pChangeDir,2,4);
+ packet(0x094d,clif->pReqCloseBuyingStore,0);
+ packet(0x094e,clif->pFriendsListAdd,2);
+ packet(0x0953,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0955,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0957,clif->pTakeItem,2);
+ packet(0x095a,clif->pDull/*,XXX*/);
#endif
// 2016-10-05aRagexe
#if PACKETVER == 20161005
- packet(0x0202,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0838,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0863,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0886,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0891,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0892,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x089b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a0,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08ac,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08ad,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0918,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0919,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x091e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x092b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0931,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0932,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x093b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0942,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0945,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x094a,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x094d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0952,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x095b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0967,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
+ packet(0x0202,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pActionRequest,2,6);
+ packet(0x0838,clif->pStoragePassword,0);
+ packet(0x0863,clif->pGetCharNameRequest,2);
+ packet(0x0886,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088e,clif->pMoveFromKafra,2,4);
+ packet(0x0891,clif->pChangeDir,2,4);
+ packet(0x0892,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x089b,clif->pPartyInvite2,2);
+ packet(0x089c,clif->pTakeItem,2);
+ packet(0x08a0,clif->pMoveToKafra,2,4);
+ packet(0x08ac,clif->pReqCloseBuyingStore,0);
+ packet(0x08ad,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0918,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0919,clif->pSolveCharName,2);
+ packet(0x091e,clif->pDull/*,XXX*/);
+ packet(0x092b,clif->pTickSend,2);
+ packet(0x0931,clif->pFriendsListAdd,2);
+ packet(0x0932,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x093b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0942,clif->pDropItem,2,4);
+ packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0945,clif->pWalkToXY,2);
+ packet(0x094a,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x094d,clif->pHomMenu,2,4);
+ packet(0x0952,clif->pDull/*,XXX*/);
+ packet(0x095a,clif->pReqClickBuyingStore,2);
+ packet(0x095b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0967,clif->pUseSkillToId,2,4,6);
#endif
// 2016-10-12aRagexe
#if PACKETVER == 20161012
- packet(0x023b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0364,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0365,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0369,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x07ec,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0819,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x085b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x085e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0863,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0868,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0872,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0875,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0880,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0893,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a0,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0936,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0937,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0939,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0943,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0944,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x094f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0951,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x095c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0962,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0966,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0967,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x023b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0364,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0365,clif->pTickSend,2);
+ packet(0x0369,clif->pPartyInvite2,2);
+ packet(0x07ec,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0819,clif->pFriendsListAdd,2);
+ packet(0x085b,clif->pDull/*,XXX*/);
+ packet(0x085e,clif->pReqCloseBuyingStore,0);
+ packet(0x0863,clif->pActionRequest,2,6);
+ packet(0x0868,clif->pTakeItem,2);
+ packet(0x086d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0872,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0875,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0880,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0893,clif->pMoveToKafra,2,4);
+ packet(0x08a0,clif->pChangeDir,2,4);
+ packet(0x092d,clif->pSolveCharName,2);
+ packet(0x0936,clif->pGetCharNameRequest,2);
+ packet(0x0937,clif->pReqClickBuyingStore,2);
+ packet(0x0939,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0943,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0944,clif->pMoveFromKafra,2,4);
+ packet(0x094f,clif->pDull/*,XXX*/);
+ packet(0x0951,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x095c,clif->pHomMenu,2,4);
+ packet(0x0962,clif->pUseSkillToId,2,4,6);
+ packet(0x0966,clif->pWalkToXY,2);
+ packet(0x0967,clif->pStoragePassword,0);
#endif
// 2016-10-19aRagexe
#if PACKETVER == 20161019
- packet(0x022d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0361,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0889,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0892,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0946,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0963,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pReqClickBuyingStore,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pHomMenu,2,4);
+ packet(0x0361,clif->pWalkToXY,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pChangeDir,2,4);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0889,clif->pStoragePassword,0);
+ packet(0x0892,clif->pDull/*,XXX*/);
+ packet(0x0946,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0963,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-10-26bRagexe, 2016-10-26cRagexe
#if PACKETVER == 20161026
- packet(0x0363,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0438,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0802,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x085f,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0861,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0862,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x086a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x086c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x086e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087a,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x087c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0886,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0891,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0894,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0898,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x091b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0926,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x092c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x092e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x092f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0930,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x094b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0953,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x095c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0962,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x0363,clif->pStoragePassword,0);
+ packet(0x0438,clif->pWalkToXY,2);
+ packet(0x0802,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x085a,clif->pMoveToKafra,2,4);
+ packet(0x085f,clif->pActionRequest,2,6);
+ packet(0x0861,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0862,clif->pTickSend,2);
+ packet(0x086a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x086c,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x086e,clif->pDull/*,XXX*/);
+ packet(0x087a,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x087c,clif->pDull/*,XXX*/);
+ packet(0x087f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0886,clif->pDropItem,2,4);
+ packet(0x0891,clif->pReqClickBuyingStore,2);
+ packet(0x0894,clif->pUseSkillToId,2,4,6);
+ packet(0x0898,clif->pFriendsListAdd,2);
+ packet(0x091a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x091b,clif->pTakeItem,2);
+ packet(0x0926,clif->pSolveCharName,2);
+ packet(0x092c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x092e,clif->pHomMenu,2,4);
+ packet(0x092f,clif->pReqCloseBuyingStore,0);
+ packet(0x0930,clif->pGetCharNameRequest,2);
+ packet(0x094b,clif->pMoveFromKafra,2,4);
+ packet(0x0953,clif->pPartyInvite2,2);
+ packet(0x095c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0962,clif->pChangeDir,2,4);
#endif
// 2016-11-02aRagexe, 2016-11-03aRagexe
#if PACKETVER == 20161102 || \
PACKETVER == 20161103
- packet(0x0361,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0367,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0436,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0802,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0838,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x083c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0869,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x086c,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x086f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0874,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0886,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x088f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0890,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a2,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08aa,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x091b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0922,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0925,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0928,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092f,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0936,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0946,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0949,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x095e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0964,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0965,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0966,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
+ packet(0x0361,clif->pMoveFromKafra,2,4);
+ packet(0x0367,clif->pDull/*,XXX*/);
+ packet(0x0436,clif->pActionRequest,2,6);
+ packet(0x0802,clif->pTakeItem,2);
+ packet(0x0838,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x083c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x085f,clif->pUseSkillToId,2,4,6);
+ packet(0x0869,clif->pMoveToKafra,2,4);
+ packet(0x086c,clif->pSearchStoreInfoNextPage,0);
+ packet(0x086f,clif->pDull/*,XXX*/);
+ packet(0x0874,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0886,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x088f,clif->pHomMenu,2,4);
+ packet(0x0890,clif->pDropItem,2,4);
+ packet(0x089f,clif->pPartyInvite2,2);
+ packet(0x08a2,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08aa,clif->pWalkToXY,2);
+ packet(0x091b,clif->pStoragePassword,0);
+ packet(0x0922,clif->pReqClickBuyingStore,2);
+ packet(0x0925,clif->pSolveCharName,2);
+ packet(0x0928,clif->pFriendsListAdd,2);
+ packet(0x092f,clif->pGetCharNameRequest,2);
+ packet(0x0936,clif->pReqCloseBuyingStore,0);
+ packet(0x0946,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0949,clif->pChangeDir,2,4);
+ packet(0x095e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0964,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0965,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0966,clif->pTickSend,2);
#endif
// 2016-11-09aRagexe, 2016-11-09bRagexe
#if PACKETVER == 20161109
- packet(0x02c4,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0361,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0362,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0366,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x085d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x085e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0865,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x086a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x086d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0870,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0876,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x087a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0881,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x088e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0891,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0898,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x089a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089d,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x089f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a7,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08ad,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0927,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0937,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x093c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093f,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0954,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0956,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x02c4,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0361,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0362,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pTickSend,2);
+ packet(0x0366,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSolveCharName,2);
+ packet(0x085d,clif->pReqCloseBuyingStore,0);
+ packet(0x085e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0865,clif->pWalkToXY,2);
+ packet(0x086a,clif->pActionRequest,2,6);
+ packet(0x086d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0870,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0876,clif->pReqClickBuyingStore,2);
+ packet(0x087a,clif->pDull/*,XXX*/);
+ packet(0x0881,clif->pMoveToKafra,2,4);
+ packet(0x088e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0891,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0898,clif->pTakeItem,2);
+ packet(0x089a,clif->pDropItem,2,4);
+ packet(0x089d,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x089f,clif->pDull/*,XXX*/);
+ packet(0x08a7,clif->pHomMenu,2,4);
+ packet(0x08ad,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0927,clif->pPartyInvite2,2);
+ packet(0x0937,clif->pFriendsListAdd,2);
+ packet(0x093c,clif->pStoragePassword,0);
+ packet(0x093f,clif->pGetCharNameRequest,2);
+ packet(0x0954,clif->pUseSkillToId,2,4,6);
+ packet(0x0956,clif->pChangeDir,2,4);
#endif
// 2016-11-16aRagexe
#if PACKETVER == 20161116
- packet(0x0368,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0369,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0835,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x085f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0864,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x086f,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0885,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x088f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0890,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0892,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0893,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a1,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a2,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08ac,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0920,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0925,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x092a,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0931,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x093c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x094a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0952,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0957,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x095b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0967,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x0368,clif->pTickSend,2);
+ packet(0x0369,clif->pMoveToKafra,2,4);
+ packet(0x0835,clif->pFriendsListAdd,2);
+ packet(0x085f,clif->pDropItem,2,4);
+ packet(0x0864,clif->pPartyInvite2,2);
+ packet(0x086f,clif->pTakeItem,2);
+ packet(0x0885,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088b,clif->pHomMenu,2,4);
+ packet(0x088d,clif->pReqClickBuyingStore,2);
+ packet(0x088f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0890,clif->pWalkToXY,2);
+ packet(0x0892,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0893,clif->pActionRequest,2,6);
+ packet(0x08a1,clif->pChangeDir,2,4);
+ packet(0x08a2,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08ac,clif->pMoveFromKafra,2,4);
+ packet(0x0920,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0925,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x092a,clif->pUseSkillToId,2,4,6);
+ packet(0x0931,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x093c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x094a,clif->pGetCharNameRequest,2);
+ packet(0x0952,clif->pReqCloseBuyingStore,0);
+ packet(0x0957,clif->pSolveCharName,2);
+ packet(0x095b,clif->pStoragePassword,0);
+ packet(0x095d,clif->pDull/*,XXX*/);
+ packet(0x095f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0967,clif->pDull/*,XXX*/);
#endif
// 2016-11-23aRagexe
#if PACKETVER == 20161123
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0362,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0437,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0861,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0862,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0866,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x086f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0871,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0880,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0882,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x088b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a9,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x091a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0926,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x092f,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0930,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0941,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x094d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x095a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x095b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0962,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x096a,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0362,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0437,clif->pTickSend,2);
+ packet(0x085c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0861,clif->pWalkToXY,2);
+ packet(0x0862,clif->pReqCloseBuyingStore,0);
+ packet(0x0866,clif->pSearchStoreInfoNextPage,0);
+ packet(0x086f,clif->pDropItem,2,4);
+ packet(0x0871,clif->pDull/*,XXX*/);
+ packet(0x087f,clif->pPartyInvite2,2);
+ packet(0x0880,clif->pStoragePassword,0);
+ packet(0x0882,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x088b,clif->pGetCharNameRequest,2);
+ packet(0x089c,clif->pChangeDir,2,4);
+ packet(0x08a9,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x091a,clif->pMoveToKafra,2,4);
+ packet(0x0926,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092a,clif->pReqClickBuyingStore,2);
+ packet(0x092f,clif->pTakeItem,2);
+ packet(0x0930,clif->pHomMenu,2,4);
+ packet(0x0941,clif->pFriendsListAdd,2);
+ packet(0x094d,clif->pUseSkillToId,2,4,6);
+ packet(0x094f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x095a,clif->pDull/*,XXX*/);
+ packet(0x095b,clif->pActionRequest,2,6);
+ packet(0x0962,clif->pMoveFromKafra,2,4);
+ packet(0x096a,clif->pSolveCharName,2);
#endif
// 2016-11-30aRagexe, 2016-11-30bRagexe
#if PACKETVER == 20161130
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0931,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0943,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0954,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0959,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pChangeDir,2,4);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pTickSend,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x088f,clif->pDull/*,XXX*/);
+ packet(0x0931,clif->pHomMenu,2,4);
+ packet(0x0943,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0954,clif->pStoragePassword,0);
+ packet(0x0959,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-12-07cRagexe, 2016-12-07eRagexe
#if PACKETVER == 20161207
- packet(0x023b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0867,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0868,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0875,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0886,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a1,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a2,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08ad,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0918,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0943,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0965,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pHomMenu,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0867,clif->pFriendsListAdd,2);
+ packet(0x0868,clif->pDull/*,XXX*/);
+ packet(0x0875,clif->pMoveToKafra,2,4);
+ packet(0x087e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0886,clif->pActionRequest,2,6);
+ packet(0x08a1,clif->pChangeDir,2,4);
+ packet(0x08a2,clif->pTakeItem,2);
+ packet(0x08ad,clif->pDropItem,2,4);
+ packet(0x0918,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091d,clif->pMoveFromKafra,2,4);
+ packet(0x0943,clif->pDull/*,XXX*/);
+ packet(0x095d,clif->pStoragePassword,0);
+ packet(0x0965,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-12-14bRagexe, 2016-12-14cRagexe
#if PACKETVER == 20161214
- packet(0x022d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0281,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x02c4,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0364,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0436,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0862,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x086d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0887,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0895,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0899,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a6,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x092e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x093d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pReqClickBuyingStore,2);
+ packet(0x0281,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x02c4,clif->pMoveFromKafra,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pHomMenu,2,4);
+ packet(0x0364,clif->pMoveToKafra,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0436,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pDull/*,XXX*/);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0862,clif->pFriendsListAdd,2);
+ packet(0x086d,clif->pPartyInvite2,2);
+ packet(0x0887,clif->pDropItem,2,4);
+ packet(0x0895,clif->pDull/*,XXX*/);
+ packet(0x0899,clif->pStoragePassword,0);
+ packet(0x08a6,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x092e,clif->pTakeItem,2);
+ packet(0x093d,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-12-21aRagexe, 2016-12-21bRagexe
#if PACKETVER == 20161221
- packet(0x035f,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0366,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0438,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0817,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x085b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0866,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0876,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0881,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0884,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0885,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0890,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0899,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x089b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08aa,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x091e,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0926,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0928,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x092e,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0930,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0943,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0946,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x094b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x095a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0964,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0965,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x035f,clif->pTakeItem,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0366,clif->pSolveCharName,2);
+ packet(0x0438,clif->pWalkToXY,2);
+ packet(0x0817,clif->pMoveToKafra,2,4);
+ packet(0x085b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0866,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0876,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0881,clif->pGetCharNameRequest,2);
+ packet(0x0884,clif->pDull/*,XXX*/);
+ packet(0x0885,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0890,clif->pStoragePassword,0);
+ packet(0x0899,clif->pDull/*,XXX*/);
+ packet(0x089a,clif->pMoveFromKafra,2,4);
+ packet(0x089b,clif->pActionRequest,2,6);
+ packet(0x08aa,clif->pTickSend,2);
+ packet(0x091e,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0926,clif->pPartyInvite2,2);
+ packet(0x0928,clif->pFriendsListAdd,2);
+ packet(0x092c,clif->pReqCloseBuyingStore,0);
+ packet(0x092e,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0930,clif->pHomMenu,2,4);
+ packet(0x0943,clif->pUseSkillToId,2,4,6);
+ packet(0x0946,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x094b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x095a,clif->pReqClickBuyingStore,2);
+ packet(0x0964,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0965,clif->pChangeDir,2,4);
#endif
// 2016-12-28aRagexe
#if PACKETVER == 20161228
- packet(0x0362,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x085a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0865,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x086a,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x086c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0870,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0871,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0875,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0886,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0889,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0893,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a2,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a3,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a5,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08ab,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08ac,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08ad,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0929,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x092c,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0934,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0935,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0938,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x093d,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0944,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
+ packet(0x0362,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x085a,clif->pGetCharNameRequest,2);
+ packet(0x085e,clif->pHomMenu,2,4);
+ packet(0x0865,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x086a,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x086c,clif->pTakeItem,2);
+ packet(0x086d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0870,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0871,clif->pChangeDir,2,4);
+ packet(0x0875,clif->pReqCloseBuyingStore,0);
+ packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0886,clif->pWalkToXY,2);
+ packet(0x0889,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0893,clif->pDropItem,2,4);
+ packet(0x089f,clif->pMoveToKafra,2,4);
+ packet(0x08a2,clif->pUseSkillToId,2,4,6);
+ packet(0x08a3,clif->pReqClickBuyingStore,2);
+ packet(0x08a5,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08ab,clif->pMoveFromKafra,2,4);
+ packet(0x08ac,clif->pSolveCharName,2);
+ packet(0x08ad,clif->pStoragePassword,0);
+ packet(0x091c,clif->pFriendsListAdd,2);
+ packet(0x0929,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x092c,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0934,clif->pPartyInvite2,2);
+ packet(0x0935,clif->pDull/*,XXX*/);
+ packet(0x0938,clif->pDull/*,XXX*/);
+ packet(0x093d,clif->pActionRequest,2,6);
+ packet(0x0944,clif->pTickSend,2);
#endif
// 2017-01-04aRagexe
#if PACKETVER == 20170104
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x085a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x087f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0896,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x085a,clif->pFriendsListAdd,2);
+ packet(0x087f,clif->pStoragePassword,0);
+ packet(0x0896,clif->pChangeDir,2,4);
+ packet(0x091b,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pUseSkillToId,2,4,6);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-01-11aRagexe
#if PACKETVER == 20170111
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0877,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x087f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a1,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a3,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a6,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0940,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x094c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0961,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0969,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085d,clif->pHomMenu,2,4);
+ packet(0x0877,clif->pFriendsListAdd,2);
+ packet(0x087f,clif->pDull/*,XXX*/);
+ packet(0x088a,clif->pMoveToKafra,2,4);
+ packet(0x08a1,clif->pChangeDir,2,4);
+ packet(0x08a3,clif->pTakeItem,2);
+ packet(0x08a6,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091a,clif->pStoragePassword,0);
+ packet(0x091b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0940,clif->pDropItem,2,4);
+ packet(0x094c,clif->pMoveFromKafra,2,4);
+ packet(0x0961,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0969,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-01-18aRagexe
#if PACKETVER == 20170118
- packet(0x022d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0364,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0862,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0865,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x086f,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0873,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08ad,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x091f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0927,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0933,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0958,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0962,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x022d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0364,clif->pGetCharNameRequest,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pHomMenu,2,4);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0862,clif->pMoveFromKafra,2,4);
+ packet(0x0865,clif->pChangeDir,2,4);
+ packet(0x086f,clif->pTakeItem,2);
+ packet(0x0873,clif->pDull/*,XXX*/);
+ packet(0x089e,clif->pPartyInvite2,2);
+ packet(0x08ad,clif->pItemListWindowSelected,2,4,8);
+ packet(0x091f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0927,clif->pDull/*,XXX*/);
+ packet(0x0933,clif->pDropItem,2,4);
+ packet(0x0958,clif->pStoragePassword,0);
+ packet(0x0962,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pMoveToKafra,2,4);
#endif
// 2017-01-25aRagexe
#if PACKETVER == 20170125
- packet(0x0438,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0811,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x086e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0876,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0877,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0879,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0881,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0884,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0893,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0894,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0895,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0898,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08a5,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x091b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x091c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0920,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0929,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x092b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0930,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x093c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0943,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0944,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0965,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0968,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
+ packet(0x0438,clif->pActionRequest,2,6);
+ packet(0x0811,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x086e,clif->pPartyInvite2,2);
+ packet(0x0876,clif->pHomMenu,2,4);
+ packet(0x0877,clif->pDropItem,2,4);
+ packet(0x0879,clif->pUseSkillToId,2,4,6);
+ packet(0x087b,clif->pTakeItem,2);
+ packet(0x087d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0881,clif->pChangeDir,2,4);
+ packet(0x0884,clif->pDull/*,XXX*/);
+ packet(0x0893,clif->pStoragePassword,0);
+ packet(0x0894,clif->pDull/*,XXX*/);
+ packet(0x0895,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0898,clif->pSolveCharName,2);
+ packet(0x089b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08a5,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x091b,clif->pReqClickBuyingStore,2);
+ packet(0x091c,clif->pMoveToKafra,2,4);
+ packet(0x091d,clif->pReqCloseBuyingStore,0);
+ packet(0x0920,clif->pFriendsListAdd,2);
+ packet(0x0929,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x092b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0930,clif->pWalkToXY,2);
+ packet(0x093c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0943,clif->pTickSend,2);
+ packet(0x0944,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x095c,clif->pMoveFromKafra,2,4);
+ packet(0x0965,clif->pGetCharNameRequest,2);
+ packet(0x0968,clif->pSearchStoreInfoNextPage,0);
#endif
// 2017-02-01aRagexe
#if PACKETVER == 20170201
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0815,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0875,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0879,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0881,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0884,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0885,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0886,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a4,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0919,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0920,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0938,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x094c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0966,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0969,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0815,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x085e,clif->pChangeDir,2,4);
+ packet(0x0875,clif->pTakeItem,2);
+ packet(0x0879,clif->pDull/*,XXX*/);
+ packet(0x0881,clif->pMoveToKafra,2,4);
+ packet(0x0884,clif->pWalkToXY,2);
+ packet(0x0885,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0886,clif->pStoragePassword,0);
+ packet(0x088b,clif->pDropItem,2,4);
+ packet(0x08a4,clif->pDull/*,XXX*/);
+ packet(0x0919,clif->pFriendsListAdd,2);
+ packet(0x0920,clif->pPartyInvite2,2);
+ packet(0x0938,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x094c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0966,clif->pMoveFromKafra,2,4);
+ packet(0x0969,clif->pItemListWindowSelected,2,4,8);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-02-08bRagexe
#if PACKETVER == 20170208
- packet(0x02c4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0367,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0860,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0892,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a1,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08ac,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0921,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0923,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0932,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0937,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x02c4,clif->pDull/*,XXX*/);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0367,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085c,clif->pPartyInvite2,2);
+ packet(0x0860,clif->pChangeDir,2,4);
+ packet(0x087a,clif->pDull/*,XXX*/);
+ packet(0x088c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0892,clif->pFriendsListAdd,2);
+ packet(0x08a1,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08ac,clif->pMoveToKafra,2,4);
+ packet(0x0921,clif->pDropItem,2,4);
+ packet(0x0923,clif->pTakeItem,2);
+ packet(0x092d,clif->pHomMenu,2,4);
+ packet(0x0932,clif->pMoveFromKafra,2,4);
+ packet(0x0937,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-02-15aRagexe
#if PACKETVER == 20170215
- packet(0x02c4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x035f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0360,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0811,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x083c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0876,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x087c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x087d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0883,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0884,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x088b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0890,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0896,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a2,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08a8,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0925,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x092d,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0942,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x095f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0962,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0969,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
+ packet(0x02c4,clif->pStoragePassword,0);
+ packet(0x035f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0360,clif->pTickSend,2);
+ packet(0x0811,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x083c,clif->pActionRequest,2,6);
+ packet(0x085c,clif->pDropItem,2,4);
+ packet(0x0876,clif->pFriendsListAdd,2);
+ packet(0x087c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x087d,clif->pChangeDir,2,4);
+ packet(0x087e,clif->pUseSkillToId,2,4,6);
+ packet(0x0883,clif->pSolveCharName,2);
+ packet(0x0884,clif->pDull/*,XXX*/);
+ packet(0x088a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x088b,clif->pPartyInvite2,2);
+ packet(0x088c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0890,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0896,clif->pDull/*,XXX*/);
+ packet(0x089b,clif->pMoveToKafra,2,4);
+ packet(0x08a2,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08a8,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091c,clif->pReqCloseBuyingStore,0);
+ packet(0x0925,clif->pMoveFromKafra,2,4);
+ packet(0x092b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x092d,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0942,clif->pTakeItem,2);
+ packet(0x094e,clif->pGetCharNameRequest,2);
+ packet(0x095f,clif->pReqClickBuyingStore,2);
+ packet(0x0962,clif->pHomMenu,2,4);
+ packet(0x0969,clif->pWalkToXY,2);
#endif
// 2017-02-22aRagexe
#if PACKETVER == 20170222
- packet(0x0202,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0866,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0870,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0871,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0877,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0889,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0894,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a3,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a8,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0937,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0939,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0943,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0962,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pHomMenu,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085f,clif->pFriendsListAdd,2);
+ packet(0x0866,clif->pDropItem,2,4);
+ packet(0x0870,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0871,clif->pDull/*,XXX*/);
+ packet(0x0877,clif->pDull/*,XXX*/);
+ packet(0x0889,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0894,clif->pTakeItem,2);
+ packet(0x08a3,clif->pChangeDir,2,4);
+ packet(0x08a8,clif->pPartyInvite2,2);
+ packet(0x0937,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0939,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0943,clif->pStoragePassword,0);
+ packet(0x095d,clif->pMoveToKafra,2,4);
+ packet(0x0962,clif->pMoveFromKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-02-28aRagexe, 2017-02-28bRagexe
#if PACKETVER == 20170228
- packet(0x022d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0360,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0362,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0819,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x085e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0863,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0873,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0874,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0876,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0883,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0884,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0889,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0893,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089e,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a0,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a2,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a6,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a7,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x091f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x092a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0937,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x093e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0944,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0947,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0948,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0952,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0955,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x022d,clif->pDropItem,2,4);
+ packet(0x0360,clif->pActionRequest,2,6);
+ packet(0x0362,clif->pHomMenu,2,4);
+ packet(0x0819,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x085e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0863,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0873,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0874,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0876,clif->pReqCloseBuyingStore,0);
+ packet(0x0883,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0884,clif->pWalkToXY,2);
+ packet(0x0889,clif->pChangeDir,2,4);
+ packet(0x0893,clif->pGetCharNameRequest,2);
+ packet(0x089e,clif->pMoveToKafra,2,4);
+ packet(0x08a0,clif->pFriendsListAdd,2);
+ packet(0x08a2,clif->pStoragePassword,0);
+ packet(0x08a6,clif->pDull/*,XXX*/);
+ packet(0x08a7,clif->pReqClickBuyingStore,2);
+ packet(0x091f,clif->pUseSkillToId,2,4,6);
+ packet(0x092a,clif->pTakeItem,2);
+ packet(0x092e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0937,clif->pTickSend,2);
+ packet(0x093e,clif->pDull/*,XXX*/);
+ packet(0x0944,clif->pMoveFromKafra,2,4);
+ packet(0x0947,clif->pSolveCharName,2);
+ packet(0x0948,clif->pPartyInvite2,2);
+ packet(0x0952,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0955,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2017-03-08aRagexe
#if PACKETVER == 20170308
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087d,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-03-15cRagexe
#if PACKETVER == 20170315
- packet(0x02c4,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x035f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0360,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0366,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0436,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x07ec,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0863,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0872,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x087b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0884,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x088b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x088d,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0892,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x089c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08aa,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x091d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0920,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0922,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0944,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x094a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x094e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0950,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0952,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x02c4,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x035f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0360,clif->pChangeDir,2,4);
+ packet(0x0366,clif->pTakeItem,2);
+ packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0436,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x07ec,clif->pTickSend,2);
+ packet(0x085c,clif->pDull/*,XXX*/);
+ packet(0x0863,clif->pHomMenu,2,4);
+ packet(0x086a,clif->pMoveFromKafra,2,4);
+ packet(0x0872,clif->pFriendsListAdd,2);
+ packet(0x087b,clif->pPartyInvite2,2);
+ packet(0x0884,clif->pActionRequest,2,6);
+ packet(0x088b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x088d,clif->pDull/*,XXX*/);
+ packet(0x088f,clif->pWalkToXY,2);
+ packet(0x0892,clif->pUseSkillToId,2,4,6);
+ packet(0x089c,clif->pReqCloseBuyingStore,0);
+ packet(0x08aa,clif->pMoveToKafra,2,4);
+ packet(0x091a,clif->pDropItem,2,4);
+ packet(0x091b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x091d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0920,clif->pSolveCharName,2);
+ packet(0x0922,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0944,clif->pGetCharNameRequest,2);
+ packet(0x094a,clif->pReqClickBuyingStore,2);
+ packet(0x094e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0950,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0952,clif->pStoragePassword,0);
#endif
// 2017-03-22aRagexe, 2017-03-22bRagexe
#if PACKETVER == 20170322
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x091a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x091a,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-03-29bRagexe, 2017-03-29cRagexe
#if PACKETVER == 20170329
- packet(0x0281,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0363,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x087a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0888,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x08a8,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0917,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0926,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0929,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0937,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0939,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0949,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pPartyInvite2,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pHomMenu,2,4);
+ packet(0x0363,clif->pMoveToKafra,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085d,clif->pStoragePassword,0);
+ packet(0x087a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0888,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x08a8,clif->pDropItem,2,4);
+ packet(0x0917,clif->pDull/*,XXX*/);
+ packet(0x0926,clif->pChangeDir,2,4);
+ packet(0x0929,clif->pTakeItem,2);
+ packet(0x092e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0937,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0939,clif->pFriendsListAdd,2);
+ packet(0x0949,clif->pMoveFromKafra,2,4);
+ packet(0x095f,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-04-05bRagexe, 2017-04-05cRagexe
#if PACKETVER == 20170405
- packet(0x022d,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0281,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0860,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0864,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0865,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x086f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0893,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a5,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x094c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0964,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0281,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pActionRequest,2,6);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pTakeItem,2);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pHomMenu,2,4);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085f,clif->pMoveToKafra,2,4);
+ packet(0x0860,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0864,clif->pPartyInvite2,2);
+ packet(0x0865,clif->pChangeDir,2,4);
+ packet(0x086f,clif->pFriendsListAdd,2);
+ packet(0x0893,clif->pMoveFromKafra,2,4);
+ packet(0x08a5,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x094c,clif->pStoragePassword,0);
+ packet(0x094f,clif->pDull/*,XXX*/);
+ packet(0x0964,clif->pDropItem,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-04-12aRagexe
#if PACKETVER == 20170412
- packet(0x023b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0365,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0863,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0869,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x086d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0878,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0879,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0890,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0893,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0898,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x089c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a1,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x091a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0929,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x092e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0938,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0942,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0945,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0949,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x094f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0952,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0959,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x095c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x095d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x023b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0365,clif->pReqClickBuyingStore,2);
+ packet(0x0863,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0869,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x086d,clif->pMoveFromKafra,2,4);
+ packet(0x0878,clif->pWalkToXY,2);
+ packet(0x0879,clif->pDull/*,XXX*/);
+ packet(0x087b,clif->pUseSkillToId,2,4,6);
+ packet(0x088b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0890,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0893,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0898,clif->pSolveCharName,2);
+ packet(0x089a,clif->pHomMenu,2,4);
+ packet(0x089c,clif->pDropItem,2,4);
+ packet(0x08a1,clif->pActionRequest,2,6);
+ packet(0x091a,clif->pChangeDir,2,4);
+ packet(0x091e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0929,clif->pTickSend,2);
+ packet(0x092e,clif->pDull/*,XXX*/);
+ packet(0x0938,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0942,clif->pFriendsListAdd,2);
+ packet(0x0945,clif->pMoveToKafra,2,4);
+ packet(0x0949,clif->pSearchStoreInfoNextPage,0);
+ packet(0x094f,clif->pPartyInvite2,2);
+ packet(0x0952,clif->pReqCloseBuyingStore,0);
+ packet(0x0959,clif->pTakeItem,2);
+ packet(0x095b,clif->pGetCharNameRequest,2);
+ packet(0x095c,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x095d,clif->pStoragePassword,0);
#endif
// 2017-04-19aRagexe
#if PACKETVER == 20170419
- packet(0x0811,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0819,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0838,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0862,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0868,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0872,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0881,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0897,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0898,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x089d,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08aa,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0920,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0922,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0930,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0931,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0935,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x093a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x093f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0942,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x095c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0963,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0965,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
+ packet(0x0811,clif->pChangeDir,2,4);
+ packet(0x0819,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0838,clif->pGetCharNameRequest,2);
+ packet(0x085a,clif->pActionRequest,2,6);
+ packet(0x085e,clif->pWalkToXY,2);
+ packet(0x0862,clif->pPartyInvite2,2);
+ packet(0x0868,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0872,clif->pDull/*,XXX*/);
+ packet(0x0881,clif->pStoragePassword,0);
+ packet(0x088d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088f,clif->pHomMenu,2,4);
+ packet(0x0897,clif->pDropItem,2,4);
+ packet(0x0898,clif->pTickSend,2);
+ packet(0x089d,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08aa,clif->pMoveToKafra,2,4);
+ packet(0x091b,clif->pSolveCharName,2);
+ packet(0x0920,clif->pUseSkillToId,2,4,6);
+ packet(0x0922,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0930,clif->pMoveFromKafra,2,4);
+ packet(0x0931,clif->pReqCloseBuyingStore,0);
+ packet(0x0935,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x093a,clif->pFriendsListAdd,2);
+ packet(0x093f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0942,clif->pSearchStoreInfoNextPage,0);
+ packet(0x095c,clif->pTakeItem,2);
+ packet(0x095d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0963,clif->pDull/*,XXX*/);
+ packet(0x0965,clif->pReqClickBuyingStore,2);
#endif
// 2017-04-26bRagexe
#if PACKETVER == 20170426
- packet(0x0281,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0866,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0887,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0899,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x089c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a2,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0927,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0940,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0958,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0963,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pStoragePassword,0);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0866,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086f,clif->pDull/*,XXX*/);
+ packet(0x087a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0887,clif->pSolveCharName,2);
+ packet(0x0899,clif->pMoveFromKafra,2,4);
+ packet(0x089c,clif->pHomMenu,2,4);
+ packet(0x08a2,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a4,clif->pTakeItem,2);
+ packet(0x091f,clif->pDull/*,XXX*/);
+ packet(0x0927,clif->pChangeDir,2,4);
+ packet(0x0940,clif->pDropItem,2,4);
+ packet(0x0958,clif->pFriendsListAdd,2);
+ packet(0x0963,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-05-02aRagexe, 2017-05-02bRagexe
#if PACKETVER == 20170502
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0875,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0894,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x089c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x093c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0950,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0875,clif->pStoragePassword,0);
+ packet(0x0894,clif->pChangeDir,2,4);
+ packet(0x089c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x093c,clif->pFriendsListAdd,2);
+ packet(0x0950,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-05-17aRagexe
#if PACKETVER == 20170517
- packet(0x0364,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0367,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0437,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0802,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0815,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0817,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0868,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0875,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x087b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x087d,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x088d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0894,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0896,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0899,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08a2,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a8,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08aa,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091b,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0923,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x093b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0945,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0946,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0947,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0958,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0960,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0964,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x0364,clif->pDull/*,XXX*/);
+ packet(0x0367,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0437,clif->pActionRequest,2,6);
+ packet(0x0802,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0815,clif->pUseSkillToId,2,4,6);
+ packet(0x0817,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0868,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0875,clif->pSearchStoreInfoNextPage,0);
+ packet(0x087b,clif->pSolveCharName,2);
+ packet(0x087d,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088c,clif->pMoveFromKafra,2,4);
+ packet(0x088d,clif->pChangeDir,2,4);
+ packet(0x0894,clif->pGetCharNameRequest,2);
+ packet(0x0896,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0899,clif->pPartyInvite2,2);
+ packet(0x089e,clif->pDull/*,XXX*/);
+ packet(0x089f,clif->pReqCloseBuyingStore,0);
+ packet(0x08a2,clif->pTickSend,2);
+ packet(0x08a8,clif->pWalkToXY,2);
+ packet(0x08aa,clif->pMoveToKafra,2,4);
+ packet(0x091b,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0923,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x093b,clif->pDropItem,2,4);
+ packet(0x0945,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0946,clif->pReqClickBuyingStore,2);
+ packet(0x0947,clif->pStoragePassword,0);
+ packet(0x0958,clif->pHomMenu,2,4);
+ packet(0x0960,clif->pFriendsListAdd,2);
+ packet(0x0964,clif->pTakeItem,2);
#endif
// 2017-05-24aRagexe, 2017-05-24bRagexe
#if PACKETVER == 20170524
- packet(0x0364,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0368,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0802,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x085e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0860,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0864,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0866,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0868,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x086d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0873,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0874,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x087d,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0882,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x088d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0894,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x089c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a1,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x091e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0923,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0925,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0934,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0946,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0958,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x095b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0964,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0967,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0968,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
+ packet(0x0364,clif->pPartyInvite2,2);
+ packet(0x0368,clif->pStoragePassword,0);
+ packet(0x0802,clif->pDropItem,2,4);
+ packet(0x085e,clif->pActionRequest,2,6);
+ packet(0x085f,clif->pReqClickBuyingStore,2);
+ packet(0x0860,clif->pTickSend,2);
+ packet(0x0864,clif->pTakeItem,2);
+ packet(0x0866,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0868,clif->pMoveToKafra,2,4);
+ packet(0x086d,clif->pHomMenu,2,4);
+ packet(0x0873,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0874,clif->pSearchStoreInfoNextPage,0);
+ packet(0x087d,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0882,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x088d,clif->pUseSkillToId,2,4,6);
+ packet(0x0894,clif->pMoveFromKafra,2,4);
+ packet(0x089c,clif->pWalkToXY,2);
+ packet(0x08a1,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x091e,clif->pDull/*,XXX*/);
+ packet(0x0923,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0925,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0934,clif->pChangeDir,2,4);
+ packet(0x0946,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0958,clif->pDull/*,XXX*/);
+ packet(0x095a,clif->pGetCharNameRequest,2);
+ packet(0x095b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0964,clif->pReqCloseBuyingStore,0);
+ packet(0x0967,clif->pFriendsListAdd,2);
+ packet(0x0968,clif->pSolveCharName,2);
#endif
// 2017-05-31aRagexe
#if PACKETVER == 20170531
- packet(0x0361,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0369,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x07e4,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x07ec,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0819,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x085f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0861,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0868,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0873,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0875,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0878,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x087b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0885,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x088d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0894,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x089a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x08ac,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08ad,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0933,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0937,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0940,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0945,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0963,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0968,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
+ packet(0x0361,clif->pChangeDir,2,4);
+ packet(0x0369,clif->pUseSkillToId,2,4,6);
+ packet(0x07e4,clif->pWalkToXY,2);
+ packet(0x07ec,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0819,clif->pTickSend,2);
+ packet(0x085b,clif->pDull/*,XXX*/);
+ packet(0x085f,clif->pSolveCharName,2);
+ packet(0x0861,clif->pFriendsListAdd,2);
+ packet(0x0868,clif->pDull/*,XXX*/);
+ packet(0x0873,clif->pReqCloseBuyingStore,0);
+ packet(0x0875,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0878,clif->pPartyInvite2,2);
+ packet(0x087b,clif->pActionRequest,2,6);
+ packet(0x0885,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x088d,clif->pDropItem,2,4);
+ packet(0x0894,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x089a,clif->pStoragePassword,0);
+ packet(0x089c,clif->pHomMenu,2,4);
+ packet(0x08a2,clif->pSearchStoreInfoNextPage,0);
+ packet(0x08ac,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08ad,clif->pMoveToKafra,2,4);
+ packet(0x092d,clif->pGetCharNameRequest,2);
+ packet(0x0933,clif->pMoveFromKafra,2,4);
+ packet(0x0937,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0940,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0945,clif->pReqClickBuyingStore,2);
+ packet(0x0963,clif->pTakeItem,2);
+ packet(0x0968,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
#endif
// 2017-06-07cRagexe
#if PACKETVER == 20170607
- packet(0x0361,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0364,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x07e4,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x085e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0862,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0863,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0864,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0871,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0873,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0875,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0885,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x088a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0897,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x089d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a9,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08ab,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0917,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0918,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0919,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0925,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0927,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0931,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0934,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0938,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x093d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0942,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0944,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0949,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x0361,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0364,clif->pStoragePassword,0);
+ packet(0x07e4,clif->pTickSend,2);
+ packet(0x085a,clif->pChangeDir,2,4);
+ packet(0x085e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0862,clif->pGetCharNameRequest,2);
+ packet(0x0863,clif->pReqClickBuyingStore,2);
+ packet(0x0864,clif->pDropItem,2,4);
+ packet(0x0871,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0873,clif->pDull/*,XXX*/);
+ packet(0x0875,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0885,clif->pFriendsListAdd,2);
+ packet(0x088a,clif->pMoveFromKafra,2,4);
+ packet(0x0897,clif->pTakeItem,2);
+ packet(0x089d,clif->pMoveToKafra,2,4);
+ packet(0x08a9,clif->pUseSkillToId,2,4,6);
+ packet(0x08ab,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0917,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0918,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0919,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0925,clif->pPartyInvite2,2);
+ packet(0x0927,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0931,clif->pDull/*,XXX*/);
+ packet(0x0934,clif->pWalkToXY,2);
+ packet(0x0938,clif->pActionRequest,2,6);
+ packet(0x093d,clif->pReqCloseBuyingStore,0);
+ packet(0x0942,clif->pHomMenu,2,4);
+ packet(0x0944,clif->pSolveCharName,2);
+ packet(0x0949,clif->pReqOpenBuyingStore,2,4,8,9,89);
#endif
// 2017-06-14bRagexe
#if PACKETVER == 20170614
- packet(0x023b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0361,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0364,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0367,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0437,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0838,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x083c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0860,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0865,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0866,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0867,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x086b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0877,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0879,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x087e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0889,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0899,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a2,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08ad,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0928,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x092f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0936,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0944,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0957,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0963,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
+ packet(0x023b,clif->pMoveFromKafra,2,4);
+ packet(0x0361,clif->pWalkToXY,2);
+ packet(0x0364,clif->pHomMenu,2,4);
+ packet(0x0367,clif->pDropItem,2,4);
+ packet(0x0437,clif->pStoragePassword,0);
+ packet(0x0838,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x083c,clif->pActionRequest,2,6);
+ packet(0x0860,clif->pReqClickBuyingStore,2);
+ packet(0x0865,clif->pDull/*,XXX*/);
+ packet(0x0866,clif->pTickSend,2);
+ packet(0x0867,clif->pFriendsListAdd,2);
+ packet(0x086b,clif->pReqCloseBuyingStore,0);
+ packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0877,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0879,clif->pMoveToKafra,2,4);
+ packet(0x087d,clif->pSolveCharName,2);
+ packet(0x087e,clif->pChangeDir,2,4);
+ packet(0x0889,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0899,clif->pPartyInvite2,2);
+ packet(0x089d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a2,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08ad,clif->pTakeItem,2);
+ packet(0x091b,clif->pUseSkillToId,2,4,6);
+ packet(0x0928,clif->pSearchStoreInfoNextPage,0);
+ packet(0x092f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0936,clif->pGetCharNameRequest,2);
+ packet(0x0944,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0957,clif->pDull/*,XXX*/);
+ packet(0x0963,clif->pSearchStoreInfoListItemClick,2,6,10);
#endif
// 2017-06-21bRagexe
#if PACKETVER == 20170621
- packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0365,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0366,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0802,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0885,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0889,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a8,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0956,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0957,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0961,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pTakeItem,2);
+ packet(0x0365,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0366,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pFriendsListAdd,2);
+ packet(0x0802,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085d,clif->pChangeDir,2,4);
+ packet(0x087d,clif->pDropItem,2,4);
+ packet(0x0885,clif->pPartyInvite2,2);
+ packet(0x0889,clif->pMoveFromKafra,2,4);
+ packet(0x08a8,clif->pHomMenu,2,4);
+ packet(0x0956,clif->pDull/*,XXX*/);
+ packet(0x0957,clif->pStoragePassword,0);
+ packet(0x095b,clif->pDull/*,XXX*/);
+ packet(0x095c,clif->pMoveToKafra,2,4);
+ packet(0x0961,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-06-28bRagexe
#if PACKETVER == 20170628
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0863,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0863,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-07-05aRagexe
#if PACKETVER == 20170705
- packet(0x0202,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x02c4,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0879,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0886,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x088d,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x089d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0930,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0932,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0934,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x094c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pStoragePassword,0);
+ packet(0x02c4,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0879,clif->pMoveToKafra,2,4);
+ packet(0x0886,clif->pFriendsListAdd,2);
+ packet(0x088d,clif->pDull/*,XXX*/);
+ packet(0x088e,clif->pPartyInvite2,2);
+ packet(0x089a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x089d,clif->pDropItem,2,4);
+ packet(0x091a,clif->pChangeDir,2,4);
+ packet(0x092f,clif->pDull/*,XXX*/);
+ packet(0x0930,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0932,clif->pTakeItem,2);
+ packet(0x0934,clif->pMoveFromKafra,2,4);
+ packet(0x094c,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-07-12bRagexe
#if PACKETVER == 20170712
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0944,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0944,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-07-19aRagexe
#if PACKETVER == 20170719
- packet(0x022d,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0367,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0368,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0369,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x07e4,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0863,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x086e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x087d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0881,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0882,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0885,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0891,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0898,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x089a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089d,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x08a6,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a8,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x091b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x092c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x092e,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x092f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x093d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x093e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0944,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0946,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0966,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x022d,clif->pActionRequest,2,6);
+ packet(0x0367,clif->pReqCloseBuyingStore,0);
+ packet(0x0368,clif->pDull/*,XXX*/);
+ packet(0x0369,clif->pHomMenu,2,4);
+ packet(0x07e4,clif->pGetCharNameRequest,2);
+ packet(0x085a,clif->pTickSend,2);
+ packet(0x085e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0863,clif->pReqClickBuyingStore,2);
+ packet(0x086e,clif->pPartyInvite2,2);
+ packet(0x087d,clif->pTakeItem,2);
+ packet(0x0881,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0882,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0885,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0891,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0898,clif->pUseSkillToId,2,4,6);
+ packet(0x089a,clif->pStoragePassword,0);
+ packet(0x089d,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x08a6,clif->pMoveFromKafra,2,4);
+ packet(0x08a8,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x091b,clif->pDropItem,2,4);
+ packet(0x091f,clif->pSolveCharName,2);
+ packet(0x092c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x092e,clif->pSearchStoreInfoNextPage,0);
+ packet(0x092f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x093d,clif->pWalkToXY,2);
+ packet(0x093e,clif->pDull/*,XXX*/);
+ packet(0x0944,clif->pChangeDir,2,4);
+ packet(0x0946,clif->pFriendsListAdd,2);
+ packet(0x0966,clif->pMoveToKafra,2,4);
#endif
// 2017-07-26aRagexe
#if PACKETVER == 20170726
- packet(0x0363,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0364,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0366,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0369,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0438,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0838,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0873,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0874,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0878,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0881,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0888,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x088e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a3,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a7,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08aa,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08ab,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08ac,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x091d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x091f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0921,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0923,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0943,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x094f,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0950,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0952,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0954,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0963,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
+ packet(0x0363,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0364,clif->pMoveToKafra,2,4);
+ packet(0x0366,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0369,clif->pUseSkillToId,2,4,6);
+ packet(0x0438,clif->pPartyInvite2,2);
+ packet(0x0838,clif->pReqCloseBuyingStore,0);
+ packet(0x0873,clif->pReqClickBuyingStore,2);
+ packet(0x0874,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0878,clif->pActionRequest,2,6);
+ packet(0x0881,clif->pDull/*,XXX*/);
+ packet(0x0888,clif->pSearchStoreInfoNextPage,0);
+ packet(0x088e,clif->pWalkToXY,2);
+ packet(0x08a3,clif->pDull/*,XXX*/);
+ packet(0x08a7,clif->pStoragePassword,0);
+ packet(0x08aa,clif->pGetCharNameRequest,2);
+ packet(0x08ab,clif->pTakeItem,2);
+ packet(0x08ac,clif->pTickSend,2);
+ packet(0x091d,clif->pFriendsListAdd,2);
+ packet(0x091e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x091f,clif->pHomMenu,2,4);
+ packet(0x0921,clif->pSolveCharName,2);
+ packet(0x0923,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0943,clif->pDropItem,2,4);
+ packet(0x094f,clif->pMoveFromKafra,2,4);
+ packet(0x0950,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0952,clif->pChangeDir,2,4);
+ packet(0x0954,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x095a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0963,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
#endif
// 2017-08-01aRagexe, 2017-08-01bRagexe
#if PACKETVER == 20170801
- packet(0x022d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0281,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0362,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a6,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pDropItem,2,4);
+ packet(0x0281,clif->pChangeDir,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0362,clif->pHomMenu,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087d,clif->pStoragePassword,0);
+ packet(0x08a6,clif->pDull/*,XXX*/);
+ packet(0x094f,clif->pFriendsListAdd,2);
+ packet(0x095a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-08-09cRagexe
#if PACKETVER == 20170809
- packet(0x022d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0281,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0364,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0366,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0367,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x07e4,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0802,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0835,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0868,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x086e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x086f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0876,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x087d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0880,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0890,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0892,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0895,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0899,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a3,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08a6,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0918,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0921,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x092b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0931,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0939,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x093b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0940,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x022d,clif->pDull/*,XXX*/);
+ packet(0x0281,clif->pMoveFromKafra,2,4);
+ packet(0x0364,clif->pPartyInvite2,2);
+ packet(0x0366,clif->pFriendsListAdd,2);
+ packet(0x0367,clif->pReqCloseBuyingStore,0);
+ packet(0x07e4,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0802,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0835,clif->pDropItem,2,4);
+ packet(0x0868,clif->pActionRequest,2,6);
+ packet(0x086e,clif->pChangeDir,2,4);
+ packet(0x086f,clif->pHomMenu,2,4);
+ packet(0x0876,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x087d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0880,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088c,clif->pUseSkillToId,2,4,6);
+ packet(0x0890,clif->pStoragePassword,0);
+ packet(0x0892,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0895,clif->pWalkToXY,2);
+ packet(0x0899,clif->pDull/*,XXX*/);
+ packet(0x08a3,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08a6,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0918,clif->pTakeItem,2);
+ packet(0x0921,clif->pMoveToKafra,2,4);
+ packet(0x092a,clif->pGetCharNameRequest,2);
+ packet(0x092b,clif->pTickSend,2);
+ packet(0x0931,clif->pSolveCharName,2);
+ packet(0x0939,clif->pReqClickBuyingStore,2);
+ packet(0x093b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0940,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2017-08-16cRagexe, 2017-08-16dRagexe
#if PACKETVER == 20170816
- packet(0x022d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x035f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0361,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0362,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0438,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085a,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0862,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0864,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x087e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0881,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0882,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0884,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0888,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0889,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a3,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a7,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a9,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08ac,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x091c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0921,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0925,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x093a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x093d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0940,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0941,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0950,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0959,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0960,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
+ packet(0x022d,clif->pGetCharNameRequest,2);
+ packet(0x035f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0361,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0362,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0438,clif->pActionRequest,2,6);
+ packet(0x085a,clif->pSolveCharName,2);
+ packet(0x0862,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0864,clif->pReqCloseBuyingStore,0);
+ packet(0x087e,clif->pTakeItem,2);
+ packet(0x0881,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0882,clif->pStoragePassword,0);
+ packet(0x0884,clif->pDull/*,XXX*/);
+ packet(0x0888,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0889,clif->pTickSend,2);
+ packet(0x08a3,clif->pFriendsListAdd,2);
+ packet(0x08a7,clif->pDull/*,XXX*/);
+ packet(0x08a9,clif->pWalkToXY,2);
+ packet(0x08ac,clif->pHomMenu,2,4);
+ packet(0x091c,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0921,clif->pReqClickBuyingStore,2);
+ packet(0x0925,clif->pMoveFromKafra,2,4);
+ packet(0x092c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x093a,clif->pPartyInvite2,2);
+ packet(0x093d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0940,clif->pUseSkillToId,2,4,6);
+ packet(0x0941,clif->pDropItem,2,4);
+ packet(0x0950,clif->pChangeDir,2,4);
+ packet(0x0959,clif->pMoveToKafra,2,4);
+ packet(0x0960,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
#endif
// 2017-08-23aRagexe
#if PACKETVER == 20170823
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x086d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08ac,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pPartyInvite2,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pChangeDir,2,4);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x086d,clif->pStoragePassword,0);
+ packet(0x08ac,clif->pFriendsListAdd,2);
+ packet(0x095b,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-08-30aRagexe, 2017-08-30bRagexe
#if PACKETVER == 20170830
- packet(0x0281,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x02c4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0363,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0364,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0860,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0865,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x086a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0875,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0884,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0885,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0888,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0899,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089e,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a2,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091e,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0921,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0925,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x092e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0939,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x093e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0940,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0942,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0943,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0947,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0951,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0959,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x0281,clif->pChangeDir,2,4);
+ packet(0x02c4,clif->pTakeItem,2);
+ packet(0x0363,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0364,clif->pDull/*,XXX*/);
+ packet(0x0860,clif->pReqCloseBuyingStore,0);
+ packet(0x0865,clif->pWalkToXY,2);
+ packet(0x086a,clif->pPartyInvite2,2);
+ packet(0x0875,clif->pDull/*,XXX*/);
+ packet(0x0884,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0885,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0888,clif->pUseSkillToId,2,4,6);
+ packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0899,clif->pDropItem,2,4);
+ packet(0x089a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089e,clif->pMoveToKafra,2,4);
+ packet(0x08a2,clif->pStoragePassword,0);
+ packet(0x08a8,clif->pMoveFromKafra,2,4);
+ packet(0x091e,clif->pTickSend,2);
+ packet(0x0921,clif->pHomMenu,2,4);
+ packet(0x0925,clif->pReqClickBuyingStore,2);
+ packet(0x092e,clif->pGetCharNameRequest,2);
+ packet(0x0939,clif->pFriendsListAdd,2);
+ packet(0x093e,clif->pActionRequest,2,6);
+ packet(0x0940,clif->pSolveCharName,2);
+ packet(0x0942,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0943,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0947,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0951,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0959,clif->pUseSkillToPos,2,4,6,8);
#endif
// 2017-09-06cRagexe
#if PACKETVER == 20170906
- packet(0x0202,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0281,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0860,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0866,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a2,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a3,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a7,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0953,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pDull/*,XXX*/);
+ packet(0x0281,clif->pStoragePassword,0);
+ packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pPartyInvite2,2);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pChangeDir,2,4);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0860,clif->pDropItem,2,4);
+ packet(0x0866,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086c,clif->pDull/*,XXX*/);
+ packet(0x087b,clif->pMoveToKafra,2,4);
+ packet(0x08a2,clif->pMoveFromKafra,2,4);
+ packet(0x08a3,clif->pFriendsListAdd,2);
+ packet(0x08a7,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091a,clif->pTakeItem,2);
+ packet(0x091e,clif->pHomMenu,2,4);
+ packet(0x0953,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-09-13cRagexe
#if PACKETVER == 20170913
- packet(0x0281,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x035f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0437,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x07e4,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0817,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0835,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x085a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0860,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0865,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0866,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x088c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0890,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0891,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0892,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a7,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08aa,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08ab,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08ac,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ad,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x091b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x091d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0920,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0923,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0925,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0927,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x095a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x095c,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
+ packet(0x0281,clif->pGetCharNameRequest,2);
+ packet(0x035f,clif->pFriendsListAdd,2);
+ packet(0x0437,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x07e4,clif->pMoveFromKafra,2,4);
+ packet(0x0817,clif->pActionRequest,2,6);
+ packet(0x0835,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x085a,clif->pReqCloseBuyingStore,0);
+ packet(0x0860,clif->pTakeItem,2);
+ packet(0x0865,clif->pPartyInvite2,2);
+ packet(0x0866,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x088c,clif->pHomMenu,2,4);
+ packet(0x0890,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0891,clif->pMoveToKafra,2,4);
+ packet(0x0892,clif->pStoragePassword,0);
+ packet(0x08a6,clif->pReqClickBuyingStore,2);
+ packet(0x08a7,clif->pDull/*,XXX*/);
+ packet(0x08aa,clif->pUseSkillToId,2,4,6);
+ packet(0x08ab,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08ac,clif->pChangeDir,2,4);
+ packet(0x08ad,clif->pItemListWindowSelected,2,4,8);
+ packet(0x091b,clif->pTickSend,2);
+ packet(0x091d,clif->pDropItem,2,4);
+ packet(0x091e,clif->pDull/*,XXX*/);
+ packet(0x0920,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0923,clif->pWalkToXY,2);
+ packet(0x0925,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0927,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x095a,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x095c,clif->pSolveCharName,2);
#endif
// 2017-09-20aRagexe
#if PACKETVER == 20170920
- packet(0x0369,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0436,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x07ec,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x085a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0861,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0862,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0864,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0865,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x086a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x086c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0874,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0875,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0889,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x088e,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x089b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0919,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x091e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0921,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0923,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0926,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0937,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0939,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0945,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x095d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0961,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0966,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x096a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
+ packet(0x0369,clif->pTakeItem,2);
+ packet(0x0436,clif->pItemListWindowSelected,2,4,8);
+ packet(0x07ec,clif->pMoveFromKafra,2,4);
+ packet(0x085a,clif->pWalkToXY,2);
+ packet(0x0861,clif->pFriendsListAdd,2);
+ packet(0x0862,clif->pUseSkillToId,2,4,6);
+ packet(0x0864,clif->pStoragePassword,0);
+ packet(0x0865,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x086a,clif->pPartyInvite2,2);
+ packet(0x086c,clif->pDropItem,2,4);
+ packet(0x0874,clif->pReqCloseBuyingStore,0);
+ packet(0x0875,clif->pDull/*,XXX*/);
+ packet(0x0889,clif->pGetCharNameRequest,2);
+ packet(0x088e,clif->pTickSend,2);
+ packet(0x089b,clif->pActionRequest,2,6);
+ packet(0x0919,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x091e,clif->pDull/*,XXX*/);
+ packet(0x0921,clif->pSolveCharName,2);
+ packet(0x0923,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0926,clif->pMoveToKafra,2,4);
+ packet(0x092e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0937,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0939,clif->pChangeDir,2,4);
+ packet(0x0945,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x094c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x095d,clif->pHomMenu,2,4);
+ packet(0x0961,clif->pReqClickBuyingStore,2);
+ packet(0x0966,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x096a,clif->pSearchStoreInfoNextPage,0);
#endif
// 2017-09-27bRagexe, 2017-09-27cRagexe, 2017-09-27dRagexe
#if PACKETVER == 20170927
- packet(0x02c4,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x035f,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0361,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0362,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0366,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x085c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0873,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0875,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x087d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x087e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x088b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0899,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x089a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a3,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08a5,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a6,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08ad,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x091e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0922,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0923,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0927,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x093b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0942,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0945,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x094b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x094d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0959,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x095a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x02c4,clif->pHomMenu,2,4);
+ packet(0x035f,clif->pGetCharNameRequest,2);
+ packet(0x0361,clif->pDull/*,XXX*/);
+ packet(0x0362,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0366,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x085c,clif->pUseSkillToId,2,4,6);
+ packet(0x0873,clif->pSolveCharName,2);
+ packet(0x0875,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x087d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x087e,clif->pChangeDir,2,4);
+ packet(0x088b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0899,clif->pActionRequest,2,6);
+ packet(0x089a,clif->pStoragePassword,0);
+ packet(0x089b,clif->pMoveFromKafra,2,4);
+ packet(0x08a3,clif->pReqCloseBuyingStore,0);
+ packet(0x08a5,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a6,clif->pDull/*,XXX*/);
+ packet(0x08ad,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x091e,clif->pReqClickBuyingStore,2);
+ packet(0x0922,clif->pPartyInvite2,2);
+ packet(0x0923,clif->pDropItem,2,4);
+ packet(0x0927,clif->pWalkToXY,2);
+ packet(0x093b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0942,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0945,clif->pTickSend,2);
+ packet(0x094b,clif->pFriendsListAdd,2);
+ packet(0x094d,clif->pTakeItem,2);
+ packet(0x0959,clif->pMoveToKafra,2,4);
+ packet(0x095a,clif->pUseSkillToPos,2,4,6,8);
#endif
// 2017-10-02cRagexe
#if PACKETVER == 20171002
- packet(0x022d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0363,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0885,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0897,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0899,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0928,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x092d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0934,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x093e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0943,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x095f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pDropItem,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0363,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pHomMenu,2,4);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0885,clif->pMoveToKafra,2,4);
+ packet(0x0897,clif->pChangeDir,2,4);
+ packet(0x0899,clif->pFriendsListAdd,2);
+ packet(0x089d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0928,clif->pItemListWindowSelected,2,4,8);
+ packet(0x092d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0934,clif->pStoragePassword,0);
+ packet(0x093b,clif->pMoveFromKafra,2,4);
+ packet(0x093d,clif->pTakeItem,2);
+ packet(0x093e,clif->pDull/*,XXX*/);
+ packet(0x0943,clif->pPartyInvite2,2);
+ packet(0x095f,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-10-11aRagexe, 2017-10-11bRagexe
#if PACKETVER == 20171011
- packet(0x023b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0882,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0950,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0954,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pWalkToXY,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pStoragePassword,0);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087b,clif->pFriendsListAdd,2);
+ packet(0x0882,clif->pHomMenu,2,4);
+ packet(0x0950,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0954,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-10-18aRagexe
#if PACKETVER == 20171018
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0363,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0364,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0889,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x089a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a6,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0938,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0944,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x094f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0363,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0364,clif->pMoveToKafra,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pTakeItem,2);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086a,clif->pDull/*,XXX*/);
+ packet(0x087a,clif->pDull/*,XXX*/);
+ packet(0x087e,clif->pHomMenu,2,4);
+ packet(0x0889,clif->pMoveFromKafra,2,4);
+ packet(0x089a,clif->pDropItem,2,4);
+ packet(0x089f,clif->pPartyInvite2,2);
+ packet(0x08a6,clif->pChangeDir,2,4);
+ packet(0x0938,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0944,clif->pStoragePassword,0);
+ packet(0x094a,clif->pFriendsListAdd,2);
+ packet(0x094f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-10-25bRagexe, 2017-10-25cRagexe, 2017-10-25dRagexe, 2017-10-25eRagexe
#if PACKETVER == 20171025
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a2,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x08a2,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-11-01aRagexe
#if PACKETVER == 20171101
- packet(0x022d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0368,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0369,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0438,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0835,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x085b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0860,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0872,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0876,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0886,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0890,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0895,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0899,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x089c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a0,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08ab,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08ad,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x091b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0939,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x094a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0957,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x095a,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0962,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0966,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x022d,clif->pStoragePassword,0);
+ packet(0x0368,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0369,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0438,clif->pTickSend,2);
+ packet(0x0835,clif->pDropItem,2,4);
+ packet(0x085b,clif->pHomMenu,2,4);
+ packet(0x0860,clif->pGetCharNameRequest,2);
+ packet(0x086c,clif->pUseSkillToId,2,4,6);
+ packet(0x0872,clif->pFriendsListAdd,2);
+ packet(0x0876,clif->pChangeDir,2,4);
+ packet(0x0886,clif->pDull/*,XXX*/);
+ packet(0x088e,clif->pReqClickBuyingStore,2);
+ packet(0x0890,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0895,clif->pDull/*,XXX*/);
+ packet(0x0899,clif->pPartyInvite2,2);
+ packet(0x089b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x089c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a0,clif->pMoveFromKafra,2,4);
+ packet(0x08ab,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08ad,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x091b,clif->pMoveToKafra,2,4);
+ packet(0x0939,clif->pWalkToXY,2);
+ packet(0x094a,clif->pReqCloseBuyingStore,0);
+ packet(0x094d,clif->pSolveCharName,2);
+ packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0957,clif->pActionRequest,2,6);
+ packet(0x095a,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0962,clif->pTakeItem,2);
+ packet(0x0966,clif->pUseSkillToPos,2,4,6,8);
#endif
// 2017-11-08aRagexe
#if PACKETVER == 20171108
- packet(0x0202,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0361,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x07e4,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0815,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0819,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0838,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x085d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0863,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0878,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x087e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0884,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0896,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0897,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x08a2,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a9,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08ad,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x091d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x091f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0940,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0941,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0945,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0947,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0949,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x094e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0958,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0963,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0965,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0967,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x0202,clif->pTickSend,2);
+ packet(0x0361,clif->pSearchStoreInfoNextPage,0);
+ packet(0x07e4,clif->pSolveCharName,2);
+ packet(0x0815,clif->pStoragePassword,0);
+ packet(0x0819,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0838,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x085d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0863,clif->pWalkToXY,2);
+ packet(0x0878,clif->pFriendsListAdd,2);
+ packet(0x087e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0884,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0896,clif->pDull/*,XXX*/);
+ packet(0x0897,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x08a2,clif->pUseSkillToId,2,4,6);
+ packet(0x08a9,clif->pHomMenu,2,4);
+ packet(0x08ad,clif->pGetCharNameRequest,2);
+ packet(0x091d,clif->pReqCloseBuyingStore,0);
+ packet(0x091f,clif->pChangeDir,2,4);
+ packet(0x0940,clif->pReqClickBuyingStore,2);
+ packet(0x0941,clif->pMoveToKafra,2,4);
+ packet(0x0945,clif->pTakeItem,2);
+ packet(0x0947,clif->pDull/*,XXX*/);
+ packet(0x0949,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x094e,clif->pPartyInvite2,2);
+ packet(0x0958,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x095a,clif->pMoveFromKafra,2,4);
+ packet(0x0963,clif->pActionRequest,2,6);
+ packet(0x0965,clif->pDropItem,2,4);
+ packet(0x0967,clif->pUseSkillToPos,2,4,6,8);
#endif
// 2017-11-15aRagexe
#if PACKETVER == 20171115
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0365,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x086f,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x087e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0883,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0890,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0898,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a4,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0926,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0958,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0365,clif->pDropItem,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pReqClickBuyingStore,2);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pFriendsListAdd,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086d,clif->pDull/*,XXX*/);
+ packet(0x086f,clif->pItemListWindowSelected,2,4,8);
+ packet(0x087e,clif->pMoveFromKafra,2,4);
+ packet(0x0883,clif->pDull/*,XXX*/);
+ packet(0x088b,clif->pMoveToKafra,2,4);
+ packet(0x0890,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0898,clif->pStoragePassword,0);
+ packet(0x08a4,clif->pChangeDir,2,4);
+ packet(0x0926,clif->pTakeItem,2);
+ packet(0x0958,clif->pHomMenu,2,4);
+ packet(0x095a,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-11-22aRagexe
#if PACKETVER == 20171122
- packet(0x0281,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x02c4,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x035f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0838,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x083c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x085b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0862,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0867,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0877,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0885,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0890,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0891,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0893,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0897,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0898,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x089e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a6,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a9,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x091e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0920,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0923,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0934,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0945,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0946,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0947,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0962,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0968,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x0281,clif->pSolveCharName,2);
+ packet(0x02c4,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x035f,clif->pDull/*,XXX*/);
+ packet(0x0838,clif->pMoveToKafra,2,4);
+ packet(0x083c,clif->pHomMenu,2,4);
+ packet(0x085b,clif->pGetCharNameRequest,2);
+ packet(0x0862,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0867,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0877,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0885,clif->pDull/*,XXX*/);
+ packet(0x0890,clif->pTickSend,2);
+ packet(0x0891,clif->pTakeItem,2);
+ packet(0x0893,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0897,clif->pChangeDir,2,4);
+ packet(0x0898,clif->pDropItem,2,4);
+ packet(0x089a,clif->pMoveFromKafra,2,4);
+ packet(0x089e,clif->pActionRequest,2,6);
+ packet(0x08a6,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a9,clif->pReqClickBuyingStore,2);
+ packet(0x091e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0920,clif->pReqCloseBuyingStore,0);
+ packet(0x0923,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0934,clif->pStoragePassword,0);
+ packet(0x093b,clif->pUseSkillToId,2,4,6);
+ packet(0x0945,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0946,clif->pFriendsListAdd,2);
+ packet(0x0947,clif->pWalkToXY,2);
+ packet(0x0962,clif->pPartyInvite2,2);
+ packet(0x0968,clif->pReqOpenBuyingStore,2,4,8,9,89);
#endif
// 2017-11-29aRagexe
#if PACKETVER == 20171129
- packet(0x02c4,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x035f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0363,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0365,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0862,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0876,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0878,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a5,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0940,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x094b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0953,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0966,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x02c4,clif->pChangeDir,2,4);
+ packet(0x035f,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0363,clif->pFriendsListAdd,2);
+ packet(0x0365,clif->pDropItem,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pPartyInvite2,2);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0862,clif->pTakeItem,2);
+ packet(0x086d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0876,clif->pDull/*,XXX*/);
+ packet(0x0878,clif->pStoragePassword,0);
+ packet(0x088a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089c,clif->pHomMenu,2,4);
+ packet(0x08a5,clif->pMoveToKafra,2,4);
+ packet(0x0940,clif->pTickSend,2);
+ packet(0x094b,clif->pDull/*,XXX*/);
+ packet(0x0953,clif->pMoveFromKafra,2,4);
+ packet(0x0966,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-12-06bRagexe, 2017-12-06cRagexe
#if PACKETVER == 20171206
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0867,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x086a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x086e,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0885,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0888,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0897,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x089d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a2,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a4,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0923,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0936,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0942,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0958,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0961,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0867,clif->pDropItem,2,4);
+ packet(0x086a,clif->pDull/*,XXX*/);
+ packet(0x086e,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0885,clif->pTickSend,2);
+ packet(0x0888,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0897,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x089d,clif->pStoragePassword,0);
+ packet(0x08a2,clif->pPartyInvite2,2);
+ packet(0x08a4,clif->pMoveFromKafra,2,4);
+ packet(0x091d,clif->pFriendsListAdd,2);
+ packet(0x0923,clif->pMoveToKafra,2,4);
+ packet(0x092e,clif->pDull/*,XXX*/);
+ packet(0x0936,clif->pChangeDir,2,4);
+ packet(0x0942,clif->pHomMenu,2,4);
+ packet(0x0958,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0961,clif->pTakeItem,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-12-13bRagexe
#if PACKETVER == 20171213
- packet(0x0202,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0860,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0881,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0890,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0957,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pPartyInvite2,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pFriendsListAdd,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0860,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0881,clif->pDull/*,XXX*/);
+ packet(0x0890,clif->pStoragePassword,0);
+ packet(0x091a,clif->pChangeDir,2,4);
+ packet(0x0957,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-12-20aRagexe
#if PACKETVER == 20171220
- packet(0x0281,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0366,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0369,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0436,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0437,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0861,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0872,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0873,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0880,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0882,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0885,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0899,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a7,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x091b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0924,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0929,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0933,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x093e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0941,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0946,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0951,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0957,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0964,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
+ packet(0x0281,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0366,clif->pMoveFromKafra,2,4);
+ packet(0x0369,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0436,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0437,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x085e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0861,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0872,clif->pUseSkillToId,2,4,6);
+ packet(0x0873,clif->pGetCharNameRequest,2);
+ packet(0x0880,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0882,clif->pTickSend,2);
+ packet(0x0885,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0899,clif->pStoragePassword,0);
+ packet(0x089e,clif->pWalkToXY,2);
+ packet(0x08a7,clif->pReqCloseBuyingStore,0);
+ packet(0x091b,clif->pTakeItem,2);
+ packet(0x091e,clif->pSolveCharName,2);
+ packet(0x0924,clif->pMoveToKafra,2,4);
+ packet(0x0929,clif->pDropItem,2,4);
+ packet(0x0933,clif->pChangeDir,2,4);
+ packet(0x093e,clif->pActionRequest,2,6);
+ packet(0x0941,clif->pReqClickBuyingStore,2);
+ packet(0x0946,clif->pDull/*,XXX*/);
+ packet(0x094e,clif->pDull/*,XXX*/);
+ packet(0x0951,clif->pHomMenu,2,4);
+ packet(0x0957,clif->pFriendsListAdd,2);
+ packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0964,clif->pPartyInvite2,2);
#endif
// 2017-12-27aRagexe
#if PACKETVER == 20171227
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0888,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x088a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a0,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a5,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x092c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0938,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0945,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0946,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0969,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x096a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pActionRequest,2,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pChangeDir,2,4);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pGetCharNameRequest,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087d,clif->pStoragePassword,0);
+ packet(0x0888,clif->pMoveFromKafra,2,4);
+ packet(0x088a,clif->pDull/*,XXX*/);
+ packet(0x088d,clif->pTakeItem,2);
+ packet(0x08a0,clif->pMoveToKafra,2,4);
+ packet(0x08a5,clif->pHomMenu,2,4);
+ packet(0x092c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092e,clif->pDull/*,XXX*/);
+ packet(0x0938,clif->pPartyInvite2,2);
+ packet(0x0945,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0946,clif->pFriendsListAdd,2);
+ packet(0x0969,clif->pDropItem,2,4);
+ packet(0x096a,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2018-01-03aRagexe, 2018-01-03bRagexe
#if PACKETVER == 20180103
- packet(0x02c4,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0363,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0865,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x086b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0872,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0876,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0879,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x088e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0899,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a9,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ab,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08ac,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x091d,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0922,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0926,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0927,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x092c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0935,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0938,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0941,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0946,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0948,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x095d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x095f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
+ packet(0x02c4,clif->pMoveToKafra,2,4);
+ packet(0x0363,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0865,clif->pDull/*,XXX*/);
+ packet(0x086b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0872,clif->pReqClickBuyingStore,2);
+ packet(0x0876,clif->pTickSend,2);
+ packet(0x0879,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x088e,clif->pReqCloseBuyingStore,0);
+ packet(0x0899,clif->pFriendsListAdd,2);
+ packet(0x089f,clif->pSolveCharName,2);
+ packet(0x08a9,clif->pChangeDir,2,4);
+ packet(0x08ab,clif->pGetCharNameRequest,2);
+ packet(0x08ac,clif->pItemListWindowSelected,2,4,8);
+ packet(0x091d,clif->pActionRequest,2,6);
+ packet(0x0922,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0926,clif->pDull/*,XXX*/);
+ packet(0x0927,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x092c,clif->pMoveFromKafra,2,4);
+ packet(0x0935,clif->pTakeItem,2);
+ packet(0x0938,clif->pUseSkillToId,2,4,6);
+ packet(0x0941,clif->pWalkToXY,2);
+ packet(0x0946,clif->pStoragePassword,0);
+ packet(0x0948,clif->pHomMenu,2,4);
+ packet(0x094e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x095d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x095f,clif->pDropItem,2,4);
+ packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
#endif
// 2018-01-17aRagexe
#if PACKETVER == 20180117
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0875,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0875,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2018-01-24bRagexe, 2018-01-31Ragexe
#if PACKETVER == 20180124 || \
PACKETVER == 20180131
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0868,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x086a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x086f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0888,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0890,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0919,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0940,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0946,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x094d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0958,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0961,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pMoveToKafra,2,4);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pDropItem,2,4);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085f,clif->pStoragePassword,0);
+ packet(0x0868,clif->pDull/*,XXX*/);
+ packet(0x086a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x086f,clif->pDull/*,XXX*/);
+ packet(0x087a,clif->pPartyInvite2,2);
+ packet(0x0888,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0890,clif->pMoveFromKafra,2,4);
+ packet(0x0919,clif->pFriendsListAdd,2);
+ packet(0x0940,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0946,clif->pItemListWindowSelected,2,4,8);
+ packet(0x094d,clif->pTakeItem,2);
+ packet(0x0958,clif->pChangeDir,2,4);
+ packet(0x0961,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2018-02-07bRagexe, 2018-02-07cRagexe
#if PACKETVER == 20180207
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0360,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0870,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0881,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x092e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0940,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0950,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pReqClickBuyingStore,2);
+ packet(0x0360,clif->pDull/*,XXX*/);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0870,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0881,clif->pFriendsListAdd,2);
+ packet(0x092c,clif->pHomMenu,2,4);
+ packet(0x092e,clif->pChangeDir,2,4);
+ packet(0x0940,clif->pTickSend,2);
+ packet(0x0950,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2018-02-13aRagexe, 2018-02-13bRagexe
#if PACKETVER == 20180213
- packet(0x0369,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0802,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0817,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x085a,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x086f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0874,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0875,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0878,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0882,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0892,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0898,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x089c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a3,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a5,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08a9,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08ad,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0917,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0922,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0924,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0926,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0933,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0936,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x093c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0943,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0955,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x095a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0962,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
+ packet(0x0369,clif->pStoragePassword,0);
+ packet(0x0802,clif->pDropItem,2,4);
+ packet(0x0817,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x085a,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x086f,clif->pPartyInvite2,2);
+ packet(0x0874,clif->pTickSend,2);
+ packet(0x0875,clif->pMoveFromKafra,2,4);
+ packet(0x0878,clif->pChangeDir,2,4);
+ packet(0x087b,clif->pReqClickBuyingStore,2);
+ packet(0x0882,clif->pUseSkillToId,2,4,6);
+ packet(0x088c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0892,clif->pTakeItem,2);
+ packet(0x0898,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x089c,clif->pDull/*,XXX*/);
+ packet(0x08a3,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a5,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08a9,clif->pReqCloseBuyingStore,0);
+ packet(0x08ad,clif->pSolveCharName,2);
+ packet(0x0917,clif->pFriendsListAdd,2);
+ packet(0x0922,clif->pWalkToXY,2);
+ packet(0x0924,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0926,clif->pDull/*,XXX*/);
+ packet(0x0933,clif->pActionRequest,2,6);
+ packet(0x0936,clif->pSearchStoreInfoNextPage,0);
+ packet(0x093c,clif->pGetCharNameRequest,2);
+ packet(0x0943,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0955,clif->pMoveToKafra,2,4);
+ packet(0x095a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0962,clif->pHomMenu,2,4);
#endif
// 2018-02-21bRagexe
#if PACKETVER == 20180221
- packet(0x0202,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0366,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0436,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0838,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0867,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086c,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x086f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0871,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0876,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0879,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0880,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0881,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0883,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x088f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0891,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0897,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0899,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x089d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0917,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0929,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x093d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x094b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x094e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0957,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0964,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x096a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
+ packet(0x0202,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0366,clif->pDull/*,XXX*/);
+ packet(0x0436,clif->pFriendsListAdd,2);
+ packet(0x0838,clif->pChangeDir,2,4);
+ packet(0x0867,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086c,clif->pReqClickBuyingStore,2);
+ packet(0x086f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0871,clif->pDropItem,2,4);
+ packet(0x0876,clif->pHomMenu,2,4);
+ packet(0x0879,clif->pMoveToKafra,2,4);
+ packet(0x087d,clif->pWalkToXY,2);
+ packet(0x0880,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0881,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0883,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x088f,clif->pSolveCharName,2);
+ packet(0x0891,clif->pDull/*,XXX*/);
+ packet(0x0897,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0899,clif->pSearchStoreInfoNextPage,0);
+ packet(0x089d,clif->pTickSend,2);
+ packet(0x0917,clif->pStoragePassword,0);
+ packet(0x091e,clif->pMoveFromKafra,2,4);
+ packet(0x0929,clif->pReqCloseBuyingStore,0);
+ packet(0x093d,clif->pPartyInvite2,2);
+ packet(0x094b,clif->pUseSkillToId,2,4,6);
+ packet(0x094d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x094e,clif->pTakeItem,2);
+ packet(0x0957,clif->pGetCharNameRequest,2);
+ packet(0x0964,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x096a,clif->pActionRequest,2,6);
#endif
// 2018-03-07bRagexe, 2018-03-09aRagexe
#if PACKETVER == 20180307 || \
PACKETVER == 20180309
- packet(0x0281,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x035f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0437,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x07e4,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0861,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0862,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0864,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086c,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0870,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0872,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0877,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x088d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0893,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x089b,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08a6,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x08aa,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08ab,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0917,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0920,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0937,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0939,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0941,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0944,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0948,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0951,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0954,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0957,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0969,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
+ packet(0x0281,clif->pDull/*,XXX*/);
+ packet(0x035f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0437,clif->pDropItem,2,4);
+ packet(0x07e4,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0861,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0862,clif->pReqClickBuyingStore,2);
+ packet(0x0864,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086c,clif->pTickSend,2);
+ packet(0x0870,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0872,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0877,clif->pWalkToXY,2);
+ packet(0x088d,clif->pMoveFromKafra,2,4);
+ packet(0x0893,clif->pUseSkillToId,2,4,6);
+ packet(0x089b,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08a6,clif->pSearchStoreInfoNextPage,0);
+ packet(0x08aa,clif->pFriendsListAdd,2);
+ packet(0x08ab,clif->pChangeDir,2,4);
+ packet(0x0917,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0920,clif->pMoveToKafra,2,4);
+ packet(0x0937,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0939,clif->pStoragePassword,0);
+ packet(0x093d,clif->pReqCloseBuyingStore,0);
+ packet(0x0941,clif->pGetCharNameRequest,2);
+ packet(0x0944,clif->pHomMenu,2,4);
+ packet(0x0948,clif->pPartyInvite2,2);
+ packet(0x0951,clif->pDull/*,XXX*/);
+ packet(0x0954,clif->pTakeItem,2);
+ packet(0x0957,clif->pSolveCharName,2);
+ packet(0x0969,clif->pActionRequest,2,6);
#endif
// 2018-03-14nRagexe
#if PACKETVER == 20180314
- packet(0x0361,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0366,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0369,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0436,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x085a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0862,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0863,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0868,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x086e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0874,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x087a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0888,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x088a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x088d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0894,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x089b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0921,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0927,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x092f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0933,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0935,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0945,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094d,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x094e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0956,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0959,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x095f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0962,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- 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, 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 || \
- PACKETVER == 20181212 || \
- PACKETVER == 20181219 || \
- PACKETVER == 20181226 || \
- PACKETVER == 20190109 || \
- PACKETVER == 20190116 || \
- PACKETVER == 20190123 || \
- PACKETVER == 20190213 || \
- PACKETVER == 20190227 || \
- PACKETVER == 20190228 || \
- PACKETVER == 20190306 || \
- PACKETVER == 20190313 || \
- PACKETVER == 20190320 || \
- PACKETVER == 20190322 || \
- PACKETVER == 20190327 || \
- PACKETVER == 20190403 || \
- PACKETVER == 20190417 || \
- PACKETVER == 20190418 || \
- PACKETVER == 20190508 || \
- PACKETVER == 20190522 || \
- PACKETVER == 20190523 || \
- PACKETVER == 20190529 || \
- 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
- 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 // 90
- 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
-
-// 2019-09-04aRagexe, 2019-09-04bRagexe, 2019-09-18bRagexe, 2019-09-25aRagexe, 2019-09-25bRagexe, 2019-10-02cRagexe, 2019-10-02dRagexe, 2019-10-16fRagexe, 2019-10-16gRagexe, 2019-10-18aRagexe, 2019-10-23aRagexe, 2019-10-30cRagexe, 2019-11-06aRagexe, 2019-11-07aRagexe, 2019-11-13cRagexe, 2019-11-13eRagexe, 2019-11-20aRagexe, 2019-11-20dRagexe, 2019-11-27aRagexe, 2019-11-27bRagexe, 2019-12-04aRagexe, 2019-12-04bRagexe, 2019-12-11aRagexe, 2019-12-18bRagexe, 2019-12-24aRagexe, 2019-12-24bRagexe, 2020-01-08aRagexe, 2020-01-22cRagexe, 2020-01-29bRagexe, 2020-01-30aRagexe, 2020-02-05aRagexe, 2020-02-06aRagexe
-#if PACKETVER == 20190904 || \
- PACKETVER == 20190918 || \
- PACKETVER == 20190925 || \
- PACKETVER == 20191002 || \
- PACKETVER == 20191016 || \
- PACKETVER == 20191018 || \
- PACKETVER == 20191023 || \
- PACKETVER == 20191030 || \
- PACKETVER == 20191106 || \
- PACKETVER == 20191107 || \
- PACKETVER == 20191113 || \
- PACKETVER == 20191120 || \
- PACKETVER == 20191127 || \
- PACKETVER == 20191204 || \
- PACKETVER == 20191211 || \
- PACKETVER == 20191218 || \
- PACKETVER == 20191224 || \
- PACKETVER == 20200108 || \
- PACKETVER == 20200122 || \
- PACKETVER == 20200129 || \
- PACKETVER == 20200130 || \
- PACKETVER == 20200205 || \
- PACKETVER == 20200206
- 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
+ packet(0x0361,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0366,clif->pUseSkillToId,2,4,6);
+ packet(0x0369,clif->pHomMenu,2,4);
+ packet(0x0436,clif->pDropItem,2,4);
+ packet(0x085a,clif->pGetCharNameRequest,2);
+ packet(0x0862,clif->pTakeItem,2);
+ packet(0x0863,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0868,clif->pDull/*,XXX*/);
+ packet(0x086e,clif->pMoveFromKafra,2,4);
+ packet(0x0874,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x087a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0888,clif->pChangeDir,2,4);
+ packet(0x088a,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x088d,clif->pStoragePassword,0);
+ packet(0x0894,clif->pReqCloseBuyingStore,0);
+ packet(0x089b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0921,clif->pActionRequest,2,6);
+ packet(0x0927,clif->pSearchStoreInfoNextPage,0);
+ packet(0x092f,clif->pWalkToXY,2);
+ packet(0x0933,clif->pMoveToKafra,2,4);
+ packet(0x0935,clif->pPartyInvite2,2);
+ packet(0x0945,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x094d,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x094e,clif->pFriendsListAdd,2);
+ packet(0x0956,clif->pDull/*,XXX*/);
+ packet(0x0959,clif->pReqClickBuyingStore,2);
+ packet(0x095f,clif->pTickSend,2);
+ packet(0x0962,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0967,clif->pSolveCharName,2);
#endif
diff --git a/src/map/packets_shuffle_re.h b/src/map/packets_shuffle_re.h
index 757cfee55..e7ed71a3b 100644
--- a/src/map/packets_shuffle_re.h
+++ b/src/map/packets_shuffle_re.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2020 Hercules Dev Team
- * Copyright (C) 2018-2020 Andrei Karas (4144)
+ * Copyright (C) 2013-2020 Hercules Dev Team
+ * Copyright (C) 2018-2020 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -40,9585 +40,9585 @@
// 2012-07-10aRagexeRE, 2012-07-12aRagexeRE
#if PACKETVER == 20120710 || \
PACKETVER == 20120712
- packet(0x0202,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x02c4,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0362,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0365,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0367,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0436,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x07e4,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0811,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0877,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0878,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x087f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x088d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0893,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0899,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a3,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a6,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a8,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08aa,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0936,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0948,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0953,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0956,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0958,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
+ packet(0x0202,clif->pSolveCharName,2);
+ packet(0x02c4,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0362,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0365,clif->pFriendsListAdd,2);
+ packet(0x0367,clif->pMoveToKafra,2,4);
+ packet(0x0436,clif->pActionRequest,2,6);
+ packet(0x07e4,clif->pTickSend,2);
+ packet(0x0811,clif->pReqClickBuyingStore,2);
+ packet(0x085b,clif->pUseSkillToId,2,4,6);
+ packet(0x0877,clif->pGetCharNameRequest,2);
+ packet(0x0878,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x087f,clif->pWalkToXY,2);
+ packet(0x088d,clif->pChangeDir,2,4);
+ packet(0x0893,clif->pStoragePassword,0);
+ packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0899,clif->pTakeItem,2);
+ packet(0x08a3,clif->pDropItem,2,4);
+ packet(0x08a6,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a8,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08aa,clif->pMoveFromKafra,2,4);
+ packet(0x092d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0936,clif->pDull/*,XXX*/);
+ packet(0x0948,clif->pReqCloseBuyingStore,0);
+ packet(0x094b,clif->pHomMenu,2,4);
+ packet(0x094e,clif->pPartyInvite2,2);
+ packet(0x0953,clif->pDull/*,XXX*/);
+ packet(0x0956,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0958,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
#endif
// 2012-07-16aRagexeRE
#if PACKETVER == 20120716
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x089f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x089f,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-07-24aRagexeRE
#if PACKETVER == 20120724
- packet(0x035f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0815,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0835,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0865,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0866,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0872,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0877,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087c,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0887,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0888,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a1,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08a9,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08ab,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x091f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0928,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0929,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x092b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0935,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0938,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x093c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0945,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0957,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0959,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0963,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0965,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0966,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
+ packet(0x035f,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pReqClickBuyingStore,2);
+ packet(0x0815,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0835,clif->pPartyInvite2,2);
+ packet(0x0865,clif->pReqCloseBuyingStore,0);
+ packet(0x0866,clif->pDull/*,XXX*/);
+ packet(0x0872,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0877,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087c,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0887,clif->pChangeDir,2,4);
+ packet(0x0888,clif->pHomMenu,2,4);
+ packet(0x088e,clif->pUseSkillToId,2,4,6);
+ packet(0x08a1,clif->pGetCharNameRequest,2);
+ packet(0x08a9,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08ab,clif->pTakeItem,2);
+ packet(0x091c,clif->pWalkToXY,2);
+ packet(0x091f,clif->pTickSend,2);
+ packet(0x0928,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0929,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x092b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0935,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0938,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x093c,clif->pMoveToKafra,2,4);
+ packet(0x0945,clif->pActionRequest,2,6);
+ packet(0x0957,clif->pStoragePassword,0);
+ packet(0x0959,clif->pFriendsListAdd,2);
+ packet(0x0963,clif->pDropItem,2,4);
+ packet(0x0965,clif->pSolveCharName,2);
+ packet(0x0966,clif->pMoveFromKafra,2,4);
#endif
// 2012-08-01aRagexeRE, 2012-08-01bRagexeRE
#if PACKETVER == 20120801
- packet(0x0360,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0438,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x086a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0873,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0875,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x088b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0890,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0895,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x089c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x089d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a2,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08aa,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ab,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0917,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x092a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0930,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0934,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x093c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0941,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0946,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x094e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0964,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
+ packet(0x0360,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0438,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x085d,clif->pSolveCharName,2);
+ packet(0x086a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086b,clif->pGetCharNameRequest,2);
+ packet(0x086f,clif->pReqCloseBuyingStore,0);
+ packet(0x0873,clif->pUseSkillToId,2,4,6);
+ packet(0x0875,clif->pTakeItem,2);
+ packet(0x087b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x088b,clif->pHomMenu,2,4);
+ packet(0x0890,clif->pActionRequest,2,6);
+ packet(0x0895,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x089c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x089d,clif->pDropItem,2,4);
+ packet(0x089f,clif->pWalkToXY,2);
+ packet(0x08a2,clif->pFriendsListAdd,2);
+ packet(0x08aa,clif->pChangeDir,2,4);
+ packet(0x08ab,clif->pMoveFromKafra,2,4);
+ packet(0x0917,clif->pStoragePassword,0);
+ packet(0x091d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x092a,clif->pDull/*,XXX*/);
+ packet(0x092e,clif->pReqClickBuyingStore,2);
+ packet(0x0930,clif->pTickSend,2);
+ packet(0x0934,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x093c,clif->pPartyInvite2,2);
+ packet(0x0941,clif->pMoveToKafra,2,4);
+ packet(0x0946,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x094e,clif->pDull/*,XXX*/);
+ packet(0x0964,clif->pSearchStoreInfoListItemClick,2,6,10);
#endif
// 2012-08-08aRagexeRE, 2012-08-08bRagexeRE, 2012-08-08cRagexeRE, 2012-08-08dRagexeRE
#if PACKETVER == 20120808
- packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x093d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pFriendsListAdd,2);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085f,clif->pStoragePassword,0);
+ packet(0x088f,clif->pChangeDir,2,4);
+ packet(0x093d,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-08-14aRagexeRE, 2012-08-14bRagexeRE
#if PACKETVER == 20120814
- packet(0x0281,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0361,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0365,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0366,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0438,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x07ec,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0815,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0838,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x085e,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0861,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0862,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0865,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0868,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x086f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0875,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0882,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x088b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x088d,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0895,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08a8,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x091f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0920,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0929,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0932,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0934,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0941,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0967,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0969,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x0281,clif->pHomMenu,2,4);
+ packet(0x0361,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0365,clif->pSolveCharName,2);
+ packet(0x0366,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0438,clif->pTickSend,2);
+ packet(0x07ec,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0815,clif->pDropItem,2,4);
+ packet(0x0838,clif->pReqCloseBuyingStore,0);
+ packet(0x085e,clif->pMoveToKafra,2,4);
+ packet(0x0861,clif->pReqClickBuyingStore,2);
+ packet(0x0862,clif->pTakeItem,2);
+ packet(0x0865,clif->pMoveFromKafra,2,4);
+ packet(0x0868,clif->pActionRequest,2,6);
+ packet(0x086f,clif->pStoragePassword,0);
+ packet(0x0875,clif->pWalkToXY,2);
+ packet(0x087f,clif->pPartyInvite2,2);
+ packet(0x0882,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x088b,clif->pFriendsListAdd,2);
+ packet(0x088d,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0895,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08a8,clif->pDull/*,XXX*/);
+ packet(0x091f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0920,clif->pGetCharNameRequest,2);
+ packet(0x0929,clif->pDull/*,XXX*/);
+ packet(0x0932,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0934,clif->pUseSkillToId,2,4,6);
+ packet(0x0941,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0967,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0969,clif->pChangeDir,2,4);
#endif
// 2012-08-22aRagexeRE, 2012-08-22bRagexeRE, 2012-08-22cRagexeRE
#if PACKETVER == 20120822
- packet(0x0365,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0437,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x085a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x085d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x086e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0872,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x087d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0885,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0899,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a5,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08ab,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0917,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0924,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0927,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0935,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0937,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0940,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0943,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x094d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0953,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0955,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0958,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x095b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
+ packet(0x0365,clif->pFriendsListAdd,2);
+ packet(0x0437,clif->pTakeItem,2);
+ packet(0x085a,clif->pWalkToXY,2);
+ packet(0x085c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x085d,clif->pUseSkillToId,2,4,6);
+ packet(0x086b,clif->pSolveCharName,2);
+ packet(0x086e,clif->pChangeDir,2,4);
+ packet(0x0872,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x087d,clif->pTickSend,2);
+ packet(0x0885,clif->pDull/*,XXX*/);
+ packet(0x088a,clif->pMoveToKafra,2,4);
+ packet(0x0899,clif->pPartyInvite2,2);
+ packet(0x089f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a5,clif->pDull/*,XXX*/);
+ packet(0x08ab,clif->pActionRequest,2,6);
+ packet(0x0917,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0924,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0927,clif->pGetCharNameRequest,2);
+ packet(0x0935,clif->pHomMenu,2,4);
+ packet(0x0937,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0940,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0943,clif->pMoveFromKafra,2,4);
+ packet(0x094d,clif->pStoragePassword,0);
+ packet(0x094e,clif->pDropItem,2,4);
+ packet(0x0953,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0955,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0958,clif->pReqCloseBuyingStore,0);
+ packet(0x095b,clif->pReqClickBuyingStore,2);
#endif
// 2012-08-30aRagexeRE, 2012-08-30bRagexeRE
#if PACKETVER == 20120830
- packet(0x022d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0364,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0802,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0838,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0861,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0872,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0887,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0888,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0890,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x091d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0926,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0934,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0945,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x094b,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0964,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0364,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pPartyInvite2,2);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0802,clif->pStoragePassword,0);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pMoveToKafra,2,4);
+ packet(0x0838,clif->pHomMenu,2,4);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0861,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0872,clif->pFriendsListAdd,2);
+ packet(0x0887,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0888,clif->pDull/*,XXX*/);
+ packet(0x0890,clif->pDull/*,XXX*/);
+ packet(0x091d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0926,clif->pMoveFromKafra,2,4);
+ packet(0x0934,clif->pChangeDir,2,4);
+ packet(0x0945,clif->pDropItem,2,4);
+ packet(0x094b,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0964,clif->pTakeItem,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-09-05aRagexeRE
#if PACKETVER == 20120905
- packet(0x022d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0365,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0817,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x085a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x085d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0876,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0877,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0878,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087a,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x087e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0887,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0895,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0897,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a0,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a6,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0917,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0918,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x091a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0927,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x093c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0944,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0945,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0950,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0954,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0959,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0967,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
+ packet(0x022d,clif->pMoveToKafra,2,4);
+ packet(0x0365,clif->pDull/*,XXX*/);
+ packet(0x0817,clif->pStoragePassword,0);
+ packet(0x085a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x085d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086f,clif->pSolveCharName,2);
+ packet(0x0876,clif->pHomMenu,2,4);
+ packet(0x0877,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0878,clif->pWalkToXY,2);
+ packet(0x087a,clif->pUseSkillToId,2,4,6);
+ packet(0x087b,clif->pTickSend,2);
+ packet(0x087e,clif->pMoveFromKafra,2,4);
+ packet(0x0887,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0895,clif->pChangeDir,2,4);
+ packet(0x0897,clif->pTakeItem,2);
+ packet(0x08a0,clif->pDull/*,XXX*/);
+ packet(0x08a6,clif->pFriendsListAdd,2);
+ packet(0x0917,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0918,clif->pItemListWindowSelected,2,4,8);
+ packet(0x091a,clif->pGetCharNameRequest,2);
+ packet(0x0927,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x093c,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0944,clif->pPartyInvite2,2);
+ packet(0x0945,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0950,clif->pDropItem,2,4);
+ packet(0x0954,clif->pReqCloseBuyingStore,0);
+ packet(0x0959,clif->pReqClickBuyingStore,2);
+ packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0967,clif->pActionRequest,2,6);
#endif
// 2012-09-11aRagexeRE
#if PACKETVER == 20120911
- packet(0x0438,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0819,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0868,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0876,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0877,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0879,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x087a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x088f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a4,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a5,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08a6,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a7,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08ad,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0930,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0935,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0948,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0949,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094b,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0958,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0959,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0962,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0963,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0966,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0968,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x0438,clif->pTickSend,2);
+ packet(0x0819,clif->pMoveFromKafra,2,4);
+ packet(0x0868,clif->pTakeItem,2);
+ packet(0x086f,clif->pWalkToXY,2);
+ packet(0x0876,clif->pHomMenu,2,4);
+ packet(0x0877,clif->pPartyInvite2,2);
+ packet(0x0879,clif->pReqClickBuyingStore,2);
+ packet(0x087a,clif->pDull/*,XXX*/);
+ packet(0x088a,clif->pGetCharNameRequest,2);
+ packet(0x088f,clif->pFriendsListAdd,2);
+ packet(0x08a4,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x08a5,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08a6,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a7,clif->pDropItem,2,4);
+ packet(0x08ad,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0930,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0935,clif->pReqCloseBuyingStore,0);
+ packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0948,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0949,clif->pDull/*,XXX*/);
+ packet(0x094b,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0958,clif->pUseSkillToId,2,4,6);
+ packet(0x0959,clif->pActionRequest,2,6);
+ packet(0x0962,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0963,clif->pSolveCharName,2);
+ packet(0x0966,clif->pMoveToKafra,2,4);
+ packet(0x0968,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pStoragePassword,0);
#endif
// 2012-09-19aRagexeRE
#if PACKETVER == 20120919
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0956,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0956,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-09-25aRagexeRE, 2012-09-26aRagexeRE
#if PACKETVER == 20120925 || \
PACKETVER == 20120926
- packet(0x07e4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0815,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0819,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0835,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0838,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0869,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0873,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x087e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0887,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x088a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x089d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a4,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x091c,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x091e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0923,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0927,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0932,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0942,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0948,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0950,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0956,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0957,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0958,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x095e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0963,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
+ packet(0x07e4,clif->pDull/*,XXX*/);
+ packet(0x0815,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0819,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0835,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0838,clif->pGetCharNameRequest,2);
+ packet(0x085d,clif->pHomMenu,2,4);
+ packet(0x0869,clif->pMoveToKafra,2,4);
+ packet(0x0873,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087a,clif->pDropItem,2,4);
+ packet(0x087e,clif->pFriendsListAdd,2);
+ packet(0x0887,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x088a,clif->pPartyInvite2,2);
+ packet(0x088d,clif->pUseSkillToId,2,4,6);
+ packet(0x088f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x089d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a4,clif->pActionRequest,2,6);
+ packet(0x091c,clif->pSearchStoreInfoNextPage,0);
+ packet(0x091e,clif->pReqCloseBuyingStore,0);
+ packet(0x0923,clif->pTakeItem,2);
+ packet(0x0927,clif->pReqClickBuyingStore,2);
+ packet(0x0932,clif->pTickSend,2);
+ packet(0x0942,clif->pStoragePassword,0);
+ packet(0x0948,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0950,clif->pWalkToXY,2);
+ packet(0x0956,clif->pDull/*,XXX*/);
+ packet(0x0957,clif->pChangeDir,2,4);
+ packet(0x0958,clif->pSolveCharName,2);
+ packet(0x095e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0963,clif->pMoveFromKafra,2,4);
#endif
// 2012-10-10aRagexeRE, 2012-10-10bRagexeRE, 2012-10-11aRagexeRE
#if PACKETVER == 20121010 || \
PACKETVER == 20121011
- packet(0x0202,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0817,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0869,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0874,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0883,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0888,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0891,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0896,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0898,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a1,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a9,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0925,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0934,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x093c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0942,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0946,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0947,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x094c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0957,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0958,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0959,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x095c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0964,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0969,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x0202,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0817,clif->pGetCharNameRequest,2);
+ packet(0x085a,clif->pReqCloseBuyingStore,0);
+ packet(0x0869,clif->pTakeItem,2);
+ packet(0x086c,clif->pDull/*,XXX*/);
+ packet(0x0874,clif->pMoveFromKafra,2,4);
+ packet(0x087d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0883,clif->pWalkToXY,2);
+ packet(0x0888,clif->pDull/*,XXX*/);
+ packet(0x088f,clif->pPartyInvite2,2);
+ packet(0x0891,clif->pUseSkillToId,2,4,6);
+ packet(0x0896,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0898,clif->pStoragePassword,0);
+ packet(0x08a1,clif->pActionRequest,2,6);
+ packet(0x08a6,clif->pSolveCharName,2);
+ packet(0x08a9,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0925,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0934,clif->pTickSend,2);
+ packet(0x093c,clif->pMoveToKafra,2,4);
+ packet(0x0942,clif->pReqClickBuyingStore,2);
+ packet(0x0946,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0947,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x094c,clif->pDropItem,2,4);
+ packet(0x0957,clif->pChangeDir,2,4);
+ packet(0x0958,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0959,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x095c,clif->pHomMenu,2,4);
+ packet(0x0964,clif->pFriendsListAdd,2);
+ packet(0x0969,clif->pPartyBookingRegisterReq,2,4,6);
#endif
// 2012-10-17aRagexeRE, 2012-10-17bRagexeRE
#if PACKETVER == 20121017
- packet(0x023b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0868,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x086b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0887,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0888,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0897,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x089a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a6,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0918,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0920,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0960,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0962,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0965,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pPartyInvite2,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pMoveFromKafra,2,4);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0868,clif->pDull/*,XXX*/);
+ packet(0x086b,clif->pDropItem,2,4);
+ packet(0x0887,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0888,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0897,clif->pMoveToKafra,2,4);
+ packet(0x089a,clif->pFriendsListAdd,2);
+ packet(0x08a6,clif->pChangeDir,2,4);
+ packet(0x0918,clif->pStoragePassword,0);
+ packet(0x0920,clif->pDull/*,XXX*/);
+ packet(0x0960,clif->pHomMenu,2,4);
+ packet(0x0962,clif->pTakeItem,2);
+ packet(0x0965,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-10-24aRagexeRE
#if PACKETVER == 20121024
- packet(0x0436,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0437,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0438,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0817,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0838,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0868,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0872,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0875,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x087e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0882,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0888,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0889,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x088a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x089c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a9,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08aa,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0931,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0938,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x093a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0942,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0947,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0954,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0955,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x095d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0965,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x0436,clif->pWalkToXY,2);
+ packet(0x0437,clif->pUseSkillToId,2,4,6);
+ packet(0x0438,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0817,clif->pActionRequest,2,6);
+ packet(0x0838,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x085a,clif->pMoveFromKafra,2,4);
+ packet(0x0868,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0872,clif->pGetCharNameRequest,2);
+ packet(0x0875,clif->pDull/*,XXX*/);
+ packet(0x087a,clif->pMoveToKafra,2,4);
+ packet(0x087b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x087e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0882,clif->pStoragePassword,0);
+ packet(0x0888,clif->pHomMenu,2,4);
+ packet(0x0889,clif->pDropItem,2,4);
+ packet(0x088a,clif->pReqClickBuyingStore,2);
+ packet(0x089c,clif->pPartyInvite2,2);
+ packet(0x08a9,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08aa,clif->pChangeDir,2,4);
+ packet(0x0931,clif->pTakeItem,2);
+ packet(0x0938,clif->pReqCloseBuyingStore,0);
+ packet(0x093a,clif->pDull/*,XXX*/);
+ packet(0x0942,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0947,clif->pTickSend,2);
+ packet(0x0954,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0955,clif->pSearchStoreInfoNextPage,0);
+ packet(0x095d,clif->pFriendsListAdd,2);
+ packet(0x095e,clif->pSolveCharName,2);
+ packet(0x0965,clif->pWantToConnection,2,6,10,14,18);
#endif
// 2012-10-31aRagexeRE
#if PACKETVER == 20121031
- packet(0x022d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0871,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0877,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0898,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pTickSend,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pHomMenu,2,4);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pFriendsListAdd,2);
+ packet(0x0871,clif->pChangeDir,2,4);
+ packet(0x0877,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0898,clif->pStoragePassword,0);
+ packet(0x092b,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-11-07aRagexeRE
#if PACKETVER == 20121107
- packet(0x0360,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0361,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0365,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x085c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0861,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0865,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x086c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0871,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0873,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0878,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x087f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x088f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0890,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0891,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0896,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x089a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x089b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x08a2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08ad,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0922,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0934,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x093b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0945,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x094d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0960,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0963,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0966,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x096a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
+ packet(0x0360,clif->pTakeItem,2);
+ packet(0x0361,clif->pStoragePassword,0);
+ packet(0x0365,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x085c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0861,clif->pTickSend,2);
+ packet(0x0865,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x086c,clif->pHomMenu,2,4);
+ packet(0x086d,clif->pSolveCharName,2);
+ packet(0x0871,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0873,clif->pMoveToKafra,2,4);
+ packet(0x0878,clif->pPartyInvite2,2);
+ packet(0x087f,clif->pChangeDir,2,4);
+ packet(0x088f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0890,clif->pUseSkillToId,2,4,6);
+ packet(0x0891,clif->pMoveFromKafra,2,4);
+ packet(0x0896,clif->pReqClickBuyingStore,2);
+ packet(0x089a,clif->pActionRequest,2,6);
+ packet(0x089b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x08a2,clif->pReqCloseBuyingStore,0);
+ packet(0x08ad,clif->pGetCharNameRequest,2);
+ packet(0x0922,clif->pDull/*,XXX*/);
+ packet(0x0934,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x093b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0945,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x094d,clif->pWalkToXY,2);
+ packet(0x0960,clif->pDropItem,2,4);
+ packet(0x0963,clif->pDull/*,XXX*/);
+ packet(0x0966,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x096a,clif->pFriendsListAdd,2);
#endif
// 2012-11-14aRagexeRE
#if PACKETVER == 20121114
- packet(0x0364,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0365,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0437,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0815,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0838,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0862,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0876,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0879,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0881,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0898,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0899,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a9,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08aa,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08ab,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0930,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0935,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0938,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x093b,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x093c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0941,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0944,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0949,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x094b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x094f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x095c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0965,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x096a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x0364,clif->pStoragePassword,0);
+ packet(0x0365,clif->pHomMenu,2,4);
+ packet(0x0437,clif->pDropItem,2,4);
+ packet(0x0815,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0838,clif->pPartyInvite2,2);
+ packet(0x0862,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0876,clif->pSolveCharName,2);
+ packet(0x0879,clif->pGetCharNameRequest,2);
+ packet(0x0881,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0898,clif->pActionRequest,2,6);
+ packet(0x0899,clif->pWalkToXY,2);
+ packet(0x08a9,clif->pTickSend,2);
+ packet(0x08aa,clif->pReqCloseBuyingStore,0);
+ packet(0x08ab,clif->pChangeDir,2,4);
+ packet(0x091a,clif->pMoveFromKafra,2,4);
+ packet(0x0930,clif->pDull/*,XXX*/);
+ packet(0x0935,clif->pUseSkillToId,2,4,6);
+ packet(0x0938,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x093b,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x093c,clif->pMoveToKafra,2,4);
+ packet(0x0941,clif->pFriendsListAdd,2);
+ packet(0x0944,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0949,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x094a,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x094b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x094f,clif->pReqClickBuyingStore,2);
+ packet(0x095c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0965,clif->pTakeItem,2);
+ packet(0x096a,clif->pDull/*,XXX*/);
#endif
// 2012-11-21aRagexeRE
#if PACKETVER == 20121121
- packet(0x0202,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0362,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0437,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0863,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x086f,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0872,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0875,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087e,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0880,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0892,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0899,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089a,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a7,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08aa,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x091a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0921,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0927,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0929,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0938,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0946,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x094d,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0950,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0952,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0954,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0957,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0958,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
+ packet(0x0202,clif->pUseSkillToId,2,4,6);
+ packet(0x0362,clif->pReqCloseBuyingStore,0);
+ packet(0x0437,clif->pTakeItem,2);
+ packet(0x0863,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086d,clif->pSolveCharName,2);
+ packet(0x086f,clif->pMoveFromKafra,2,4);
+ packet(0x0872,clif->pGetCharNameRequest,2);
+ packet(0x0875,clif->pMoveToKafra,2,4);
+ packet(0x087e,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0880,clif->pChangeDir,2,4);
+ packet(0x0892,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0899,clif->pFriendsListAdd,2);
+ packet(0x089a,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x08a7,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08aa,clif->pActionRequest,2,6);
+ packet(0x091a,clif->pTickSend,2);
+ packet(0x0921,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0927,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0929,clif->pDull/*,XXX*/);
+ packet(0x0938,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0946,clif->pWalkToXY,2);
+ packet(0x094d,clif->pDull/*,XXX*/);
+ packet(0x0950,clif->pHomMenu,2,4);
+ packet(0x0952,clif->pDropItem,2,4);
+ packet(0x0954,clif->pStoragePassword,0);
+ packet(0x0957,clif->pPartyInvite2,2);
+ packet(0x0958,clif->pReqClickBuyingStore,2);
#endif
// 2012-11-28aRagexeRE
#if PACKETVER == 20121128
- packet(0x0362,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0363,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x07ec,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0802,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0861,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0867,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x086c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0872,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0888,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x088b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0894,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0895,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a8,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08ad,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x091b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x091c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x091e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x091f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0921,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0922,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0931,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0945,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0947,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0950,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0953,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0954,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0960,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
+ packet(0x0362,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0363,clif->pFriendsListAdd,2);
+ packet(0x07ec,clif->pPartyInvite2,2);
+ packet(0x0802,clif->pStoragePassword,0);
+ packet(0x0861,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0867,clif->pTickSend,2);
+ packet(0x086c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086e,clif->pDull/*,XXX*/);
+ packet(0x0872,clif->pUseSkillToId,2,4,6);
+ packet(0x0888,clif->pChangeDir,2,4);
+ packet(0x088b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0894,clif->pDull/*,XXX*/);
+ packet(0x0895,clif->pTakeItem,2);
+ packet(0x08a8,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08ad,clif->pWalkToXY,2);
+ packet(0x091b,clif->pSolveCharName,2);
+ packet(0x091c,clif->pGetCharNameRequest,2);
+ packet(0x091e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x091f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0921,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0922,clif->pMoveFromKafra,2,4);
+ packet(0x092f,clif->pReqClickBuyingStore,2);
+ packet(0x0931,clif->pActionRequest,2,6);
+ packet(0x0945,clif->pHomMenu,2,4);
+ packet(0x0947,clif->pReqCloseBuyingStore,0);
+ packet(0x0950,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0953,clif->pDropItem,2,4);
+ packet(0x0954,clif->pMoveToKafra,2,4);
+ packet(0x0960,clif->pReqTradeBuyingStore,2,4,8,12);
#endif
// 2012-12-05aRagexeRE, 2012-12-05bRagexeRE
#if PACKETVER == 20121205
- packet(0x035f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0360,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0815,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0863,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0864,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x086c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0870,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0873,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0875,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0878,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0888,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0889,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x088b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08ad,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x091a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x091c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0921,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x093a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x093e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0946,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x094b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0954,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0959,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0966,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0968,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x035f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0360,clif->pWalkToXY,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0815,clif->pTakeItem,2);
+ packet(0x0863,clif->pTickSend,2);
+ packet(0x0864,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x086c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0870,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0873,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0875,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0878,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0888,clif->pStoragePassword,0);
+ packet(0x0889,clif->pDropItem,2,4);
+ packet(0x088b,clif->pDull/*,XXX*/);
+ packet(0x089a,clif->pFriendsListAdd,2);
+ packet(0x089d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08ad,clif->pSolveCharName,2);
+ packet(0x091a,clif->pReqCloseBuyingStore,0);
+ packet(0x091c,clif->pMoveFromKafra,2,4);
+ packet(0x0921,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x093a,clif->pReqClickBuyingStore,2);
+ packet(0x093e,clif->pDull/*,XXX*/);
+ packet(0x093f,clif->pUseSkillToId,2,4,6);
+ packet(0x0946,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x094b,clif->pGetCharNameRequest,2);
+ packet(0x0954,clif->pActionRequest,2,6);
+ packet(0x0959,clif->pPartyInvite2,2);
+ packet(0x0966,clif->pMoveToKafra,2,4);
+ packet(0x0968,clif->pChangeDir,2,4);
#endif
// 2012-12-12aRagexeRE, 2012-12-12bRagexeRE, 2012-12-12cRagexeRE
#if PACKETVER == 20121212
- packet(0x0362,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0368,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0369,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0436,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0438,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0817,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x085c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0877,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x087d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0893,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0895,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a3,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a7,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a9,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08aa,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08ac,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0917,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091a,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0920,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0932,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0947,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0951,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0953,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0957,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x095b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0965,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0966,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0362,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0368,clif->pFriendsListAdd,2);
+ packet(0x0369,clif->pPartyInvite2,2);
+ packet(0x0436,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0438,clif->pReqCloseBuyingStore,0);
+ packet(0x0817,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x085c,clif->pActionRequest,2,6);
+ packet(0x0877,clif->pTickSend,2);
+ packet(0x087d,clif->pUseSkillToId,2,4,6);
+ packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0893,clif->pSolveCharName,2);
+ packet(0x0895,clif->pReqClickBuyingStore,2);
+ packet(0x08a3,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a7,clif->pWalkToXY,2);
+ packet(0x08a9,clif->pStoragePassword,0);
+ packet(0x08aa,clif->pDull/*,XXX*/);
+ packet(0x08ac,clif->pDropItem,2,4);
+ packet(0x0917,clif->pMoveFromKafra,2,4);
+ packet(0x091a,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0920,clif->pChangeDir,2,4);
+ packet(0x0932,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0947,clif->pHomMenu,2,4);
+ packet(0x0951,clif->pDull/*,XXX*/);
+ packet(0x0953,clif->pTakeItem,2);
+ packet(0x0957,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x095b,clif->pMoveToKafra,2,4);
+ packet(0x0965,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0966,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-12-18aRagexeRE, 2012-12-18bRagexeRE
#if PACKETVER == 20121218
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0363,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0867,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0872,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0886,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0889,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0890,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x091a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0935,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0946,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0957,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pUseSkillToId,2,4,6);
+ packet(0x0363,clif->pTakeItem,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pDropItem,2,4);
+ packet(0x0867,clif->pHomMenu,2,4);
+ packet(0x0872,clif->pDull/*,XXX*/);
+ packet(0x087a,clif->pChangeDir,2,4);
+ packet(0x087b,clif->pPartyInvite2,2);
+ packet(0x0886,clif->pMoveToKafra,2,4);
+ packet(0x0889,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0890,clif->pDull/*,XXX*/);
+ packet(0x091a,clif->pMoveFromKafra,2,4);
+ packet(0x091c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0935,clif->pFriendsListAdd,2);
+ packet(0x0946,clif->pStoragePassword,0);
+ packet(0x0957,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2012-12-27aRagexeRE
#if PACKETVER == 20121227
- packet(0x0202,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x02c4,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0361,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0368,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0437,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0860,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0870,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0872,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x087a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0886,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0888,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0890,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0894,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0896,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a6,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08aa,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0917,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x091f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0920,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0932,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0933,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0940,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0943,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0947,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0953,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0958,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x095d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0962,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
+ packet(0x0202,clif->pHomMenu,2,4);
+ packet(0x02c4,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0361,clif->pStoragePassword,0);
+ packet(0x0368,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0437,clif->pDropItem,2,4);
+ packet(0x0860,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0870,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0872,clif->pReqClickBuyingStore,2);
+ packet(0x087a,clif->pActionRequest,2,6);
+ packet(0x0886,clif->pMoveFromKafra,2,4);
+ packet(0x0888,clif->pTickSend,2);
+ packet(0x088e,clif->pChangeDir,2,4);
+ packet(0x0890,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0894,clif->pFriendsListAdd,2);
+ packet(0x0896,clif->pSolveCharName,2);
+ packet(0x08a6,clif->pTakeItem,2);
+ packet(0x08aa,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0917,clif->pReqCloseBuyingStore,0);
+ packet(0x091f,clif->pDull/*,XXX*/);
+ packet(0x0920,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0932,clif->pWalkToXY,2);
+ packet(0x0933,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0940,clif->pUseSkillToId,2,4,6);
+ packet(0x0943,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0947,clif->pGetCharNameRequest,2);
+ packet(0x0953,clif->pDull/*,XXX*/);
+ packet(0x0958,clif->pMoveToKafra,2,4);
+ packet(0x095d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0962,clif->pPartyInvite2,2);
#endif
// 2013-01-03aRagexeRE
#if PACKETVER == 20130103
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0940,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pDull/*,XXX*/);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pStoragePassword,0);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0940,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-01-09aRagexeRE
#if PACKETVER == 20130109
- packet(0x0281,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0365,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0368,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0437,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0838,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0866,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0886,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0888,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x088a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0891,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0892,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a2,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08aa,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08ac,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0918,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0922,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0927,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0928,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0930,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0931,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0938,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x093e,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0950,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0951,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0955,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x095e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x0281,clif->pGetCharNameRequest,2);
+ packet(0x0365,clif->pDull/*,XXX*/);
+ packet(0x0368,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0437,clif->pActionRequest,2,6);
+ packet(0x0838,clif->pMoveFromKafra,2,4);
+ packet(0x0866,clif->pWalkToXY,2);
+ packet(0x0886,clif->pMoveToKafra,2,4);
+ packet(0x0888,clif->pChangeDir,2,4);
+ packet(0x088a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0891,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0892,clif->pUseSkillToId,2,4,6);
+ packet(0x08a2,clif->pSolveCharName,2);
+ packet(0x08aa,clif->pDull/*,XXX*/);
+ packet(0x08ac,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0918,clif->pFriendsListAdd,2);
+ packet(0x091b,clif->pDropItem,2,4);
+ packet(0x0922,clif->pReqClickBuyingStore,2);
+ packet(0x0927,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0928,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0930,clif->pHomMenu,2,4);
+ packet(0x0931,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0938,clif->pPartyInvite2,2);
+ packet(0x093e,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x094f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0950,clif->pStoragePassword,0);
+ packet(0x0951,clif->pTickSend,2);
+ packet(0x0955,clif->pReqCloseBuyingStore,0);
+ packet(0x095e,clif->pTakeItem,2);
#endif
// 2013-01-15aRagexeRE, 2013-01-16aRagexeRE
#if PACKETVER == 20130115 || \
PACKETVER == 20130116
- packet(0x0361,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x07ec,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0817,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0861,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0863,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x086b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0870,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0871,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0877,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0879,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087c,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0888,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x088b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0894,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0895,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a0,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a4,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08ac,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0918,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0928,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x092d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0939,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0946,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x094b,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x095a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x0361,clif->pDull/*,XXX*/);
+ packet(0x07ec,clif->pDull/*,XXX*/);
+ packet(0x0817,clif->pWalkToXY,2);
+ packet(0x085e,clif->pReqCloseBuyingStore,0);
+ packet(0x0861,clif->pMoveFromKafra,2,4);
+ packet(0x0863,clif->pActionRequest,2,6);
+ packet(0x086b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0870,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0871,clif->pFriendsListAdd,2);
+ packet(0x0877,clif->pReqClickBuyingStore,2);
+ packet(0x0879,clif->pChangeDir,2,4);
+ packet(0x087c,clif->pSolveCharName,2);
+ packet(0x0888,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x088b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0894,clif->pHomMenu,2,4);
+ packet(0x0895,clif->pTickSend,2);
+ packet(0x08a0,clif->pPartyInvite2,2);
+ packet(0x08a4,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08ac,clif->pMoveToKafra,2,4);
+ packet(0x0918,clif->pUseSkillToId,2,4,6);
+ packet(0x0928,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x092d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0939,clif->pGetCharNameRequest,2);
+ packet(0x0946,clif->pItemListWindowSelected,2,4,8);
+ packet(0x094b,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x094c,clif->pTakeItem,2);
+ packet(0x094e,clif->pDropItem,2,4);
+ packet(0x095a,clif->pStoragePassword,0);
#endif
// 2013-01-21aRagexeRE
#if PACKETVER == 20130121
- packet(0x023b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x035f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07ec,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0802,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0815,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0817,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x085d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0874,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0884,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0893,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091f,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x094f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0956,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x095b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0963,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0969,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pReqCloseBuyingStore,0);
+ packet(0x035f,clif->pDull/*,XXX*/);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07ec,clif->pTickSend,2);
+ packet(0x0802,clif->pActionRequest,2,6);
+ packet(0x0815,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0817,clif->pStoragePassword,0);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pDull/*,XXX*/);
+ packet(0x085d,clif->pHomMenu,2,4);
+ packet(0x086c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0874,clif->pMoveToKafra,2,4);
+ packet(0x0884,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0893,clif->pFriendsListAdd,2);
+ packet(0x091f,clif->pTakeItem,2);
+ packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x094f,clif->pDropItem,2,4);
+ packet(0x0956,clif->pChangeDir,2,4);
+ packet(0x095b,clif->pPartyInvite2,2);
+ packet(0x0963,clif->pMoveFromKafra,2,4);
+ packet(0x0969,clif->pItemListWindowSelected,2,4,8);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-01-30aRagexeRE
#if PACKETVER == 20130130
- packet(0x035f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0362,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0367,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0368,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0437,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x085f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0862,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x086b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0885,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0886,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0887,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0889,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x089a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a0,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a4,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a9,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x091a,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0920,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0924,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x093a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0956,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0957,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x095b,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095d,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
+ packet(0x035f,clif->pMoveToKafra,2,4);
+ packet(0x0362,clif->pHomMenu,2,4);
+ packet(0x0367,clif->pGetCharNameRequest,2);
+ packet(0x0368,clif->pChangeDir,2,4);
+ packet(0x0437,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x085f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0862,clif->pReqCloseBuyingStore,0);
+ packet(0x086b,clif->pDull/*,XXX*/);
+ packet(0x087d,clif->pWalkToXY,2);
+ packet(0x087f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0885,clif->pActionRequest,2,6);
+ packet(0x0886,clif->pTakeItem,2);
+ packet(0x0887,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0889,clif->pTickSend,2);
+ packet(0x089a,clif->pPartyInvite2,2);
+ packet(0x089f,clif->pDropItem,2,4);
+ packet(0x08a0,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a4,clif->pUseSkillToId,2,4,6);
+ packet(0x08a9,clif->pDull/*,XXX*/);
+ packet(0x091a,clif->pSolveCharName,2);
+ packet(0x0920,clif->pFriendsListAdd,2);
+ packet(0x0924,clif->pReqClickBuyingStore,2);
+ packet(0x093a,clif->pStoragePassword,0);
+ packet(0x093d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0956,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0957,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x095b,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x095c,clif->pMoveFromKafra,2,4);
+ packet(0x095d,clif->pSearchStoreInfoNextPage,0);
#endif
// 2013-02-06aRagexeRE
#if PACKETVER == 20130206
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0811,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0876,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0883,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0885,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0899,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a0,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ac,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0920,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0925,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x093a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x093c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0950,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pStoragePassword,0);
+ packet(0x0811,clif->pTakeItem,2);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085d,clif->pMoveFromKafra,2,4);
+ packet(0x0876,clif->pDull/*,XXX*/);
+ packet(0x0883,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0885,clif->pMoveToKafra,2,4);
+ packet(0x0899,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a0,clif->pChangeDir,2,4);
+ packet(0x08ac,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0920,clif->pPartyInvite2,2);
+ packet(0x0925,clif->pDropItem,2,4);
+ packet(0x093a,clif->pHomMenu,2,4);
+ packet(0x093c,clif->pFriendsListAdd,2);
+ packet(0x0950,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-02-15aRagexeRE
#if PACKETVER == 20130215
- packet(0x023b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0366,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0869,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x086f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0886,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08ad,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0923,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0941,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0956,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x095d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0962,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pReqClickBuyingStore,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pStoragePassword,0);
+ packet(0x0366,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0869,clif->pMoveToKafra,2,4);
+ packet(0x086f,clif->pDull/*,XXX*/);
+ packet(0x0886,clif->pDropItem,2,4);
+ packet(0x089e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089f,clif->pDull/*,XXX*/);
+ packet(0x08ad,clif->pTakeItem,2);
+ packet(0x0923,clif->pHomMenu,2,4);
+ packet(0x0941,clif->pFriendsListAdd,2);
+ packet(0x0956,clif->pPartyInvite2,2);
+ packet(0x095d,clif->pChangeDir,2,4);
+ packet(0x0962,clif->pMoveFromKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-02-20bRagexeRE
#if PACKETVER == 20130220
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x094b,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-02-27aRagexeRE
#if PACKETVER == 20130227
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x035f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0360,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0811,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0815,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0817,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085a,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0863,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0867,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0869,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x086e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0893,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0898,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a0,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08a1,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x091b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x091f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0924,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x092b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x092f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0936,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0946,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0951,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x095b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x095e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0967,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x035f,clif->pHomMenu,2,4);
+ packet(0x0360,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0811,clif->pTickSend,2);
+ packet(0x0815,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0817,clif->pReqClickBuyingStore,2);
+ packet(0x085a,clif->pUseSkillToId,2,4,6);
+ packet(0x0863,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0867,clif->pTakeItem,2);
+ packet(0x0869,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x086e,clif->pDull/*,XXX*/);
+ packet(0x087b,clif->pPartyInvite2,2);
+ packet(0x0893,clif->pMoveFromKafra,2,4);
+ packet(0x0898,clif->pChangeDir,2,4);
+ packet(0x08a0,clif->pReqCloseBuyingStore,0);
+ packet(0x08a1,clif->pDull/*,XXX*/);
+ packet(0x091b,clif->pGetCharNameRequest,2);
+ packet(0x091f,clif->pDropItem,2,4);
+ packet(0x0924,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x092b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x092f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0936,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0946,clif->pMoveToKafra,2,4);
+ packet(0x0951,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x095b,clif->pSolveCharName,2);
+ packet(0x095e,clif->pStoragePassword,0);
+ packet(0x095f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0967,clif->pActionRequest,2,6);
#endif
// 2013-03-06aRagexeRE, 2013-03-06bRagexeRE
#if PACKETVER == 20130306
- packet(0x022d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0367,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0368,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0802,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0817,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x085b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085c,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0860,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x086d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0881,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0890,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0898,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x089f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a4,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08ac,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0917,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091e,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0926,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0934,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0936,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0943,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0945,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0946,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x094a,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0951,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0960,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0962,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x022d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0367,clif->pSolveCharName,2);
+ packet(0x0368,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0802,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0817,clif->pHomMenu,2,4);
+ packet(0x085b,clif->pWalkToXY,2);
+ packet(0x085c,clif->pReqClickBuyingStore,2);
+ packet(0x0860,clif->pChangeDir,2,4);
+ packet(0x086d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0881,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0890,clif->pDull/*,XXX*/);
+ packet(0x0898,clif->pActionRequest,2,6);
+ packet(0x089f,clif->pTickSend,2);
+ packet(0x08a4,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08ac,clif->pDull/*,XXX*/);
+ packet(0x0917,clif->pMoveFromKafra,2,4);
+ packet(0x091e,clif->pMoveToKafra,2,4);
+ packet(0x0926,clif->pStoragePassword,0);
+ packet(0x0934,clif->pFriendsListAdd,2);
+ packet(0x0936,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0943,clif->pUseSkillToId,2,4,6);
+ packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0945,clif->pReqCloseBuyingStore,0);
+ packet(0x0946,clif->pPartyInvite2,2);
+ packet(0x094a,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x094e,clif->pGetCharNameRequest,2);
+ packet(0x0951,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0960,clif->pDropItem,2,4);
+ packet(0x0962,clif->pTakeItem,2);
#endif
// 2013-03-13aRagexeRE, 2013-03-13bRagexeRE, 2013-03-13cRagexeRE
#if PACKETVER == 20130313
- packet(0x0202,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0887,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0920,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0947,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pPartyInvite2,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pFriendsListAdd,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0887,clif->pChangeDir,2,4);
+ packet(0x0920,clif->pStoragePassword,0);
+ packet(0x092d,clif->pHomMenu,2,4);
+ packet(0x0947,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-03-20bRagexeRE, 2013-03-20cRagexeRE
#if PACKETVER == 20130320
- packet(0x035f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0363,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0365,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0438,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x085a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x085d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0868,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x086f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0874,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0881,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0886,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0888,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0890,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0897,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0898,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08ac,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0922,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x092e,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0933,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0938,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x093f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0947,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094c,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x094e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0959,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x095a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x035f,clif->pReqClickBuyingStore,2);
+ packet(0x0363,clif->pTickSend,2);
+ packet(0x0365,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0438,clif->pDropItem,2,4);
+ packet(0x085a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x085d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0868,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086d,clif->pPartyInvite2,2);
+ packet(0x086f,clif->pFriendsListAdd,2);
+ packet(0x0874,clif->pMoveFromKafra,2,4);
+ packet(0x0881,clif->pWalkToXY,2);
+ packet(0x0886,clif->pReqCloseBuyingStore,0);
+ packet(0x0888,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088e,clif->pActionRequest,2,6);
+ packet(0x0890,clif->pDull/*,XXX*/);
+ packet(0x0897,clif->pChangeDir,2,4);
+ packet(0x0898,clif->pGetCharNameRequest,2);
+ packet(0x089b,clif->pUseSkillToId,2,4,6);
+ packet(0x08ac,clif->pMoveToKafra,2,4);
+ packet(0x0922,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x092e,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0933,clif->pTakeItem,2);
+ packet(0x0938,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x093f,clif->pHomMenu,2,4);
+ packet(0x0947,clif->pStoragePassword,0);
+ packet(0x094c,clif->pSolveCharName,2);
+ packet(0x094e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0959,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x095a,clif->pDull/*,XXX*/);
#endif
// 2013-03-27bRagexeRE
#if PACKETVER == 20130327
- packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x07ec,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0835,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0873,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0878,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x087a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0885,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x088f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0891,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0893,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0899,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a1,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08a2,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x091f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x092b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x092d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x092e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0933,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0938,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0939,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x094a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x094b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0955,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0960,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0961,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0967,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
+ packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x07ec,clif->pReqClickBuyingStore,2);
+ packet(0x0835,clif->pHomMenu,2,4);
+ packet(0x086d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0873,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0878,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x087a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0885,clif->pDropItem,2,4);
+ packet(0x088f,clif->pUseSkillToId,2,4,6);
+ packet(0x0891,clif->pMoveToKafra,2,4);
+ packet(0x0893,clif->pReqCloseBuyingStore,0);
+ packet(0x0899,clif->pTakeItem,2);
+ packet(0x08a1,clif->pGetCharNameRequest,2);
+ packet(0x08a2,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x091f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x092b,clif->pWalkToXY,2);
+ packet(0x092d,clif->pPartyInvite2,2);
+ packet(0x092e,clif->pDull/*,XXX*/);
+ packet(0x092f,clif->pDull/*,XXX*/);
+ packet(0x0933,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0938,clif->pMoveFromKafra,2,4);
+ packet(0x0939,clif->pTickSend,2);
+ packet(0x094a,clif->pChangeDir,2,4);
+ packet(0x094b,clif->pStoragePassword,0);
+ packet(0x094f,clif->pFriendsListAdd,2);
+ packet(0x0955,clif->pActionRequest,2,6);
+ packet(0x0960,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0961,clif->pSolveCharName,2);
+ packet(0x0967,clif->pItemListWindowSelected,2,4,8);
#endif
// 2013-04-03aRagexeRE
#if PACKETVER == 20130403
- packet(0x023b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0884,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a5,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0926,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0942,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0950,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pReqClickBuyingStore,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pStoragePassword,0);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0884,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a5,clif->pDull/*,XXX*/);
+ packet(0x0926,clif->pHomMenu,2,4);
+ packet(0x0942,clif->pChangeDir,2,4);
+ packet(0x0950,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-04-10aRagexeRE
#if PACKETVER == 20130410
- packet(0x0367,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0437,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0860,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0865,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x086c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0879,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0881,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x088c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0890,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0891,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x089c,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08a0,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08a7,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0917,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x091d,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0933,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0939,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x093d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0944,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0945,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0955,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0960,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0967,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x096a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
+ packet(0x0367,clif->pReqClickBuyingStore,2);
+ packet(0x0437,clif->pTakeItem,2);
+ packet(0x0860,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0865,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x086c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0879,clif->pMoveToKafra,2,4);
+ packet(0x087c,clif->pWalkToXY,2);
+ packet(0x087d,clif->pGetCharNameRequest,2);
+ packet(0x0881,clif->pReqCloseBuyingStore,0);
+ packet(0x088c,clif->pStoragePassword,0);
+ packet(0x088d,clif->pHomMenu,2,4);
+ packet(0x0890,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0891,clif->pDull/*,XXX*/);
+ packet(0x089c,clif->pSolveCharName,2);
+ packet(0x089e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08a0,clif->pTickSend,2);
+ packet(0x08a4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08a7,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0917,clif->pPartyInvite2,2);
+ packet(0x091d,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0933,clif->pUseSkillToId,2,4,6);
+ packet(0x0939,clif->pActionRequest,2,6);
+ packet(0x093d,clif->pMoveFromKafra,2,4);
+ packet(0x0944,clif->pDull/*,XXX*/);
+ packet(0x0945,clif->pChangeDir,2,4);
+ packet(0x0955,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0960,clif->pFriendsListAdd,2);
+ packet(0x0967,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x096a,clif->pDropItem,2,4);
#endif
// 2013-04-17aRagexeRE
#if PACKETVER == 20130417
- packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0875,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0929,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0962,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0969,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x096a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pFriendsListAdd,2);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0875,clif->pStoragePassword,0);
+ packet(0x0929,clif->pChangeDir,2,4);
+ packet(0x0962,clif->pHomMenu,2,4);
+ packet(0x0969,clif->pGetCharNameRequest,2);
+ packet(0x096a,clif->pDull/*,XXX*/);
#endif
// 2013-04-24aRagexeRE
#if PACKETVER == 20130424
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0969,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0969,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-05-02aRagexeRE
#if PACKETVER == 20130502
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x07ec,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0867,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0870,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0874,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0875,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0877,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0888,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0889,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a1,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a3,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0961,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0967,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pStoragePassword,0);
+ packet(0x07ec,clif->pChangeDir,2,4);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pDull/*,XXX*/);
+ packet(0x0867,clif->pHomMenu,2,4);
+ packet(0x0870,clif->pPartyInvite2,2);
+ packet(0x0874,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0875,clif->pFriendsListAdd,2);
+ packet(0x0877,clif->pMoveToKafra,2,4);
+ packet(0x087c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0888,clif->pGetCharNameRequest,2);
+ packet(0x0889,clif->pDull/*,XXX*/);
+ packet(0x08a1,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a3,clif->pDropItem,2,4);
+ packet(0x0961,clif->pMoveFromKafra,2,4);
+ packet(0x0967,clif->pTakeItem,2);
#endif
// 2013-05-08bRagexeRE
#if PACKETVER == 20130508
- packet(0x022d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0868,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0878,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0893,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0895,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0897,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08ab,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x092d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0944,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0957,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pMoveToKafra,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pFriendsListAdd,2);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0868,clif->pStoragePassword,0);
+ packet(0x0878,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088b,clif->pTakeItem,2);
+ packet(0x0893,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0895,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0897,clif->pDull/*,XXX*/);
+ packet(0x08ab,clif->pPartyInvite2,2);
+ packet(0x092d,clif->pDropItem,2,4);
+ packet(0x0944,clif->pDull/*,XXX*/);
+ packet(0x094d,clif->pHomMenu,2,4);
+ packet(0x0957,clif->pMoveFromKafra,2,4);
+ packet(0x095c,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-05-15aRagexeRE
#if PACKETVER == 20130515
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0862,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0887,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a1,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08aa,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08ac,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0931,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x093e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0943,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0944,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0947,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0962,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0963,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pChangeDir,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0862,clif->pDull/*,XXX*/);
+ packet(0x0887,clif->pMoveToKafra,2,4);
+ packet(0x08a1,clif->pTakeItem,2);
+ packet(0x08aa,clif->pDull/*,XXX*/);
+ packet(0x08ac,clif->pMoveFromKafra,2,4);
+ packet(0x092d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0931,clif->pHomMenu,2,4);
+ packet(0x093e,clif->pStoragePassword,0);
+ packet(0x0943,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0944,clif->pDropItem,2,4);
+ packet(0x0947,clif->pPartyInvite2,2);
+ packet(0x0962,clif->pFriendsListAdd,2);
+ packet(0x0963,clif->pItemListWindowSelected,2,4,8);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-05-22aRagexeRE
#if PACKETVER == 20130522
- packet(0x0360,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0362,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0368,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0369,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x07ec,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0811,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0874,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x088e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x089c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a2,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a3,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a6,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08a9,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08aa,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x08ac,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0925,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0926,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0950,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0952,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x095b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x095c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x095e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0964,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0965,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x0360,clif->pWalkToXY,2);
+ packet(0x0362,clif->pFriendsListAdd,2);
+ packet(0x0368,clif->pReqClickBuyingStore,2);
+ packet(0x0369,clif->pSolveCharName,2);
+ packet(0x07ec,clif->pTickSend,2);
+ packet(0x0811,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086e,clif->pReqCloseBuyingStore,0);
+ packet(0x0874,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087e,clif->pMoveFromKafra,2,4);
+ packet(0x088e,clif->pStoragePassword,0);
+ packet(0x089b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x089c,clif->pDropItem,2,4);
+ packet(0x08a2,clif->pActionRequest,2,6);
+ packet(0x08a3,clif->pMoveToKafra,2,4);
+ packet(0x08a6,clif->pGetCharNameRequest,2);
+ packet(0x08a9,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08aa,clif->pSearchStoreInfoNextPage,0);
+ packet(0x08ac,clif->pDull/*,XXX*/);
+ packet(0x0925,clif->pChangeDir,2,4);
+ packet(0x0926,clif->pHomMenu,2,4);
+ packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0950,clif->pPartyInvite2,2);
+ packet(0x0952,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x095b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x095c,clif->pUseSkillToId,2,4,6);
+ packet(0x095e,clif->pTakeItem,2);
+ packet(0x0964,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0965,clif->pDull/*,XXX*/);
#endif
// 2013-05-29aRagexeRE
#if PACKETVER == 20130529
- packet(0x023b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0438,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x085e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0863,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0869,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0874,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0876,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0877,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0888,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0890,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0892,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0895,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0897,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a7,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a8,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0917,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0918,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0919,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0936,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0937,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0938,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0941,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0951,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0956,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0957,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0958,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0964,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
+ packet(0x023b,clif->pHomMenu,2,4);
+ packet(0x0438,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x085e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0863,clif->pGetCharNameRequest,2);
+ packet(0x0869,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0874,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0876,clif->pWalkToXY,2);
+ packet(0x0877,clif->pFriendsListAdd,2);
+ packet(0x0888,clif->pDull/*,XXX*/);
+ packet(0x088e,clif->pDull/*,XXX*/);
+ packet(0x0890,clif->pActionRequest,2,6);
+ packet(0x0892,clif->pReqClickBuyingStore,2);
+ packet(0x0895,clif->pTakeItem,2);
+ packet(0x0897,clif->pTickSend,2);
+ packet(0x08a7,clif->pDropItem,2,4);
+ packet(0x08a8,clif->pPartyInvite2,2);
+ packet(0x0917,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0918,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0919,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0936,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0937,clif->pSolveCharName,2);
+ packet(0x0938,clif->pMoveToKafra,2,4);
+ packet(0x0941,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0951,clif->pChangeDir,2,4);
+ packet(0x0956,clif->pStoragePassword,0);
+ packet(0x0957,clif->pMoveFromKafra,2,4);
+ packet(0x0958,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0964,clif->pReqCloseBuyingStore,0);
#endif
// 2013-06-05cRagexeRE
#if PACKETVER == 20130605
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0883,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0883,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-06-12bRagexeRE
#if PACKETVER == 20130612
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0919,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x093a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0964,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087e,clif->pChangeDir,2,4);
+ packet(0x0919,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x093a,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pFriendsListAdd,2);
+ packet(0x0964,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-06-18#1aRagexeRE
#if PACKETVER == 20130618
- packet(0x0281,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x02c4,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0363,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x085a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0862,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0864,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0878,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0885,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0887,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0889,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x088e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0890,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0891,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08a6,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a7,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0917,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0930,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0932,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0936,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0942,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0944,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0945,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x094f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0951,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0953,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0962,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x096a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x0281,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x02c4,clif->pHomMenu,2,4);
+ packet(0x0363,clif->pSearchStoreInfoNextPage,0);
+ packet(0x085a,clif->pReqCloseBuyingStore,0);
+ packet(0x0862,clif->pReqClickBuyingStore,2);
+ packet(0x0864,clif->pStoragePassword,0);
+ packet(0x0878,clif->pDull/*,XXX*/);
+ packet(0x087a,clif->pDull/*,XXX*/);
+ packet(0x0885,clif->pMoveToKafra,2,4);
+ packet(0x0887,clif->pPartyInvite2,2);
+ packet(0x0889,clif->pActionRequest,2,6);
+ packet(0x088e,clif->pWalkToXY,2);
+ packet(0x0890,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0891,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08a6,clif->pChangeDir,2,4);
+ packet(0x08a7,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0917,clif->pDropItem,2,4);
+ packet(0x0930,clif->pTickSend,2);
+ packet(0x0932,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0936,clif->pMoveFromKafra,2,4);
+ packet(0x0942,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0944,clif->pGetCharNameRequest,2);
+ packet(0x0945,clif->pSolveCharName,2);
+ packet(0x094f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0951,clif->pUseSkillToId,2,4,6);
+ packet(0x0953,clif->pFriendsListAdd,2);
+ packet(0x095b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0962,clif->pTakeItem,2);
+ packet(0x096a,clif->pUseSkillToPos,2,4,6,8);
#endif
// 2013-06-26_3bRagexeRE, 2013-06-26aRagexeRE
#if PACKETVER == 20130626
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0860,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x088c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0894,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0895,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a5,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08ab,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0921,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0930,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0952,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0960,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pReqCloseBuyingStore,0);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pMoveFromKafra,2,4);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0860,clif->pDull/*,XXX*/);
+ packet(0x088b,clif->pTakeItem,2);
+ packet(0x088c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088f,clif->pDull/*,XXX*/);
+ packet(0x0894,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0895,clif->pPartyInvite2,2);
+ packet(0x08a5,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08ab,clif->pFriendsListAdd,2);
+ packet(0x0921,clif->pMoveToKafra,2,4);
+ packet(0x0930,clif->pStoragePassword,0);
+ packet(0x094d,clif->pChangeDir,2,4);
+ packet(0x0952,clif->pDropItem,2,4);
+ packet(0x0960,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-07-03bRagexeRE
#if PACKETVER == 20130703
- packet(0x0202,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0873,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0930,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x094a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pReqClickBuyingStore,2);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pFriendsListAdd,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0873,clif->pStoragePassword,0);
+ packet(0x0930,clif->pChangeDir,2,4);
+ packet(0x094a,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-07-10aRagexeRE, 2013-07-10bRagexeRE, 2013-07-10cRagexeRE, 2013-07-10dRagexeRE, 2013-07-10eRagexeRE
#if PACKETVER == 20130710
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0880,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0880,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-07-17cRagexeRE, 2013-07-17dRagexeRE, 2013-07-17eRagexeRE
#if PACKETVER == 20130717
- packet(0x02c4,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0819,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x083c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0862,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0863,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x086b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0882,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x088a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0897,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0898,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x089b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a6,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a9,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08aa,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0917,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0918,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x091d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x091e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x092f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x093b,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0956,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0958,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x095b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0960,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0967,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x096a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
+ packet(0x02c4,clif->pTickSend,2);
+ packet(0x0819,clif->pSearchStoreInfoNextPage,0);
+ packet(0x083c,clif->pWalkToXY,2);
+ packet(0x0862,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0863,clif->pFriendsListAdd,2);
+ packet(0x086b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086c,clif->pDull/*,XXX*/);
+ packet(0x0882,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x088a,clif->pHomMenu,2,4);
+ packet(0x088c,clif->pChangeDir,2,4);
+ packet(0x0897,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0898,clif->pReqClickBuyingStore,2);
+ packet(0x089b,clif->pMoveToKafra,2,4);
+ packet(0x08a6,clif->pDull/*,XXX*/);
+ packet(0x08a9,clif->pTakeItem,2);
+ packet(0x08aa,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0917,clif->pDropItem,2,4);
+ packet(0x0918,clif->pActionRequest,2,6);
+ packet(0x091d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x091e,clif->pUseSkillToId,2,4,6);
+ packet(0x092f,clif->pPartyInvite2,2);
+ packet(0x093b,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0956,clif->pMoveFromKafra,2,4);
+ packet(0x0958,clif->pGetCharNameRequest,2);
+ packet(0x095b,clif->pStoragePassword,0);
+ packet(0x0960,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0967,clif->pSolveCharName,2);
+ packet(0x096a,clif->pReqCloseBuyingStore,0);
#endif
// 2013-07-24eRagexeRE, 2013-07-24fRagexeRE
#if PACKETVER == 20130724
- packet(0x023b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0437,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x085a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0860,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0867,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086a,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0874,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0876,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0890,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0891,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0893,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x089c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08ab,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0921,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0924,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0927,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x092b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x094a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0953,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0954,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0956,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0958,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x095c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x095d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0965,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0966,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x023b,clif->pReqCloseBuyingStore,0);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0437,clif->pDull/*,XXX*/);
+ packet(0x085a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x085e,clif->pMoveFromKafra,2,4);
+ packet(0x0860,clif->pStoragePassword,0);
+ packet(0x0867,clif->pGetCharNameRequest,2);
+ packet(0x086a,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0874,clif->pHomMenu,2,4);
+ packet(0x0876,clif->pActionRequest,2,6);
+ packet(0x0890,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0891,clif->pDropItem,2,4);
+ packet(0x0893,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x089c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08ab,clif->pDull/*,XXX*/);
+ packet(0x0921,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0924,clif->pReqClickBuyingStore,2);
+ packet(0x0927,clif->pPartyInvite2,2);
+ packet(0x092b,clif->pFriendsListAdd,2);
+ packet(0x092e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x094a,clif->pTakeItem,2);
+ packet(0x0953,clif->pWalkToXY,2);
+ packet(0x0954,clif->pSolveCharName,2);
+ packet(0x0956,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0958,clif->pUseSkillToId,2,4,6);
+ packet(0x095c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x095d,clif->pMoveToKafra,2,4);
+ packet(0x0965,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0966,clif->pChangeDir,2,4);
#endif
// 2013-07-31cRagexeRE
#if PACKETVER == 20130731
- packet(0x022d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0366,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0863,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0865,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0878,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x087e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0884,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0889,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0894,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0895,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0923,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0925,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x092b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0935,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0941,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x094c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0956,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0957,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0958,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x095d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x095f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0962,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
+ packet(0x022d,clif->pFriendsListAdd,2);
+ packet(0x0366,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pChangeDir,2,4);
+ packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0863,clif->pReqClickBuyingStore,2);
+ packet(0x0865,clif->pUseSkillToId,2,4,6);
+ packet(0x0878,clif->pActionRequest,2,6);
+ packet(0x087e,clif->pReqCloseBuyingStore,0);
+ packet(0x0884,clif->pStoragePassword,0);
+ packet(0x0889,clif->pDull/*,XXX*/);
+ packet(0x088b,clif->pGetCharNameRequest,2);
+ packet(0x0894,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0895,clif->pDull/*,XXX*/);
+ packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0923,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0925,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x092b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092d,clif->pHomMenu,2,4);
+ packet(0x0935,clif->pTakeItem,2);
+ packet(0x0941,clif->pMoveToKafra,2,4);
+ packet(0x094c,clif->pMoveFromKafra,2,4);
+ packet(0x0956,clif->pPartyInvite2,2);
+ packet(0x0957,clif->pSolveCharName,2);
+ packet(0x0958,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x095d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x095f,clif->pTickSend,2);
+ packet(0x0962,clif->pDropItem,2,4);
#endif
// 2013-08-07aRagexeRE
#if PACKETVER == 20130807
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0887,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0887,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-08-14aRagexeRE
#if PACKETVER == 20130814
- packet(0x0202,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0281,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0368,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0815,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0835,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0868,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0873,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0874,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0885,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0887,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0889,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0895,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0896,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a4,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0923,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0926,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0927,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0936,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0937,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x093a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0941,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0947,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0958,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0959,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0962,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
+ packet(0x0202,clif->pMoveToKafra,2,4);
+ packet(0x0281,clif->pFriendsListAdd,2);
+ packet(0x0368,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0815,clif->pDull/*,XXX*/);
+ packet(0x0835,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0868,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0873,clif->pMoveFromKafra,2,4);
+ packet(0x0874,clif->pActionRequest,2,6);
+ packet(0x0885,clif->pStoragePassword,0);
+ packet(0x0887,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0889,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088a,clif->pTickSend,2);
+ packet(0x088c,clif->pChangeDir,2,4);
+ packet(0x0895,clif->pReqClickBuyingStore,2);
+ packet(0x0896,clif->pDull/*,XXX*/);
+ packet(0x08a4,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0923,clif->pSolveCharName,2);
+ packet(0x0926,clif->pTakeItem,2);
+ packet(0x0927,clif->pPartyInvite2,2);
+ packet(0x0936,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0937,clif->pGetCharNameRequest,2);
+ packet(0x093a,clif->pWalkToXY,2);
+ packet(0x0941,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0947,clif->pUseSkillToId,2,4,6);
+ packet(0x094e,clif->pReqCloseBuyingStore,0);
+ packet(0x0958,clif->pHomMenu,2,4);
+ packet(0x0959,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x095f,clif->pDropItem,2,4);
+ packet(0x0962,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
#endif
// 2013-08-21dRagexeRE
#if PACKETVER == 20130821
- packet(0x0202,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0360,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0437,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0438,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x07ec,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0815,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0862,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0863,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x086e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0879,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0881,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x088d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0892,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a6,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08ad,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x091d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0923,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x093e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0947,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0954,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x095e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0962,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0964,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0967,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0969,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
+ packet(0x0202,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0360,clif->pStoragePassword,0);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0437,clif->pMoveToKafra,2,4);
+ packet(0x0438,clif->pDull/*,XXX*/);
+ packet(0x07ec,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0815,clif->pWalkToXY,2);
+ packet(0x0862,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0863,clif->pActionRequest,2,6);
+ packet(0x086e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0879,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0881,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x088d,clif->pTickSend,2);
+ packet(0x088f,clif->pFriendsListAdd,2);
+ packet(0x0892,clif->pReqClickBuyingStore,2);
+ packet(0x08a6,clif->pReqCloseBuyingStore,0);
+ packet(0x08ad,clif->pDull/*,XXX*/);
+ packet(0x091d,clif->pChangeDir,2,4);
+ packet(0x0923,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092d,clif->pGetCharNameRequest,2);
+ packet(0x093e,clif->pMoveFromKafra,2,4);
+ packet(0x0947,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0954,clif->pUseSkillToId,2,4,6);
+ packet(0x095e,clif->pSolveCharName,2);
+ packet(0x0962,clif->pTakeItem,2);
+ packet(0x0964,clif->pDropItem,2,4);
+ packet(0x0967,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0969,clif->pPartyInvite2,2);
#endif
// 2013-08-28bRagexeRE, 2013-08-28cRagexeRE
#if PACKETVER == 20130828
- packet(0x023b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0361,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0364,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x07ec,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0817,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0873,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x087e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0889,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0893,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a3,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08ac,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0917,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0919,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x091e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0923,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0924,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0928,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0929,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0930,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0944,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0946,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x094c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x094f,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x095d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0966,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x023b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0361,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0364,clif->pDull/*,XXX*/);
+ packet(0x07ec,clif->pReqClickBuyingStore,2);
+ packet(0x0817,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0873,clif->pSearchStoreInfoNextPage,0);
+ packet(0x087e,clif->pDropItem,2,4);
+ packet(0x0889,clif->pHomMenu,2,4);
+ packet(0x0893,clif->pStoragePassword,0);
+ packet(0x089e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089f,clif->pChangeDir,2,4);
+ packet(0x08a3,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08ac,clif->pGetCharNameRequest,2);
+ packet(0x0917,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0919,clif->pReqCloseBuyingStore,0);
+ packet(0x091e,clif->pTakeItem,2);
+ packet(0x0923,clif->pUseSkillToId,2,4,6);
+ packet(0x0924,clif->pTickSend,2);
+ packet(0x0928,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0929,clif->pMoveFromKafra,2,4);
+ packet(0x0930,clif->pSolveCharName,2);
+ packet(0x0944,clif->pFriendsListAdd,2);
+ packet(0x0946,clif->pDull/*,XXX*/);
+ packet(0x094a,clif->pPartyInvite2,2);
+ packet(0x094c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x094f,clif->pActionRequest,2,6);
+ packet(0x095d,clif->pWalkToXY,2);
+ packet(0x0966,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pWantToConnection,2,6,10,14,18);
#endif
// 2013-09-04bRagexeRE
#if PACKETVER == 20130904
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0838,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0937,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x093a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0956,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pChangeDir,2,4);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0838,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0937,clif->pFriendsListAdd,2);
+ packet(0x093a,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0956,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-09-11aRagexeRE, 2013-09-11bRagexeRE
#if PACKETVER == 20130911
- packet(0x035f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0364,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0868,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x086b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x086d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0889,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0891,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a4,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x091e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x093a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0940,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0948,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0967,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x096a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x035f,clif->pReqClickBuyingStore,2);
+ packet(0x0364,clif->pGetCharNameRequest,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085c,clif->pPartyInvite2,2);
+ packet(0x0868,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x086b,clif->pStoragePassword,0);
+ packet(0x086d,clif->pMoveFromKafra,2,4);
+ packet(0x087b,clif->pDull/*,XXX*/);
+ packet(0x0889,clif->pTakeItem,2);
+ packet(0x0891,clif->pHomMenu,2,4);
+ packet(0x08a4,clif->pItemListWindowSelected,2,4,8);
+ packet(0x091e,clif->pChangeDir,2,4);
+ packet(0x093a,clif->pDull/*,XXX*/);
+ packet(0x0940,clif->pTickSend,2);
+ packet(0x0948,clif->pFriendsListAdd,2);
+ packet(0x0967,clif->pDropItem,2,4);
+ packet(0x096a,clif->pMoveToKafra,2,4);
#endif
// 2013-09-17aRagexeRE
#if PACKETVER == 20130917
- packet(0x035f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0811,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0838,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x083c,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0863,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0868,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x086e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x086f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x087a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0895,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x089d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a0,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a2,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08a8,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0918,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0921,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0923,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0934,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x094c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0957,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0959,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x096a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
+ packet(0x035f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0811,clif->pActionRequest,2,6);
+ packet(0x0838,clif->pReqClickBuyingStore,2);
+ packet(0x083c,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0863,clif->pMoveFromKafra,2,4);
+ packet(0x0868,clif->pPartyInvite2,2);
+ packet(0x086e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x086f,clif->pTickSend,2);
+ packet(0x087a,clif->pTakeItem,2);
+ packet(0x087e,clif->pUseSkillToId,2,4,6);
+ packet(0x088a,clif->pStoragePassword,0);
+ packet(0x0895,clif->pSolveCharName,2);
+ packet(0x089b,clif->pReqCloseBuyingStore,0);
+ packet(0x089d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a0,clif->pMoveToKafra,2,4);
+ packet(0x08a2,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08a8,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0918,clif->pChangeDir,2,4);
+ packet(0x091c,clif->pDropItem,2,4);
+ packet(0x091e,clif->pDull/*,XXX*/);
+ packet(0x0921,clif->pGetCharNameRequest,2);
+ packet(0x0923,clif->pHomMenu,2,4);
+ packet(0x0934,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x094c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x094e,clif->pDull/*,XXX*/);
+ packet(0x0957,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0959,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095b,clif->pWalkToXY,2);
+ packet(0x096a,clif->pFriendsListAdd,2);
#endif
// 2013-09-25aRagexeRE, 2013-09-25bRagexeRE
#if PACKETVER == 20130925
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x086e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0875,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0876,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0885,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0887,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0890,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0940,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0958,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0969,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086d,clif->pStoragePassword,0);
+ packet(0x086e,clif->pPartyInvite2,2);
+ packet(0x0875,clif->pHomMenu,2,4);
+ packet(0x0876,clif->pMoveFromKafra,2,4);
+ packet(0x087d,clif->pDropItem,2,4);
+ packet(0x0885,clif->pChangeDir,2,4);
+ packet(0x0887,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088f,clif->pFriendsListAdd,2);
+ packet(0x0890,clif->pDull/*,XXX*/);
+ packet(0x0940,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0958,clif->pTakeItem,2);
+ packet(0x095a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x095b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095c,clif->pMoveToKafra,2,4);
+ packet(0x0969,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-10-02aRagexeRE
#if PACKETVER == 20131002
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0940,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pStoragePassword,0);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pTickSend,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0940,clif->pWalkToXY,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-10-08bRagexeRE
#if PACKETVER == 20131008
- packet(0x0202,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0362,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x07e4,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x083c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x085d,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x085e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0863,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x086c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0883,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0884,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0885,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0896,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x089c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a9,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0917,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0923,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0927,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0932,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0934,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0936,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x093c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0947,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0952,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0954,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0956,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x095d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0969,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x0202,clif->pGetCharNameRequest,2);
+ packet(0x0362,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x07e4,clif->pActionRequest,2,6);
+ packet(0x083c,clif->pReqCloseBuyingStore,0);
+ packet(0x085d,clif->pDull/*,XXX*/);
+ packet(0x085e,clif->pWalkToXY,2);
+ packet(0x0863,clif->pPartyInvite2,2);
+ packet(0x086c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086d,clif->pSolveCharName,2);
+ packet(0x0883,clif->pMoveToKafra,2,4);
+ packet(0x0884,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0885,clif->pDull/*,XXX*/);
+ packet(0x0896,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x089c,clif->pChangeDir,2,4);
+ packet(0x08a9,clif->pUseSkillToId,2,4,6);
+ packet(0x0917,clif->pMoveFromKafra,2,4);
+ packet(0x091c,clif->pTakeItem,2);
+ packet(0x0923,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0927,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0932,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0934,clif->pTickSend,2);
+ packet(0x0936,clif->pReqClickBuyingStore,2);
+ packet(0x093c,clif->pHomMenu,2,4);
+ packet(0x0947,clif->pStoragePassword,0);
+ packet(0x0952,clif->pDropItem,2,4);
+ packet(0x0954,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0956,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x095d,clif->pFriendsListAdd,2);
+ packet(0x0969,clif->pReqOpenBuyingStore,2,4,8,9,89);
#endif
// 2013-10-16aRagexeRE, 2013-10-16bRagexeRE
#if PACKETVER == 20131016
- packet(0x022d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0281,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0361,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0364,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0366,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x07ec,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0802,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x085a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x085d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0863,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0864,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0867,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x086c,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0870,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0875,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0887,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0888,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0890,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0894,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x091a,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x091e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0927,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0946,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x095e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0962,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0966,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x022d,clif->pMoveToKafra,2,4);
+ packet(0x0281,clif->pPartyInvite2,2);
+ packet(0x0361,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0364,clif->pDropItem,2,4);
+ packet(0x0366,clif->pReqClickBuyingStore,2);
+ packet(0x07ec,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0802,clif->pDull/*,XXX*/);
+ packet(0x085a,clif->pDull/*,XXX*/);
+ packet(0x085d,clif->pGetCharNameRequest,2);
+ packet(0x0863,clif->pUseSkillToId,2,4,6);
+ packet(0x0864,clif->pStoragePassword,0);
+ packet(0x0867,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x086c,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0870,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0875,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0887,clif->pTakeItem,2);
+ packet(0x0888,clif->pHomMenu,2,4);
+ packet(0x088b,clif->pFriendsListAdd,2);
+ packet(0x0890,clif->pSolveCharName,2);
+ packet(0x0894,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x091a,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x091e,clif->pMoveFromKafra,2,4);
+ packet(0x091f,clif->pWalkToXY,2);
+ packet(0x0927,clif->pTickSend,2);
+ packet(0x0946,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x094e,clif->pReqCloseBuyingStore,0);
+ packet(0x095e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0962,clif->pActionRequest,2,6);
+ packet(0x0966,clif->pChangeDir,2,4);
#endif
// 2013-10-23aRagexeRE
#if PACKETVER == 20131023
- packet(0x0366,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0438,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0819,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0835,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x085b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0862,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x086e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0872,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0876,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0885,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x088f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a7,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08ab,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ac,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0919,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x091d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0923,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0924,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0935,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0937,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0944,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x094a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0951,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0954,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
+ packet(0x0366,clif->pReqCloseBuyingStore,0);
+ packet(0x0438,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0819,clif->pDropItem,2,4);
+ packet(0x0835,clif->pDull/*,XXX*/);
+ packet(0x085b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0862,clif->pDull/*,XXX*/);
+ packet(0x086e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0872,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0876,clif->pUseSkillToId,2,4,6);
+ packet(0x087f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0885,clif->pStoragePassword,0);
+ packet(0x088a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088b,clif->pTakeItem,2);
+ packet(0x088f,clif->pMoveToKafra,2,4);
+ packet(0x08a7,clif->pHomMenu,2,4);
+ packet(0x08ab,clif->pChangeDir,2,4);
+ packet(0x08ac,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0919,clif->pSolveCharName,2);
+ packet(0x091d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0923,clif->pActionRequest,2,6);
+ packet(0x0924,clif->pTickSend,2);
+ packet(0x0935,clif->pReqClickBuyingStore,2);
+ packet(0x0937,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0944,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x094a,clif->pFriendsListAdd,2);
+ packet(0x0951,clif->pGetCharNameRequest,2);
+ packet(0x0954,clif->pMoveFromKafra,2,4);
+ packet(0x095b,clif->pWalkToXY,2);
#endif
// 2013-10-30aRagexeRE
#if PACKETVER == 20131030
- packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0887,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a2,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0925,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pHomMenu,2,4);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087d,clif->pFriendsListAdd,2);
+ packet(0x0887,clif->pStoragePassword,0);
+ packet(0x08a2,clif->pDull/*,XXX*/);
+ packet(0x0925,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-11-06aRagexeRE
#if PACKETVER == 20131106
- packet(0x0281,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0363,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0369,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0436,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0802,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0817,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0866,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0867,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0870,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0875,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0887,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0891,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0893,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0894,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a2,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0919,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x091d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0929,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0935,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x093b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0942,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0946,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0947,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0948,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0950,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0954,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x095d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0962,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0967,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
+ packet(0x0281,clif->pGetCharNameRequest,2);
+ packet(0x0363,clif->pUseSkillToId,2,4,6);
+ packet(0x0369,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0436,clif->pStoragePassword,0);
+ packet(0x0802,clif->pChangeDir,2,4);
+ packet(0x0817,clif->pDull/*,XXX*/);
+ packet(0x0866,clif->pWalkToXY,2);
+ packet(0x0867,clif->pMoveToKafra,2,4);
+ packet(0x0870,clif->pReqCloseBuyingStore,0);
+ packet(0x0875,clif->pDropItem,2,4);
+ packet(0x0887,clif->pTickSend,2);
+ packet(0x0891,clif->pSolveCharName,2);
+ packet(0x0893,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0894,clif->pHomMenu,2,4);
+ packet(0x08a2,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0919,clif->pSearchStoreInfoNextPage,0);
+ packet(0x091d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0929,clif->pMoveFromKafra,2,4);
+ packet(0x0935,clif->pFriendsListAdd,2);
+ packet(0x093b,clif->pTakeItem,2);
+ packet(0x0942,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0946,clif->pReqClickBuyingStore,2);
+ packet(0x0947,clif->pActionRequest,2,6);
+ packet(0x0948,clif->pDull/*,XXX*/);
+ packet(0x0950,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0954,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x095d,clif->pPartyInvite2,2);
+ packet(0x0962,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0967,clif->pReqTradeBuyingStore,2,4,8,12);
#endif
// 2013-11-13aRagexeRE
#if PACKETVER == 20131113
- packet(0x0364,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x086d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0879,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x088c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x088f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a4,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x091c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0920,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0926,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0927,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0928,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0929,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x092b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x092e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x092f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0934,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0936,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x093c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0949,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0950,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x095d,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x095f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0960,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0964,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0969,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
+ packet(0x0364,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x086d,clif->pReqCloseBuyingStore,0);
+ packet(0x0879,clif->pSearchStoreInfoNextPage,0);
+ packet(0x088c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x088f,clif->pDropItem,2,4);
+ packet(0x089a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a4,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a8,clif->pDull/*,XXX*/);
+ packet(0x091c,clif->pMoveFromKafra,2,4);
+ packet(0x0920,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0926,clif->pHomMenu,2,4);
+ packet(0x0927,clif->pPartyInvite2,2);
+ packet(0x0928,clif->pStoragePassword,0);
+ packet(0x0929,clif->pTickSend,2);
+ packet(0x092b,clif->pTakeItem,2);
+ packet(0x092c,clif->pFriendsListAdd,2);
+ packet(0x092d,clif->pReqClickBuyingStore,2);
+ packet(0x092e,clif->pGetCharNameRequest,2);
+ packet(0x092f,clif->pSolveCharName,2);
+ packet(0x0934,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0936,clif->pWalkToXY,2);
+ packet(0x093c,clif->pChangeDir,2,4);
+ packet(0x0949,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0950,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x095d,clif->pActionRequest,2,6);
+ packet(0x095f,clif->pUseSkillToId,2,4,6);
+ packet(0x0960,clif->pMoveToKafra,2,4);
+ packet(0x0964,clif->pDull/*,XXX*/);
+ packet(0x0969,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
#endif
// 2013-11-20eRagexeRE
#if PACKETVER == 20131120
- packet(0x0361,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0368,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0802,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0811,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0817,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x085f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0862,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0884,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a1,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a8,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0917,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0926,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0927,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x092d,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x093e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x093f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0940,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0950,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0953,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0955,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0956,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x095e,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x0361,clif->pSolveCharName,2);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0368,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0802,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0811,clif->pDull/*,XXX*/);
+ packet(0x0817,clif->pTickSend,2);
+ packet(0x085a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x085f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0862,clif->pReqCloseBuyingStore,0);
+ packet(0x0884,clif->pUseSkillToId,2,4,6);
+ packet(0x088c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088d,clif->pFriendsListAdd,2);
+ packet(0x089e,clif->pTakeItem,2);
+ packet(0x08a1,clif->pHomMenu,2,4);
+ packet(0x08a4,clif->pStoragePassword,0);
+ packet(0x08a8,clif->pActionRequest,2,6);
+ packet(0x0917,clif->pDropItem,2,4);
+ packet(0x0926,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0927,clif->pMoveToKafra,2,4);
+ packet(0x092b,clif->pWalkToXY,2);
+ packet(0x092d,clif->pSearchStoreInfoNextPage,0);
+ packet(0x093e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x093f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0940,clif->pDull/*,XXX*/);
+ packet(0x0950,clif->pGetCharNameRequest,2);
+ packet(0x0953,clif->pPartyInvite2,2);
+ packet(0x0955,clif->pReqClickBuyingStore,2);
+ packet(0x0956,clif->pChangeDir,2,4);
+ packet(0x095e,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2013-11-27aRagexeRE, 2013-11-27bRagexeRE
#if PACKETVER == 20131127
- packet(0x035f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0364,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0365,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0366,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0881,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0884,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0894,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0930,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x093a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0940,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x094c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x095c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0967,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x035f,clif->pReqClickBuyingStore,2);
+ packet(0x0364,clif->pGetCharNameRequest,2);
+ packet(0x0365,clif->pWalkToXY,2);
+ packet(0x0366,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pMoveFromKafra,2,4);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0881,clif->pDull/*,XXX*/);
+ packet(0x0884,clif->pHomMenu,2,4);
+ packet(0x088d,clif->pChangeDir,2,4);
+ packet(0x0894,clif->pStoragePassword,0);
+ packet(0x089e,clif->pDull/*,XXX*/);
+ packet(0x0930,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x093a,clif->pFriendsListAdd,2);
+ packet(0x0940,clif->pTickSend,2);
+ packet(0x094c,clif->pTakeItem,2);
+ packet(0x094f,clif->pDropItem,2,4);
+ packet(0x095c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0967,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pMoveToKafra,2,4);
#endif
// 2013-12-04dRagexeRE, 2013-12-04eRagexeRE
#if PACKETVER == 20131204
- packet(0x0365,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0366,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x07e4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x07ec,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0862,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0869,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0877,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0879,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x087f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0882,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a0,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08a4,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a7,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08ad,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x091f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0928,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x092d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x092f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0932,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x093b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0941,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0951,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0958,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0959,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x095b,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0961,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0967,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
+ packet(0x0365,clif->pReqCloseBuyingStore,0);
+ packet(0x0366,clif->pTickSend,2);
+ packet(0x07e4,clif->pStoragePassword,0);
+ packet(0x07ec,clif->pReqClickBuyingStore,2);
+ packet(0x085a,clif->pPartyInvite2,2);
+ packet(0x0862,clif->pChangeDir,2,4);
+ packet(0x0869,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0877,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0879,clif->pSolveCharName,2);
+ packet(0x087f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0882,clif->pFriendsListAdd,2);
+ packet(0x08a0,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08a4,clif->pDropItem,2,4);
+ packet(0x08a7,clif->pTakeItem,2);
+ packet(0x08ad,clif->pGetCharNameRequest,2);
+ packet(0x091f,clif->pHomMenu,2,4);
+ packet(0x0928,clif->pActionRequest,2,6);
+ packet(0x092d,clif->pUseSkillToId,2,4,6);
+ packet(0x092f,clif->pWalkToXY,2);
+ packet(0x0932,clif->pSearchStoreInfoNextPage,0);
+ packet(0x093b,clif->pDull/*,XXX*/);
+ packet(0x0941,clif->pMoveToKafra,2,4);
+ packet(0x0951,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0958,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0959,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x095b,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0961,clif->pDull/*,XXX*/);
+ packet(0x0967,clif->pMoveFromKafra,2,4);
#endif
// 2013-12-11cRagexeRE, 2013-12-11eRagexeRE
#if PACKETVER == 20131211
- packet(0x0202,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0366,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0865,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x086e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0873,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0881,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0886,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0892,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a3,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a4,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ab,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x092b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0931,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x094c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pUseSkillToId,2,4,6);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0366,clif->pTakeItem,2);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pFriendsListAdd,2);
+ packet(0x0865,clif->pPartyInvite2,2);
+ packet(0x086e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0873,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0881,clif->pDull/*,XXX*/);
+ packet(0x0886,clif->pHomMenu,2,4);
+ packet(0x0892,clif->pMoveToKafra,2,4);
+ packet(0x08a3,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a4,clif->pChangeDir,2,4);
+ packet(0x08ab,clif->pDropItem,2,4);
+ packet(0x092b,clif->pStoragePassword,0);
+ packet(0x0931,clif->pMoveFromKafra,2,4);
+ packet(0x094c,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-12-18aRagexeRE
#if PACKETVER == 20131218
- packet(0x022d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x087b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08ab,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0947,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pHomMenu,2,4);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085c,clif->pStoragePassword,0);
+ packet(0x087b,clif->pDull/*,XXX*/);
+ packet(0x08ab,clif->pFriendsListAdd,2);
+ packet(0x092f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0947,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-12-23bRagexeRE, 2013-12-23xRagexeRE
#if PACKETVER == 20131223
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x08a4,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2013-12-30aRagexeRE
#if PACKETVER == 20131230
- packet(0x022d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x02c4,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x035f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0365,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0369,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0438,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0860,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0871,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x087b,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x087e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0895,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0898,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a9,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x091d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x091f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0926,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x092a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x093d,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x093e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0943,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0949,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x094c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0968,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0969,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x096a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
+ packet(0x022d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x02c4,clif->pUseSkillToId,2,4,6);
+ packet(0x035f,clif->pWalkToXY,2);
+ packet(0x0365,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0369,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0438,clif->pTickSend,2);
+ packet(0x0860,clif->pDropItem,2,4);
+ packet(0x0871,clif->pActionRequest,2,6);
+ packet(0x087b,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x087e,clif->pDull/*,XXX*/);
+ packet(0x087f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0895,clif->pMoveFromKafra,2,4);
+ packet(0x0898,clif->pSolveCharName,2);
+ packet(0x089c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a9,clif->pPartyInvite2,2);
+ packet(0x091d,clif->pStoragePassword,0);
+ packet(0x091e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x091f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0926,clif->pGetCharNameRequest,2);
+ packet(0x092a,clif->pTakeItem,2);
+ packet(0x093d,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x093e,clif->pDull/*,XXX*/);
+ packet(0x0943,clif->pFriendsListAdd,2);
+ packet(0x0949,clif->pHomMenu,2,4);
+ packet(0x094a,clif->pChangeDir,2,4);
+ packet(0x094c,clif->pReqCloseBuyingStore,0);
+ packet(0x0968,clif->pMoveToKafra,2,4);
+ packet(0x0969,clif->pReqClickBuyingStore,2);
+ packet(0x096a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
#endif
// 2014-01-08bRagexeRE, 2014-01-08cRagexeRE
#if PACKETVER == 20140108
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0936,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0936,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-01-15cRagexeRE, 2014-01-15dRagexeRE, 2014-01-15eRagexeRE
#if PACKETVER == 20140115
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0367,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0865,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0887,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x088a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088e,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x089b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a7,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0965,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0966,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pDropItem,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0367,clif->pMoveFromKafra,2,4);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pGetCharNameRequest,2);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0865,clif->pStoragePassword,0);
+ packet(0x0887,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x088a,clif->pDull/*,XXX*/);
+ packet(0x088e,clif->pMoveToKafra,2,4);
+ packet(0x089b,clif->pFriendsListAdd,2);
+ packet(0x08a7,clif->pChangeDir,2,4);
+ packet(0x092d,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pTakeItem,2);
+ packet(0x095b,clif->pDull/*,XXX*/);
+ packet(0x095d,clif->pPartyInvite2,2);
+ packet(0x0965,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0966,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2014-01-22aRagexeRE
#if PACKETVER == 20140122
- packet(0x0360,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x07ec,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0811,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0863,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0870,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0871,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0872,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0890,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0893,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0899,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x089d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08a2,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08aa,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0917,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x091a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0925,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x092f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0940,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0941,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0942,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x094c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0950,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0952,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0955,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0957,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x095d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x0360,clif->pActionRequest,2,6);
+ packet(0x07ec,clif->pReqClickBuyingStore,2);
+ packet(0x0811,clif->pReqCloseBuyingStore,0);
+ packet(0x0863,clif->pHomMenu,2,4);
+ packet(0x0870,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0871,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0872,clif->pPartyInvite2,2);
+ packet(0x088c,clif->pDull/*,XXX*/);
+ packet(0x0890,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0893,clif->pFriendsListAdd,2);
+ packet(0x0899,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x089d,clif->pGetCharNameRequest,2);
+ packet(0x08a2,clif->pDull/*,XXX*/);
+ packet(0x08aa,clif->pDropItem,2,4);
+ packet(0x0917,clif->pTickSend,2);
+ packet(0x091a,clif->pChangeDir,2,4);
+ packet(0x0925,clif->pWalkToXY,2);
+ packet(0x092f,clif->pMoveToKafra,2,4);
+ packet(0x0940,clif->pUseSkillToId,2,4,6);
+ packet(0x0941,clif->pSolveCharName,2);
+ packet(0x0942,clif->pTakeItem,2);
+ packet(0x094b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x094c,clif->pMoveFromKafra,2,4);
+ packet(0x0950,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0952,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0955,clif->pStoragePassword,0);
+ packet(0x0957,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x095d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095f,clif->pReqOpenBuyingStore,2,4,8,9,89);
#endif
// 2014-01-29bRagexeRE
#if PACKETVER == 20140129
- packet(0x0281,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0367,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07ec,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0802,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0884,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0885,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0889,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0921,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0924,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x092c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0958,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0961,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pUseSkillToId,2,4,6);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pDull/*,XXX*/);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0367,clif->pDropItem,2,4);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07ec,clif->pChangeDir,2,4);
+ packet(0x0802,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pDull/*,XXX*/);
+ packet(0x0884,clif->pHomMenu,2,4);
+ packet(0x0885,clif->pTakeItem,2);
+ packet(0x0889,clif->pMoveFromKafra,2,4);
+ packet(0x0921,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0924,clif->pItemListWindowSelected,2,4,8);
+ packet(0x092c,clif->pStoragePassword,0);
+ packet(0x094d,clif->pMoveToKafra,2,4);
+ packet(0x0958,clif->pPartyInvite2,2);
+ packet(0x0961,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-02-05bRagexeRE
#if PACKETVER == 20140205
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0938,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0938,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-02-12aRagexeRE
#if PACKETVER == 20140212
- packet(0x02c4,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0369,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0438,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x086e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0874,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0877,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0878,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x087e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0888,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x088c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x089d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x08a0,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a1,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a7,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08ac,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08ad,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0919,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0928,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0930,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0934,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0936,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x093d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0944,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0952,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0953,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0960,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
+ packet(0x02c4,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0369,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0438,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x086e,clif->pUseSkillToId,2,4,6);
+ packet(0x0874,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0877,clif->pReqClickBuyingStore,2);
+ packet(0x0878,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x087e,clif->pWalkToXY,2);
+ packet(0x0888,clif->pMoveFromKafra,2,4);
+ packet(0x088c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x089d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x08a0,clif->pStoragePassword,0);
+ packet(0x08a1,clif->pPartyInvite2,2);
+ packet(0x08a7,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08ac,clif->pMoveToKafra,2,4);
+ packet(0x08ad,clif->pDropItem,2,4);
+ packet(0x0919,clif->pChangeDir,2,4);
+ packet(0x091b,clif->pFriendsListAdd,2);
+ packet(0x0928,clif->pSolveCharName,2);
+ packet(0x0930,clif->pTickSend,2);
+ packet(0x0934,clif->pActionRequest,2,6);
+ packet(0x0936,clif->pDull/*,XXX*/);
+ packet(0x093d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0944,clif->pHomMenu,2,4);
+ packet(0x094e,clif->pDull/*,XXX*/);
+ packet(0x0952,clif->pGetCharNameRequest,2);
+ packet(0x0953,clif->pTakeItem,2);
+ packet(0x0960,clif->pReqCloseBuyingStore,0);
#endif
// 2014-02-19aRagexeRE, 2014-02-19bRagexeRE
#if PACKETVER == 20140219
- packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0360,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0364,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0802,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0838,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x085d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085f,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0860,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0868,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x086f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x087c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0889,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0898,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x089f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a6,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08ac,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0921,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0927,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0939,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0946,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0949,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0953,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x095a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0961,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
+ packet(0x0202,clif->pFriendsListAdd,2);
+ packet(0x0360,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pSolveCharName,2);
+ packet(0x0802,clif->pTakeItem,2);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0838,clif->pUseSkillToId,2,4,6);
+ packet(0x085b,clif->pReqClickBuyingStore,2);
+ packet(0x085c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x085d,clif->pWalkToXY,2);
+ packet(0x085f,clif->pGetCharNameRequest,2);
+ packet(0x0860,clif->pHomMenu,2,4);
+ packet(0x0868,clif->pStoragePassword,0);
+ packet(0x086f,clif->pPartyInvite2,2);
+ packet(0x087c,clif->pMoveToKafra,2,4);
+ packet(0x0889,clif->pDull/*,XXX*/);
+ packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0898,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x089f,clif->pDropItem,2,4);
+ packet(0x08a6,clif->pChangeDir,2,4);
+ packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08ac,clif->pMoveFromKafra,2,4);
+ packet(0x0921,clif->pActionRequest,2,6);
+ packet(0x0927,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0939,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0946,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0949,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0953,clif->pSearchStoreInfoNextPage,0);
+ packet(0x095a,clif->pReqCloseBuyingStore,0);
+ packet(0x0961,clif->pTickSend,2);
#endif
// 2014-02-26aRagexeRE, 2014-02-26bRagexeRE
#if PACKETVER == 20140226
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0362,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0364,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0867,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0877,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0887,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0894,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0895,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0921,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0931,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0941,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0962,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0964,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0969,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0362,clif->pFriendsListAdd,2);
+ packet(0x0364,clif->pStoragePassword,0);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pChangeDir,2,4);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0867,clif->pHomMenu,2,4);
+ packet(0x0877,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0887,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0894,clif->pDropItem,2,4);
+ packet(0x0895,clif->pMoveFromKafra,2,4);
+ packet(0x091a,clif->pMoveToKafra,2,4);
+ packet(0x0921,clif->pPartyInvite2,2);
+ packet(0x0931,clif->pDull/*,XXX*/);
+ packet(0x0941,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0962,clif->pDull/*,XXX*/);
+ packet(0x0964,clif->pTakeItem,2);
+ packet(0x0969,clif->pItemListWindowSelected,2,4,8);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-03-05aRagexeRE, 2014-03-05bRagexeRE
#if PACKETVER == 20140305
- packet(0x0202,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x07e4,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0878,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0934,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pTakeItem,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x07e4,clif->pFriendsListAdd,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pChangeDir,2,4);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0878,clif->pDull/*,XXX*/);
+ packet(0x0934,clif->pHomMenu,2,4);
+ packet(0x095e,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-03-12bRagexeRE
#if PACKETVER == 20140312
- packet(0x0202,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x023b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0366,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x085e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x086f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0889,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x088d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0891,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0894,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x089b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x089e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a6,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a9,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08ad,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x091b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x091c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x091e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x092a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0948,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x094c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0957,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x095e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0966,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x0202,clif->pUseSkillToId,2,4,6);
+ packet(0x023b,clif->pDull/*,XXX*/);
+ packet(0x0366,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x085e,clif->pReqClickBuyingStore,2);
+ packet(0x086f,clif->pTickSend,2);
+ packet(0x0889,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x088d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088e,clif->pActionRequest,2,6);
+ packet(0x0891,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0894,clif->pWalkToXY,2);
+ packet(0x089b,clif->pGetCharNameRequest,2);
+ packet(0x089d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x089e,clif->pDropItem,2,4);
+ packet(0x08a6,clif->pDull/*,XXX*/);
+ packet(0x08a9,clif->pFriendsListAdd,2);
+ packet(0x08ad,clif->pSolveCharName,2);
+ packet(0x091b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x091c,clif->pPartyInvite2,2);
+ packet(0x091e,clif->pHomMenu,2,4);
+ packet(0x092a,clif->pTakeItem,2);
+ packet(0x0948,clif->pReqCloseBuyingStore,0);
+ packet(0x094a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x094b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x094c,clif->pChangeDir,2,4);
+ packet(0x0957,clif->pMoveFromKafra,2,4);
+ packet(0x095d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x095e,clif->pStoragePassword,0);
+ packet(0x0966,clif->pMoveToKafra,2,4);
#endif
// 2014-03-19aRagexeRE
#if PACKETVER == 20140319
- packet(0x02c4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07e4,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0802,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0811,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0815,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x085a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0864,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0865,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0866,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x086e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0872,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0883,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x088e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0890,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0893,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x089f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a2,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091f,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0923,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0933,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0942,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0944,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0947,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x094c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0954,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0955,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0961,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0964,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x096a,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x02c4,clif->pTakeItem,2);
+ packet(0x07e4,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0802,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0811,clif->pReqClickBuyingStore,2);
+ packet(0x0815,clif->pHomMenu,2,4);
+ packet(0x085a,clif->pWalkToXY,2);
+ packet(0x0864,clif->pActionRequest,2,6);
+ packet(0x0865,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0866,clif->pChangeDir,2,4);
+ packet(0x086e,clif->pDull/*,XXX*/);
+ packet(0x0872,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0883,clif->pDropItem,2,4);
+ packet(0x088e,clif->pPartyInvite2,2);
+ packet(0x0890,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0893,clif->pDull/*,XXX*/);
+ packet(0x089f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a2,clif->pMoveToKafra,2,4);
+ packet(0x091f,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0923,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0933,clif->pReqCloseBuyingStore,0);
+ packet(0x0942,clif->pStoragePassword,0);
+ packet(0x0944,clif->pUseSkillToId,2,4,6);
+ packet(0x0947,clif->pMoveFromKafra,2,4);
+ packet(0x094c,clif->pGetCharNameRequest,2);
+ packet(0x0954,clif->pFriendsListAdd,2);
+ packet(0x0955,clif->pTickSend,2);
+ packet(0x0961,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0964,clif->pSolveCharName,2);
+ packet(0x096a,clif->pReqOpenBuyingStore,2,4,8,9,89);
#endif
// 2014-03-26cRagexeRE
#if PACKETVER == 20140326
- packet(0x0362,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0365,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x07ec,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x083c,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0865,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0867,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0869,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x086b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x087f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0887,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0898,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08aa,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08ac,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08ad,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0918,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0928,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x092a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093d,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0942,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0945,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0946,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0956,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0959,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x095a,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x095c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0969,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
+ packet(0x0362,clif->pGetCharNameRequest,2);
+ packet(0x0365,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x07ec,clif->pTakeItem,2);
+ packet(0x083c,clif->pReqClickBuyingStore,2);
+ packet(0x085b,clif->pReqCloseBuyingStore,0);
+ packet(0x0865,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0867,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0869,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x086b,clif->pMoveFromKafra,2,4);
+ packet(0x087c,clif->pWalkToXY,2);
+ packet(0x087e,clif->pFriendsListAdd,2);
+ packet(0x087f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0887,clif->pDull/*,XXX*/);
+ packet(0x0898,clif->pDropItem,2,4);
+ packet(0x08aa,clif->pDull/*,XXX*/);
+ packet(0x08ac,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08ad,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0918,clif->pTickSend,2);
+ packet(0x0928,clif->pSearchStoreInfoNextPage,0);
+ packet(0x092a,clif->pStoragePassword,0);
+ packet(0x093d,clif->pActionRequest,2,6);
+ packet(0x0942,clif->pHomMenu,2,4);
+ packet(0x0945,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0946,clif->pPartyInvite2,2);
+ packet(0x0956,clif->pChangeDir,2,4);
+ packet(0x0959,clif->pMoveToKafra,2,4);
+ packet(0x095a,clif->pSolveCharName,2);
+ packet(0x095c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0969,clif->pUseSkillToId,2,4,6);
#endif
// 2014-04-02eRagexeRE, 2014-04-02fRagexeRE
#if PACKETVER == 20140402
- packet(0x023b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0360,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0364,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07ec,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x085b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x085d,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0867,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0868,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0882,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0883,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x088c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0890,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0896,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x089a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08ac,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0920,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0926,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0933,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x093f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0944,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0946,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x094c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0950,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0958,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0965,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
+ packet(0x023b,clif->pReqClickBuyingStore,2);
+ packet(0x0360,clif->pChangeDir,2,4);
+ packet(0x0364,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07ec,clif->pSolveCharName,2);
+ packet(0x085b,clif->pMoveFromKafra,2,4);
+ packet(0x085d,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0867,clif->pReqCloseBuyingStore,0);
+ packet(0x0868,clif->pUseSkillToId,2,4,6);
+ packet(0x0882,clif->pDropItem,2,4);
+ packet(0x0883,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088a,clif->pGetCharNameRequest,2);
+ packet(0x088c,clif->pDull/*,XXX*/);
+ packet(0x0890,clif->pPartyInvite2,2);
+ packet(0x0896,clif->pHomMenu,2,4);
+ packet(0x089a,clif->pFriendsListAdd,2);
+ packet(0x08ac,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0920,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0926,clif->pStoragePassword,0);
+ packet(0x092d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0933,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x093f,clif->pWalkToXY,2);
+ packet(0x0944,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0946,clif->pActionRequest,2,6);
+ packet(0x094c,clif->pDull/*,XXX*/);
+ packet(0x0950,clif->pTickSend,2);
+ packet(0x0958,clif->pTakeItem,2);
+ packet(0x095c,clif->pMoveToKafra,2,4);
+ packet(0x0965,clif->pSearchStoreInfoListItemClick,2,6,10);
#endif
// 2014-04-09aRagexeRE
#if PACKETVER == 20140409
- packet(0x0819,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x085b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0868,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x086a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0873,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0875,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x087e,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0883,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0884,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x088a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0890,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0893,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0896,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0899,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a2,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a4,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a6,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x08a7,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a9,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0918,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x092e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0942,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0947,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x095e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x0819,clif->pMoveFromKafra,2,4);
+ packet(0x085b,clif->pSolveCharName,2);
+ packet(0x0868,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x086a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0873,clif->pReqCloseBuyingStore,0);
+ packet(0x0875,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x087e,clif->pTickSend,2);
+ packet(0x0883,clif->pWalkToXY,2);
+ packet(0x0884,clif->pGetCharNameRequest,2);
+ packet(0x088a,clif->pDull/*,XXX*/);
+ packet(0x0890,clif->pTakeItem,2);
+ packet(0x0893,clif->pActionRequest,2,6);
+ packet(0x0896,clif->pUseSkillToId,2,4,6);
+ packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0899,clif->pFriendsListAdd,2);
+ packet(0x08a2,clif->pDull/*,XXX*/);
+ packet(0x08a4,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a6,clif->pSearchStoreInfoNextPage,0);
+ packet(0x08a7,clif->pChangeDir,2,4);
+ packet(0x08a9,clif->pStoragePassword,0);
+ packet(0x0918,clif->pDropItem,2,4);
+ packet(0x091c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x092e,clif->pPartyInvite2,2);
+ packet(0x0942,clif->pMoveToKafra,2,4);
+ packet(0x0947,clif->pHomMenu,2,4);
+ packet(0x094c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x095a,clif->pReqClickBuyingStore,2);
+ packet(0x095e,clif->pWantToConnection,2,6,10,14,18);
#endif
// 2014-04-16aRagexeRE
#if PACKETVER == 20140416
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x095c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x095c,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-04-23aRagexeRE
#if PACKETVER == 20140423
- packet(0x022d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0360,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0436,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0811,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x083c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x085a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x085b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0862,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0863,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0866,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x086b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x086f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0873,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0890,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0895,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0896,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0898,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x089d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08a8,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08ad,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x091a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0920,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x094f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x095e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x022d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0360,clif->pStoragePassword,0);
+ packet(0x0436,clif->pFriendsListAdd,2);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x0811,clif->pMoveFromKafra,2,4);
+ packet(0x083c,clif->pChangeDir,2,4);
+ packet(0x085a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x085b,clif->pWalkToXY,2);
+ packet(0x0862,clif->pMoveToKafra,2,4);
+ packet(0x0863,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0866,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x086b,clif->pDropItem,2,4);
+ packet(0x086f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0873,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088b,clif->pSolveCharName,2);
+ packet(0x0890,clif->pUseSkillToId,2,4,6);
+ packet(0x0895,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0896,clif->pActionRequest,2,6);
+ packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0898,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089b,clif->pReqClickBuyingStore,2);
+ packet(0x089d,clif->pGetCharNameRequest,2);
+ packet(0x089f,clif->pReqCloseBuyingStore,0);
+ packet(0x08a8,clif->pHomMenu,2,4);
+ packet(0x08ad,clif->pDull/*,XXX*/);
+ packet(0x091a,clif->pTickSend,2);
+ packet(0x0920,clif->pPartyInvite2,2);
+ packet(0x094f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x095e,clif->pDull/*,XXX*/);
#endif
// 2014-04-30aRagexeRE
#if PACKETVER == 20140430
- packet(0x023b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x035f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0363,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0860,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0870,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0871,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0875,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087f,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0884,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0899,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a1,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0940,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x094b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0953,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0956,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
+ packet(0x023b,clif->pTickSend,2);
+ packet(0x035f,clif->pStoragePassword,0);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0363,clif->pUseSkillToId,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pDropItem,2,4);
+ packet(0x0860,clif->pFriendsListAdd,2);
+ packet(0x0870,clif->pPartyInvite2,2);
+ packet(0x0871,clif->pHomMenu,2,4);
+ packet(0x0875,clif->pMoveFromKafra,2,4);
+ packet(0x087f,clif->pTakeItem,2);
+ packet(0x0884,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0899,clif->pChangeDir,2,4);
+ packet(0x08a1,clif->pDull/*,XXX*/);
+ packet(0x093b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0940,clif->pGetCharNameRequest,2);
+ packet(0x094b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0953,clif->pDull/*,XXX*/);
+ packet(0x0956,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pSolveCharName,2);
#endif
// 2014-05-08bRagexeRE
#if PACKETVER == 20140508
- packet(0x022d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0366,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0368,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0802,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0861,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0886,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x089b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08ab,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0927,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0930,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0932,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0934,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x094e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x022d,clif->pSolveCharName,2);
+ packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pChangeDir,2,4);
+ packet(0x0366,clif->pPartyInvite2,2);
+ packet(0x0368,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pHomMenu,2,4);
+ packet(0x0802,clif->pGetCharNameRequest,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0861,clif->pTakeItem,2);
+ packet(0x0886,clif->pMoveToKafra,2,4);
+ packet(0x089b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08ab,clif->pDull/*,XXX*/);
+ packet(0x0927,clif->pStoragePassword,0);
+ packet(0x0930,clif->pMoveFromKafra,2,4);
+ packet(0x0932,clif->pDropItem,2,4);
+ packet(0x0934,clif->pDull/*,XXX*/);
+ packet(0x094e,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2014-05-14bRagexeRE, 2014-05-14cRagexeRE
#if PACKETVER == 20140514
- packet(0x0437,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0817,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0865,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0868,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0876,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0877,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0885,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0886,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x088b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0895,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x089a,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a5,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0918,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0921,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0925,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x092c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x094d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0958,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0962,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0965,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x096a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
+ packet(0x0437,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0817,clif->pDull/*,XXX*/);
+ packet(0x0865,clif->pActionRequest,2,6);
+ packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0868,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0876,clif->pUseSkillToId,2,4,6);
+ packet(0x0877,clif->pDull/*,XXX*/);
+ packet(0x087d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0885,clif->pStoragePassword,0);
+ packet(0x0886,clif->pTickSend,2);
+ packet(0x088a,clif->pChangeDir,2,4);
+ packet(0x088b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0895,clif->pTakeItem,2);
+ packet(0x089a,clif->pSolveCharName,2);
+ packet(0x089c,clif->pFriendsListAdd,2);
+ packet(0x08a5,clif->pGetCharNameRequest,2);
+ packet(0x0918,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0921,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0925,clif->pReqClickBuyingStore,2);
+ packet(0x092c,clif->pMoveToKafra,2,4);
+ packet(0x092f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x094d,clif->pReqCloseBuyingStore,0);
+ packet(0x094e,clif->pMoveFromKafra,2,4);
+ packet(0x0958,clif->pHomMenu,2,4);
+ packet(0x095f,clif->pWalkToXY,2);
+ packet(0x0962,clif->pPartyInvite2,2);
+ packet(0x0965,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x096a,clif->pDropItem,2,4);
#endif
// 2014-05-21aRagexeRE
#if PACKETVER == 20140521
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0869,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x089c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08ac,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0968,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0869,clif->pStoragePassword,0);
+ packet(0x088b,clif->pDull/*,XXX*/);
+ packet(0x088d,clif->pChangeDir,2,4);
+ packet(0x089c,clif->pFriendsListAdd,2);
+ packet(0x08ac,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0968,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-05-28aRagexeRE
#if PACKETVER == 20140528
- packet(0x0202,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0360,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x085f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0862,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0872,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0875,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0877,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0879,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088a,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x088f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0894,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0896,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a4,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a8,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x08ab,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x091d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0929,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0930,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0938,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x093a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x093f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x094a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x094b,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x095f,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0963,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0964,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0966,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
+ packet(0x0202,clif->pWalkToXY,2);
+ packet(0x0360,clif->pStoragePassword,0);
+ packet(0x085f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0862,clif->pSolveCharName,2);
+ packet(0x0872,clif->pHomMenu,2,4);
+ packet(0x0875,clif->pDropItem,2,4);
+ packet(0x0877,clif->pTickSend,2);
+ packet(0x0879,clif->pMoveFromKafra,2,4);
+ packet(0x087e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088a,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x088f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0894,clif->pDull/*,XXX*/);
+ packet(0x0896,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089d,clif->pTakeItem,2);
+ packet(0x08a4,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a8,clif->pSearchStoreInfoNextPage,0);
+ packet(0x08ab,clif->pDull/*,XXX*/);
+ packet(0x091d,clif->pFriendsListAdd,2);
+ packet(0x0929,clif->pActionRequest,2,6);
+ packet(0x0930,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0938,clif->pReqCloseBuyingStore,0);
+ packet(0x093a,clif->pMoveToKafra,2,4);
+ packet(0x093f,clif->pPartyInvite2,2);
+ packet(0x094a,clif->pReqClickBuyingStore,2);
+ packet(0x094b,clif->pChangeDir,2,4);
+ packet(0x095f,clif->pGetCharNameRequest,2);
+ packet(0x0963,clif->pUseSkillToId,2,4,6);
+ packet(0x0964,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0966,clif->pReqTradeBuyingStore,2,4,8,12);
#endif
// 2014-06-05aRagexeRE
#if PACKETVER == 20140605
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0369,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0921,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0931,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x094c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pReqCloseBuyingStore,0);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pActionRequest,2,6);
+ packet(0x0369,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pChangeDir,2,4);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0921,clif->pStoragePassword,0);
+ packet(0x0931,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pSolveCharName,2);
+ packet(0x094c,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-06-11bRagexeRE
#if PACKETVER == 20140611
- packet(0x0364,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0438,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x07e4,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0838,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0864,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0867,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x086c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0874,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0878,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x088c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0891,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0893,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0894,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x089b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a1,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a2,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0924,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0936,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0941,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x094f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0950,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0951,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0952,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0957,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0958,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0963,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0965,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0969,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
+ packet(0x0364,clif->pReqCloseBuyingStore,0);
+ packet(0x0438,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x07e4,clif->pMoveToKafra,2,4);
+ packet(0x0838,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0864,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0867,clif->pTickSend,2);
+ packet(0x086c,clif->pDull/*,XXX*/);
+ packet(0x0874,clif->pPartyInvite2,2);
+ packet(0x0878,clif->pTakeItem,2);
+ packet(0x088c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0891,clif->pActionRequest,2,6);
+ packet(0x0893,clif->pWalkToXY,2);
+ packet(0x0894,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x089b,clif->pFriendsListAdd,2);
+ packet(0x08a1,clif->pUseSkillToId,2,4,6);
+ packet(0x08a2,clif->pDull/*,XXX*/);
+ packet(0x0924,clif->pGetCharNameRequest,2);
+ packet(0x0936,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0941,clif->pStoragePassword,0);
+ packet(0x094a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x094f,clif->pSolveCharName,2);
+ packet(0x0950,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0951,clif->pChangeDir,2,4);
+ packet(0x0952,clif->pMoveFromKafra,2,4);
+ packet(0x0957,clif->pReqClickBuyingStore,2);
+ packet(0x0958,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0963,clif->pDropItem,2,4);
+ packet(0x0965,clif->pHomMenu,2,4);
+ packet(0x0969,clif->pSearchStoreInfoNextPage,0);
#endif
// 2014-06-18cRagexeRE
#if PACKETVER == 20140618
- packet(0x085d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x085f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0860,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0861,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0878,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0884,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0885,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0886,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0890,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0892,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a7,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08ac,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0917,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x091f,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0929,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0935,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0938,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0939,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x093b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0945,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0954,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0957,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x095e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0962,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0967,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
+ packet(0x085d,clif->pMoveToKafra,2,4);
+ packet(0x085f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0860,clif->pTickSend,2);
+ packet(0x0861,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0878,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087d,clif->pSolveCharName,2);
+ packet(0x0884,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0885,clif->pMoveFromKafra,2,4);
+ packet(0x0886,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0890,clif->pChangeDir,2,4);
+ packet(0x0892,clif->pUseSkillToId,2,4,6);
+ packet(0x08a6,clif->pReqClickBuyingStore,2);
+ packet(0x08a7,clif->pWalkToXY,2);
+ packet(0x08ac,clif->pDull/*,XXX*/);
+ packet(0x0917,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x091f,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0929,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0935,clif->pTakeItem,2);
+ packet(0x0938,clif->pPartyInvite2,2);
+ packet(0x0939,clif->pReqCloseBuyingStore,0);
+ packet(0x093b,clif->pActionRequest,2,6);
+ packet(0x0945,clif->pDropItem,2,4);
+ packet(0x0954,clif->pFriendsListAdd,2);
+ packet(0x0957,clif->pStoragePassword,0);
+ packet(0x095d,clif->pGetCharNameRequest,2);
+ packet(0x095e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0962,clif->pDull/*,XXX*/);
+ packet(0x0967,clif->pHomMenu,2,4);
#endif
// 2014-06-25aRagexeRE
#if PACKETVER == 20140625
- packet(0x0202,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x023b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0815,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0817,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0835,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085a,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0861,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0875,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x087b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0885,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0886,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0888,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x088a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0897,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a1,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a2,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0923,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0928,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0946,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0959,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0960,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0968,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0969,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pMoveToKafra,2,4);
+ packet(0x023b,clif->pMoveFromKafra,2,4);
+ packet(0x0815,clif->pDull/*,XXX*/);
+ packet(0x0817,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0835,clif->pWalkToXY,2);
+ packet(0x085a,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0861,clif->pUseSkillToId,2,4,6);
+ packet(0x086b,clif->pPartyInvite2,2);
+ packet(0x0875,clif->pSolveCharName,2);
+ packet(0x087b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0885,clif->pDropItem,2,4);
+ packet(0x0886,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0888,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x088a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0897,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a1,clif->pTickSend,2);
+ packet(0x08a2,clif->pChangeDir,2,4);
+ packet(0x091a,clif->pTakeItem,2);
+ packet(0x0923,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0928,clif->pReqCloseBuyingStore,0);
+ packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0946,clif->pHomMenu,2,4);
+ packet(0x094e,clif->pDull/*,XXX*/);
+ packet(0x0959,clif->pActionRequest,2,6);
+ packet(0x0960,clif->pStoragePassword,0);
+ packet(0x0968,clif->pReqClickBuyingStore,2);
+ packet(0x0969,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-07-02aRagexeRE
#if PACKETVER == 20140702
- packet(0x022d,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x023b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0364,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0438,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x07e4,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0835,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x086c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0887,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0892,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0895,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a0,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a2,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0925,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0933,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0940,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x023b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0364,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pFriendsListAdd,2);
+ packet(0x0438,clif->pMoveToKafra,2,4);
+ packet(0x07e4,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pStoragePassword,0);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pHomMenu,2,4);
+ packet(0x0835,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pDropItem,2,4);
+ packet(0x086c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0887,clif->pWalkToXY,2);
+ packet(0x0892,clif->pMoveFromKafra,2,4);
+ packet(0x0895,clif->pDull/*,XXX*/);
+ packet(0x08a0,clif->pPartyInvite2,2);
+ packet(0x08a2,clif->pTakeItem,2);
+ packet(0x0925,clif->pChangeDir,2,4);
+ packet(0x092c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0933,clif->pDull/*,XXX*/);
+ packet(0x0940,clif->pSearchStoreInfoNextPage,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-07-09aRagexeRE
#if PACKETVER == 20140709
- packet(0x0364,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0437,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0860,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0866,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0869,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0875,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0877,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0879,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x087a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0887,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0888,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0894,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0897,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0898,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08ad,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0925,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x092f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0931,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0934,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0939,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x093f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x094d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x094f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0961,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x0364,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0437,clif->pActionRequest,2,6);
+ packet(0x0860,clif->pStoragePassword,0);
+ packet(0x0866,clif->pDull/*,XXX*/);
+ packet(0x0869,clif->pChangeDir,2,4);
+ packet(0x0875,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0877,clif->pUseSkillToId,2,4,6);
+ packet(0x0879,clif->pGetCharNameRequest,2);
+ packet(0x087a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0887,clif->pMoveToKafra,2,4);
+ packet(0x0888,clif->pDull/*,XXX*/);
+ packet(0x088b,clif->pPartyInvite2,2);
+ packet(0x0894,clif->pReqCloseBuyingStore,0);
+ packet(0x0897,clif->pReqClickBuyingStore,2);
+ packet(0x0898,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08ad,clif->pDropItem,2,4);
+ packet(0x091a,clif->pWalkToXY,2);
+ packet(0x0925,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x092f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0931,clif->pSolveCharName,2);
+ packet(0x0934,clif->pTickSend,2);
+ packet(0x0939,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x093f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x094d,clif->pHomMenu,2,4);
+ packet(0x094e,clif->pMoveFromKafra,2,4);
+ packet(0x094f,clif->pFriendsListAdd,2);
+ packet(0x095f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0961,clif->pTakeItem,2);
#endif
// 2014-07-16aRagexeRE
#if PACKETVER == 20140716
- packet(0x0362,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x07e4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0811,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0868,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0871,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0881,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x088d,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0896,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x089a,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08a2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08a4,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08ac,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0918,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x091f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0926,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x092c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0938,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0947,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0952,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0958,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0959,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0969,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
+ packet(0x0362,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x07e4,clif->pStoragePassword,0);
+ packet(0x0811,clif->pActionRequest,2,6);
+ packet(0x085c,clif->pGetCharNameRequest,2);
+ packet(0x085f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0868,clif->pPartyInvite2,2);
+ packet(0x0871,clif->pMoveToKafra,2,4);
+ packet(0x0881,clif->pUseSkillToId,2,4,6);
+ packet(0x088b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x088d,clif->pDull/*,XXX*/);
+ packet(0x088f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0896,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x089a,clif->pSolveCharName,2);
+ packet(0x089f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08a2,clif->pReqCloseBuyingStore,0);
+ packet(0x08a4,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08ac,clif->pHomMenu,2,4);
+ packet(0x0918,clif->pWalkToXY,2);
+ packet(0x091f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0926,clif->pDropItem,2,4);
+ packet(0x092c,clif->pFriendsListAdd,2);
+ packet(0x092f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0938,clif->pMoveFromKafra,2,4);
+ packet(0x093b,clif->pReqClickBuyingStore,2);
+ packet(0x0947,clif->pDull/*,XXX*/);
+ packet(0x0952,clif->pChangeDir,2,4);
+ packet(0x0958,clif->pTakeItem,2);
+ packet(0x0959,clif->pTickSend,2);
+ packet(0x0969,clif->pItemListWindowSelected,2,4,8);
#endif
// 2014-07-23aRagexeRE, 2014-07-23bRagexeRE
#if PACKETVER == 20140723
- packet(0x02c4,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0364,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0368,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0436,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0819,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0838,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x085f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0869,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x086d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x087d,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0888,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0891,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0896,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0898,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x089e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08a2,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08ad,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0927,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x092f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0934,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0935,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0939,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x093d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0945,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0947,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0948,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0960,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x02c4,clif->pTickSend,2);
+ packet(0x0364,clif->pStoragePassword,0);
+ packet(0x0368,clif->pGetCharNameRequest,2);
+ packet(0x0436,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0819,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0838,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x085f,clif->pWalkToXY,2);
+ packet(0x0869,clif->pMoveToKafra,2,4);
+ packet(0x086d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x087d,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0888,clif->pReqClickBuyingStore,2);
+ packet(0x0891,clif->pReqCloseBuyingStore,0);
+ packet(0x0896,clif->pDropItem,2,4);
+ packet(0x0898,clif->pDull/*,XXX*/);
+ packet(0x089e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08a2,clif->pMoveFromKafra,2,4);
+ packet(0x08ad,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0927,clif->pSolveCharName,2);
+ packet(0x092f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0934,clif->pFriendsListAdd,2);
+ packet(0x0935,clif->pPartyInvite2,2);
+ packet(0x0939,clif->pItemListWindowSelected,2,4,8);
+ packet(0x093d,clif->pTakeItem,2);
+ packet(0x0945,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0947,clif->pActionRequest,2,6);
+ packet(0x0948,clif->pHomMenu,2,4);
+ packet(0x095f,clif->pDull/*,XXX*/);
+ packet(0x0960,clif->pChangeDir,2,4);
#endif
// 2014-07-30bRagexeRE
#if PACKETVER == 20140730
- packet(0x022d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0364,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0366,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0367,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0437,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x07ec,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0802,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0815,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0817,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x087d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x087f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0889,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x088b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0892,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a0,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a7,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a9,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08ad,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0924,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x092a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0934,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0940,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0946,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
+ packet(0x022d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0364,clif->pGetCharNameRequest,2);
+ packet(0x0366,clif->pUseSkillToId,2,4,6);
+ packet(0x0367,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0437,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x07ec,clif->pDull/*,XXX*/);
+ packet(0x0802,clif->pDull/*,XXX*/);
+ packet(0x0815,clif->pFriendsListAdd,2);
+ packet(0x0817,clif->pActionRequest,2,6);
+ packet(0x085e,clif->pWalkToXY,2);
+ packet(0x085f,clif->pReqCloseBuyingStore,0);
+ packet(0x087d,clif->pMoveFromKafra,2,4);
+ packet(0x087e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x087f,clif->pDropItem,2,4);
+ packet(0x0889,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x088b,clif->pTickSend,2);
+ packet(0x088d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0892,clif->pMoveToKafra,2,4);
+ packet(0x08a0,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a6,clif->pReqClickBuyingStore,2);
+ packet(0x08a7,clif->pSolveCharName,2);
+ packet(0x08a9,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08ad,clif->pStoragePassword,0);
+ packet(0x091e,clif->pPartyInvite2,2);
+ packet(0x0924,clif->pSearchStoreInfoNextPage,0);
+ packet(0x092a,clif->pTakeItem,2);
+ packet(0x0934,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0940,clif->pChangeDir,2,4);
+ packet(0x0946,clif->pHomMenu,2,4);
#endif
// 2014-08-06aRagexeRE
#if PACKETVER == 20140806
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0948,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0948,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-08-13aRagexeRE
#if PACKETVER == 20140813
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0802,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0868,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0878,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0882,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0895,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0897,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0899,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a3,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a7,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08ab,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0967,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pStoragePassword,0);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0802,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0868,clif->pHomMenu,2,4);
+ packet(0x0878,clif->pChangeDir,2,4);
+ packet(0x087c,clif->pPartyInvite2,2);
+ packet(0x0882,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0895,clif->pMoveFromKafra,2,4);
+ packet(0x0897,clif->pFriendsListAdd,2);
+ packet(0x0899,clif->pDropItem,2,4);
+ packet(0x08a3,clif->pTakeItem,2);
+ packet(0x08a7,clif->pDull/*,XXX*/);
+ packet(0x08ab,clif->pDull/*,XXX*/);
+ packet(0x0967,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-08-20aRagexeRE
#if PACKETVER == 20140820
- packet(0x035f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0835,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0861,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0864,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0869,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x086c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0872,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0876,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0891,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0899,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089a,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x089b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a3,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a7,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x091d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x092f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0936,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0937,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x093a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x094a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0951,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0952,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0956,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0958,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0961,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x035f,clif->pReqCloseBuyingStore,0);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0835,clif->pChangeDir,2,4);
+ packet(0x0861,clif->pTickSend,2);
+ packet(0x0864,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0869,clif->pDull/*,XXX*/);
+ packet(0x086c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086e,clif->pPartyInvite2,2);
+ packet(0x0872,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0876,clif->pDropItem,2,4);
+ packet(0x0891,clif->pGetCharNameRequest,2);
+ packet(0x0899,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089a,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x089b,clif->pMoveFromKafra,2,4);
+ packet(0x08a3,clif->pWalkToXY,2);
+ packet(0x08a7,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x091d,clif->pSolveCharName,2);
+ packet(0x092f,clif->pUseSkillToId,2,4,6);
+ packet(0x0936,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0937,clif->pHomMenu,2,4);
+ packet(0x093a,clif->pStoragePassword,0);
+ packet(0x093e,clif->pReqClickBuyingStore,2);
+ packet(0x094a,clif->pFriendsListAdd,2);
+ packet(0x0951,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0952,clif->pActionRequest,2,6);
+ packet(0x0956,clif->pMoveToKafra,2,4);
+ packet(0x0958,clif->pDull/*,XXX*/);
+ packet(0x0961,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2014-08-27aRagexeRE
#if PACKETVER == 20140827
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0943,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0943,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-09-03aRagexeRE
#if PACKETVER == 20140903
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x089b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0931,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0941,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0943,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0945,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x088f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x089b,clif->pFriendsListAdd,2);
+ packet(0x0931,clif->pHomMenu,2,4);
+ packet(0x0941,clif->pStoragePassword,0);
+ packet(0x0943,clif->pDull/*,XXX*/);
+ packet(0x0945,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-09-17cRagexeRE
#if PACKETVER == 20140917
- packet(0x022d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0364,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0365,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0366,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0367,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0369,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0838,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0864,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0889,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0895,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0897,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0898,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089c,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a8,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0919,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x091e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x092a,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0930,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0949,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0951,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0955,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0956,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0957,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x095a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x095c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x095e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0966,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x022d,clif->pPartyInvite2,2);
+ packet(0x0364,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0365,clif->pMoveToKafra,2,4);
+ packet(0x0366,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0367,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0369,clif->pSolveCharName,2);
+ packet(0x0838,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0864,clif->pTakeItem,2);
+ packet(0x086d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0889,clif->pActionRequest,2,6);
+ packet(0x0895,clif->pHomMenu,2,4);
+ packet(0x0897,clif->pTickSend,2);
+ packet(0x0898,clif->pGetCharNameRequest,2);
+ packet(0x089c,clif->pReqClickBuyingStore,2);
+ packet(0x08a8,clif->pStoragePassword,0);
+ packet(0x0919,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x091e,clif->pReqCloseBuyingStore,0);
+ packet(0x092a,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0930,clif->pMoveFromKafra,2,4);
+ packet(0x0949,clif->pUseSkillToId,2,4,6);
+ packet(0x094f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0951,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0955,clif->pFriendsListAdd,2);
+ packet(0x0956,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0957,clif->pDull/*,XXX*/);
+ packet(0x095a,clif->pDropItem,2,4);
+ packet(0x095c,clif->pWalkToXY,2);
+ packet(0x095e,clif->pChangeDir,2,4);
+ packet(0x0966,clif->pDull/*,XXX*/);
#endif
// 2014-09-24bRagexeRE, 2014-09-24cRagexeRE
#if PACKETVER == 20140924
- packet(0x0366,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0367,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x07e4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0802,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0815,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0862,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0864,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0865,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x086b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x086d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0886,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x088b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0894,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0898,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x089c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a5,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a7,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0918,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x091b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0925,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0926,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0928,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x092d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0934,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0949,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0952,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
+ packet(0x0366,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0367,clif->pPartyInvite2,2);
+ packet(0x07e4,clif->pStoragePassword,0);
+ packet(0x0802,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0815,clif->pWalkToXY,2);
+ packet(0x0862,clif->pDull/*,XXX*/);
+ packet(0x0864,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0865,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x086b,clif->pReqCloseBuyingStore,0);
+ packet(0x086d,clif->pTakeItem,2);
+ packet(0x086e,clif->pHomMenu,2,4);
+ packet(0x0886,clif->pGetCharNameRequest,2);
+ packet(0x088b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0894,clif->pActionRequest,2,6);
+ packet(0x0898,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x089c,clif->pMoveToKafra,2,4);
+ packet(0x08a5,clif->pSolveCharName,2);
+ packet(0x08a7,clif->pUseSkillToId,2,4,6);
+ packet(0x0918,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x091b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0925,clif->pDull/*,XXX*/);
+ packet(0x0926,clif->pTickSend,2);
+ packet(0x0928,clif->pMoveFromKafra,2,4);
+ packet(0x092b,clif->pReqClickBuyingStore,2);
+ packet(0x092d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0934,clif->pChangeDir,2,4);
+ packet(0x0949,clif->pDropItem,2,4);
+ packet(0x0952,clif->pFriendsListAdd,2);
#endif
// 2014-10-01bRagexeRE, 2014-10-01cRagexeRE
#if PACKETVER == 20141001
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0365,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0884,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0885,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x089d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08ad,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0937,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0939,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093f,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0952,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pDropItem,2,4);
+ packet(0x0365,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pMoveFromKafra,2,4);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087c,clif->pMoveToKafra,2,4);
+ packet(0x0884,clif->pPartyInvite2,2);
+ packet(0x0885,clif->pGetCharNameRequest,2);
+ packet(0x089c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x089d,clif->pFriendsListAdd,2);
+ packet(0x08ad,clif->pChangeDir,2,4);
+ packet(0x091c,clif->pDull/*,XXX*/);
+ packet(0x092a,clif->pStoragePassword,0);
+ packet(0x0937,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0939,clif->pDull/*,XXX*/);
+ packet(0x093f,clif->pTakeItem,2);
+ packet(0x094b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0952,clif->pHomMenu,2,4);
#endif
// 2014-10-08bRagexeRE, 2014-10-08cRagexeRE
#if PACKETVER == 20141008
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0942,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0942,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-10-15bRagexeRE, 2014-10-16aRagexeRE
#if PACKETVER == 20141015 || \
PACKETVER == 20141016
- packet(0x022d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0922,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0936,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0967,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pMoveFromKafra,2,4);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pHomMenu,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0922,clif->pDull/*,XXX*/);
+ packet(0x0936,clif->pStoragePassword,0);
+ packet(0x094b,clif->pFriendsListAdd,2);
+ packet(0x0967,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-10-22aRagexeRE
#if PACKETVER == 20141022
- packet(0x023b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0878,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0896,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0899,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08aa,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08ab,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08ad,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0940,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x094e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0955,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pStoragePassword,0);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0878,clif->pMoveToKafra,2,4);
+ packet(0x087d,clif->pDropItem,2,4);
+ packet(0x0896,clif->pPartyInvite2,2);
+ packet(0x0899,clif->pHomMenu,2,4);
+ packet(0x08aa,clif->pMoveFromKafra,2,4);
+ packet(0x08ab,clif->pDull/*,XXX*/);
+ packet(0x08ad,clif->pChangeDir,2,4);
+ packet(0x091a,clif->pFriendsListAdd,2);
+ packet(0x092b,clif->pDull/*,XXX*/);
+ packet(0x093b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0940,clif->pSearchStoreInfoNextPage,0);
+ packet(0x094e,clif->pTakeItem,2);
+ packet(0x0955,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-10-29aRagexeRE
#if PACKETVER == 20141029
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0940,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pWalkToXY,2);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pStoragePassword,0);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0940,clif->pActionRequest,2,6);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-11-05aRagexeRE, 2014-11-05bRagexeRE
#if PACKETVER == 20141105
- packet(0x022d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x035f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0360,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x085c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0863,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0864,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0865,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0871,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0874,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0875,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0877,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0879,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0887,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0892,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0898,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a0,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a7,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08ad,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x091e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x092b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x093e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0944,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0948,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0950,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0957,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x095f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0968,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x022d,clif->pDull/*,XXX*/);
+ packet(0x035f,clif->pUseSkillToId,2,4,6);
+ packet(0x0360,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x085c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0863,clif->pGetCharNameRequest,2);
+ packet(0x0864,clif->pTickSend,2);
+ packet(0x0865,clif->pFriendsListAdd,2);
+ packet(0x0871,clif->pStoragePassword,0);
+ packet(0x0874,clif->pDull/*,XXX*/);
+ packet(0x0875,clif->pActionRequest,2,6);
+ packet(0x0877,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0879,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0887,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0892,clif->pDropItem,2,4);
+ packet(0x0898,clif->pMoveFromKafra,2,4);
+ packet(0x08a0,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a5,clif->pChangeDir,2,4);
+ packet(0x08a7,clif->pReqCloseBuyingStore,0);
+ packet(0x08ad,clif->pMoveToKafra,2,4);
+ packet(0x091d,clif->pSolveCharName,2);
+ packet(0x091e,clif->pReqClickBuyingStore,2);
+ packet(0x092b,clif->pTakeItem,2);
+ packet(0x093e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0944,clif->pHomMenu,2,4);
+ packet(0x0948,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0950,clif->pPartyInvite2,2);
+ packet(0x0957,clif->pWalkToXY,2);
+ packet(0x095f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0968,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2014-11-12aRagexeRE
#if PACKETVER == 20141112
- packet(0x0362,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0438,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x07e4,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0835,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0838,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x083c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x085f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0863,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0869,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0871,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0885,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0886,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0887,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08a0,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a1,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08ab,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0919,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0926,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0929,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0943,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x094b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x094c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0955,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0960,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0962,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x0362,clif->pFriendsListAdd,2);
+ packet(0x0438,clif->pSolveCharName,2);
+ packet(0x07e4,clif->pReqCloseBuyingStore,0);
+ packet(0x0835,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0838,clif->pSearchStoreInfoNextPage,0);
+ packet(0x083c,clif->pMoveToKafra,2,4);
+ packet(0x085f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0863,clif->pUseSkillToId,2,4,6);
+ packet(0x0869,clif->pGetCharNameRequest,2);
+ packet(0x086c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0871,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0885,clif->pChangeDir,2,4);
+ packet(0x0886,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0887,clif->pPartyInvite2,2);
+ packet(0x088d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08a0,clif->pWalkToXY,2);
+ packet(0x08a1,clif->pReqClickBuyingStore,2);
+ packet(0x08ab,clif->pStoragePassword,0);
+ packet(0x0919,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0926,clif->pHomMenu,2,4);
+ packet(0x0929,clif->pActionRequest,2,6);
+ packet(0x0943,clif->pDropItem,2,4);
+ packet(0x094b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x094c,clif->pDull/*,XXX*/);
+ packet(0x094f,clif->pDull/*,XXX*/);
+ packet(0x0955,clif->pMoveFromKafra,2,4);
+ packet(0x095d,clif->pTickSend,2);
+ packet(0x0960,clif->pTakeItem,2);
+ packet(0x0962,clif->pUseSkillToPos,2,4,6,8);
#endif
// 2014-11-19bRagexeRE
#if PACKETVER == 20141119
- packet(0x0202,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x085a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0861,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0865,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0866,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0872,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0873,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0875,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x087c,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0885,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0887,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0888,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x088d,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0895,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a8,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0918,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0920,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0921,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0929,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0933,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0938,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0940,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0941,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0942,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0948,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x094c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0963,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
+ packet(0x0202,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x085a,clif->pReqClickBuyingStore,2);
+ packet(0x0861,clif->pFriendsListAdd,2);
+ packet(0x0865,clif->pPartyInvite2,2);
+ packet(0x0866,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0872,clif->pActionRequest,2,6);
+ packet(0x0873,clif->pUseSkillToId,2,4,6);
+ packet(0x0875,clif->pGetCharNameRequest,2);
+ packet(0x087c,clif->pSolveCharName,2);
+ packet(0x0885,clif->pDull/*,XXX*/);
+ packet(0x0887,clif->pReqCloseBuyingStore,0);
+ packet(0x0888,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x088d,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0895,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a8,clif->pTakeItem,2);
+ packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0918,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0920,clif->pChangeDir,2,4);
+ packet(0x0921,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0929,clif->pMoveFromKafra,2,4);
+ packet(0x092f,clif->pDull/*,XXX*/);
+ packet(0x0933,clif->pStoragePassword,0);
+ packet(0x0938,clif->pTickSend,2);
+ packet(0x0940,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0941,clif->pMoveToKafra,2,4);
+ packet(0x0942,clif->pHomMenu,2,4);
+ packet(0x0948,clif->pWalkToXY,2);
+ packet(0x094c,clif->pDropItem,2,4);
+ packet(0x0963,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
#endif
// 2014-11-26aRagexeRE, 2014-11-26bRagexeRE, 2014-11-26cRagexeRE, 2014-11-26dRagexeRE, 2014-11-26eRagexeRE
#if PACKETVER == 20141126
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0367,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0871,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0884,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0896,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a4,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ad,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0920,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0942,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0965,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0367,clif->pDull/*,XXX*/);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0871,clif->pMoveFromKafra,2,4);
+ packet(0x0884,clif->pDull/*,XXX*/);
+ packet(0x0896,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a4,clif->pChangeDir,2,4);
+ packet(0x08ad,clif->pStoragePassword,0);
+ packet(0x0920,clif->pDropItem,2,4);
+ packet(0x0942,clif->pFriendsListAdd,2);
+ packet(0x095a,clif->pTakeItem,2);
+ packet(0x095b,clif->pHomMenu,2,4);
+ packet(0x095f,clif->pMoveToKafra,2,4);
+ packet(0x0965,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-12-03aRagexeRE
#if PACKETVER == 20141203
- packet(0x0202,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0281,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0362,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0367,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0368,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0802,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0861,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x086e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0880,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0889,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0898,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08a5,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08aa,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0917,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x091c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0928,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x092a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0936,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0957,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x095c,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0962,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
+ packet(0x0202,clif->pSolveCharName,2);
+ packet(0x0281,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0362,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0367,clif->pGetCharNameRequest,2);
+ packet(0x0368,clif->pDull/*,XXX*/);
+ packet(0x0802,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0861,clif->pMoveToKafra,2,4);
+ packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086d,clif->pMoveFromKafra,2,4);
+ packet(0x086e,clif->pTakeItem,2);
+ packet(0x087b,clif->pWalkToXY,2);
+ packet(0x087e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0880,clif->pChangeDir,2,4);
+ packet(0x0889,clif->pFriendsListAdd,2);
+ packet(0x0898,clif->pStoragePassword,0);
+ packet(0x089c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08a5,clif->pActionRequest,2,6);
+ packet(0x08aa,clif->pDropItem,2,4);
+ packet(0x0917,clif->pSearchStoreInfoNextPage,0);
+ packet(0x091c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091d,clif->pPartyInvite2,2);
+ packet(0x0928,clif->pTickSend,2);
+ packet(0x092a,clif->pDull/*,XXX*/);
+ packet(0x0936,clif->pHomMenu,2,4);
+ packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0957,clif->pReqCloseBuyingStore,0);
+ packet(0x095c,clif->pReqClickBuyingStore,2);
+ packet(0x0962,clif->pUseSkillToId,2,4,6);
#endif
// 2014-12-10cRagexeRE
#if PACKETVER == 20141210
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0885,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08ac,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0917,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0927,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x092b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0947,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0954,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0955,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0958,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0961,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0963,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0967,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pHomMenu,2,4);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pChangeDir,2,4);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087b,clif->pTakeItem,2);
+ packet(0x0885,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08ac,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0917,clif->pPartyInvite2,2);
+ packet(0x0927,clif->pDull/*,XXX*/);
+ packet(0x092b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0947,clif->pDull/*,XXX*/);
+ packet(0x0954,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0955,clif->pMoveFromKafra,2,4);
+ packet(0x0958,clif->pDropItem,2,4);
+ packet(0x0961,clif->pFriendsListAdd,2);
+ packet(0x0963,clif->pStoragePassword,0);
+ packet(0x0967,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2014-12-17aRagexeRE
#if PACKETVER == 20141217
- packet(0x0360,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x085b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0860,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x086c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0875,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0878,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0879,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0883,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0889,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x088e,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x089f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a1,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a2,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a8,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08ab,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08ac,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0919,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0924,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0930,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0932,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0933,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0936,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0939,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0940,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0944,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0945,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0948,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0960,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x0360,clif->pMoveToKafra,2,4);
+ packet(0x085b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0860,clif->pStoragePassword,0);
+ packet(0x086c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0875,clif->pMoveFromKafra,2,4);
+ packet(0x0878,clif->pWalkToXY,2);
+ packet(0x0879,clif->pHomMenu,2,4);
+ packet(0x0883,clif->pTakeItem,2);
+ packet(0x0889,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x088e,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x089f,clif->pDropItem,2,4);
+ packet(0x08a1,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a2,clif->pDull/*,XXX*/);
+ packet(0x08a8,clif->pPartyInvite2,2);
+ packet(0x08ab,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08ac,clif->pTickSend,2);
+ packet(0x0919,clif->pChangeDir,2,4);
+ packet(0x091f,clif->pUseSkillToId,2,4,6);
+ packet(0x0924,clif->pActionRequest,2,6);
+ packet(0x0930,clif->pReqCloseBuyingStore,0);
+ packet(0x0932,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0933,clif->pFriendsListAdd,2);
+ packet(0x0936,clif->pGetCharNameRequest,2);
+ packet(0x0939,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0940,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0944,clif->pReqClickBuyingStore,2);
+ packet(0x0945,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0948,clif->pSolveCharName,2);
+ packet(0x0960,clif->pDull/*,XXX*/);
#endif
// 2014-12-23cRagexeRE
#if PACKETVER == 20141223
- packet(0x0361,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0438,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0835,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x085a,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x085e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0865,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0867,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086c,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0870,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x089b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a3,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a8,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08ac,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0930,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0932,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0945,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0946,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0949,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x094f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0950,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0953,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0956,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x095b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x095f,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
+ packet(0x0361,clif->pMoveToKafra,2,4);
+ packet(0x0438,clif->pFriendsListAdd,2);
+ packet(0x0835,clif->pItemListWindowSelected,2,4,8);
+ packet(0x085a,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x085e,clif->pReqCloseBuyingStore,0);
+ packet(0x0865,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0867,clif->pHomMenu,2,4);
+ packet(0x086c,clif->pReqClickBuyingStore,2);
+ packet(0x0870,clif->pChangeDir,2,4);
+ packet(0x087a,clif->pTakeItem,2);
+ packet(0x087b,clif->pDull/*,XXX*/);
+ packet(0x089a,clif->pWalkToXY,2);
+ packet(0x089b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a3,clif->pPartyInvite2,2);
+ packet(0x08a4,clif->pStoragePassword,0);
+ packet(0x08a8,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08ac,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0930,clif->pDropItem,2,4);
+ packet(0x0932,clif->pDull/*,XXX*/);
+ packet(0x093a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0945,clif->pTickSend,2);
+ packet(0x0946,clif->pGetCharNameRequest,2);
+ packet(0x0949,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x094f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0950,clif->pSolveCharName,2);
+ packet(0x0953,clif->pMoveFromKafra,2,4);
+ packet(0x0956,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x095b,clif->pUseSkillToId,2,4,6);
+ packet(0x095f,clif->pActionRequest,2,6);
#endif
// 2014-12-31aRagexeRE
#if PACKETVER == 20141231
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086d,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-01-07aRagexeRE
#if PACKETVER == 20150107
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0895,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0943,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0947,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087c,clif->pFriendsListAdd,2);
+ packet(0x0895,clif->pStoragePassword,0);
+ packet(0x092d,clif->pHomMenu,2,4);
+ packet(0x0943,clif->pChangeDir,2,4);
+ packet(0x0947,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-01-14aRagexeRE
#if PACKETVER == 20150114
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0868,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0899,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0946,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0955,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0957,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pUseSkillToId,2,4,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0868,clif->pFriendsListAdd,2);
+ packet(0x0899,clif->pHomMenu,2,4);
+ packet(0x0946,clif->pStoragePassword,0);
+ packet(0x0955,clif->pDull/*,XXX*/);
+ packet(0x0957,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-01-21aRagexeRE, 2015-01-21bRagexeRE
#if PACKETVER == 20150121
- packet(0x0281,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x089e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ab,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0918,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0919,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0955,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0959,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0963,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0967,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087c,clif->pDull/*,XXX*/);
+ packet(0x088b,clif->pFriendsListAdd,2);
+ packet(0x089d,clif->pHomMenu,2,4);
+ packet(0x089e,clif->pChangeDir,2,4);
+ packet(0x08ab,clif->pStoragePassword,0);
+ packet(0x0918,clif->pDull/*,XXX*/);
+ packet(0x0919,clif->pDropItem,2,4);
+ packet(0x091d,clif->pTakeItem,2);
+ packet(0x0955,clif->pMoveToKafra,2,4);
+ packet(0x0959,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0963,clif->pMoveFromKafra,2,4);
+ packet(0x0967,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-01-28aRagexeRE
#if PACKETVER == 20150128
- packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x023b,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x035f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0368,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0838,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085a,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0864,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0870,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0874,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0875,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0876,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x087d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0888,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08ab,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0927,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0929,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092d,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0938,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x093a,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0944,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x094d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0963,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0968,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
+ packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x023b,clif->pChangeDir,2,4);
+ packet(0x035f,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0368,clif->pDull/*,XXX*/);
+ packet(0x0838,clif->pActionRequest,2,6);
+ packet(0x085a,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0864,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086d,clif->pMoveToKafra,2,4);
+ packet(0x0870,clif->pWalkToXY,2);
+ packet(0x0874,clif->pGetCharNameRequest,2);
+ packet(0x0875,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0876,clif->pHomMenu,2,4);
+ packet(0x087d,clif->pSolveCharName,2);
+ packet(0x0888,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08ab,clif->pTakeItem,2);
+ packet(0x091f,clif->pTickSend,2);
+ packet(0x0927,clif->pPartyInvite2,2);
+ packet(0x0929,clif->pStoragePassword,0);
+ packet(0x092d,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0938,clif->pDull/*,XXX*/);
+ packet(0x093a,clif->pUseSkillToId,2,4,6);
+ packet(0x0944,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x094d,clif->pReqCloseBuyingStore,0);
+ packet(0x094e,clif->pMoveFromKafra,2,4);
+ packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0963,clif->pFriendsListAdd,2);
+ packet(0x0968,clif->pDropItem,2,4);
#endif
// 2015-02-04cRagexeRE
#if PACKETVER == 20150204
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0966,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0966,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-02-11aRagexeRE
#if PACKETVER == 20150211
- packet(0x023b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0368,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0369,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0436,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0437,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x07e4,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0817,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0819,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0835,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0862,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0863,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0870,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0873,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x087f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0882,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0883,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0885,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0886,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x089c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a0,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a4,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08aa,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0919,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0920,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0951,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0957,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0958,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x023b,clif->pDull/*,XXX*/);
+ packet(0x0368,clif->pHomMenu,2,4);
+ packet(0x0369,clif->pChangeDir,2,4);
+ packet(0x0436,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0437,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x07e4,clif->pDropItem,2,4);
+ packet(0x0817,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0819,clif->pReqCloseBuyingStore,0);
+ packet(0x0835,clif->pDull/*,XXX*/);
+ packet(0x0862,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0863,clif->pUseSkillToId,2,4,6);
+ packet(0x0870,clif->pTakeItem,2);
+ packet(0x0873,clif->pWalkToXY,2);
+ packet(0x087b,clif->pGetCharNameRequest,2);
+ packet(0x087f,clif->pStoragePassword,0);
+ packet(0x0882,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0883,clif->pMoveFromKafra,2,4);
+ packet(0x0885,clif->pTickSend,2);
+ packet(0x0886,clif->pReqClickBuyingStore,2);
+ packet(0x089c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a0,clif->pFriendsListAdd,2);
+ packet(0x08a4,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08aa,clif->pActionRequest,2,6);
+ packet(0x0919,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0920,clif->pSolveCharName,2);
+ packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0951,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0957,clif->pPartyInvite2,2);
+ packet(0x0958,clif->pMoveToKafra,2,4);
#endif
// 2015-02-17aRagexeRE
#if PACKETVER == 20150217
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085b,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-02-25aRagexeRE, 2015-02-25bRagexeRE, 2015-02-25cRagexeRE, 2015-02-25dRagexeRE, 2015-02-25eRagexeRE, 2015-02-26aRagexeRE
#if PACKETVER == 20150225 || \
PACKETVER == 20150226
- packet(0x02c4,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0362,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0819,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0867,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0885,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0896,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x089c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0940,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0946,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0948,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x094f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0952,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0955,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x02c4,clif->pReqClickBuyingStore,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pPartyInvite2,2);
+ packet(0x0362,clif->pReqCloseBuyingStore,0);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pGetCharNameRequest,2);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pTakeItem,2);
+ packet(0x0819,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0867,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0885,clif->pDull/*,XXX*/);
+ packet(0x0896,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089b,clif->pDull/*,XXX*/);
+ packet(0x089c,clif->pMoveToKafra,2,4);
+ packet(0x08a4,clif->pStoragePassword,0);
+ packet(0x0940,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0946,clif->pFriendsListAdd,2);
+ packet(0x0948,clif->pDropItem,2,4);
+ packet(0x094f,clif->pHomMenu,2,4);
+ packet(0x0952,clif->pMoveFromKafra,2,4);
+ packet(0x0955,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pWantToConnection,2,6,10,14,18);
#endif
// 2015-03-04aRagexeRE, 2015-03-04bRagexeRE
#if PACKETVER == 20150304
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0862,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x086d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0879,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0892,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x093a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0947,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x095d,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0960,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0961,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pTakeItem,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pDull/*,XXX*/);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0862,clif->pMoveFromKafra,2,4);
+ packet(0x086d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0879,clif->pChangeDir,2,4);
+ packet(0x087e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0892,clif->pStoragePassword,0);
+ packet(0x089a,clif->pPartyInvite2,2);
+ packet(0x093a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0947,clif->pMoveToKafra,2,4);
+ packet(0x095d,clif->pDull/*,XXX*/);
+ packet(0x0960,clif->pFriendsListAdd,2);
+ packet(0x0961,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-03-11aRagexeRE, 2015-03-11bRagexeRE
#if PACKETVER == 20150311
- packet(0x023b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0360,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0438,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0838,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x087b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0883,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0886,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0888,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0896,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a1,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a3,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a5,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08a6,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0928,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x092e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0943,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0946,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0957,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0958,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x095b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0963,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0964,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x023b,clif->pHomMenu,2,4);
+ packet(0x0360,clif->pReqCloseBuyingStore,0);
+ packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0438,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0838,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086a,clif->pGetCharNameRequest,2);
+ packet(0x086c,clif->pStoragePassword,0);
+ packet(0x087b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0883,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0886,clif->pWalkToXY,2);
+ packet(0x0888,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0896,clif->pActionRequest,2,6);
+ packet(0x08a1,clif->pUseSkillToId,2,4,6);
+ packet(0x08a3,clif->pTakeItem,2);
+ packet(0x08a5,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08a6,clif->pFriendsListAdd,2);
+ packet(0x091c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0928,clif->pChangeDir,2,4);
+ packet(0x092a,clif->pDull/*,XXX*/);
+ packet(0x092e,clif->pMoveFromKafra,2,4);
+ packet(0x093b,clif->pPartyInvite2,2);
+ packet(0x0943,clif->pSolveCharName,2);
+ packet(0x0946,clif->pDull/*,XXX*/);
+ packet(0x0957,clif->pReqClickBuyingStore,2);
+ packet(0x0958,clif->pTickSend,2);
+ packet(0x095b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0963,clif->pDropItem,2,4);
+ packet(0x0964,clif->pMoveToKafra,2,4);
#endif
// 2015-03-18aRagexeRE, 2015-03-18bRagexeRE, 2015-03-18cRagexeRE
#if PACKETVER == 20150318
- packet(0x0202,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x023b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0281,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x07e4,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0802,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0811,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0862,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0863,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0873,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0885,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0889,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x088c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x089c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a4,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x091d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0920,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0927,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0928,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0936,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0937,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0938,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x093a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x093c,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x094c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0951,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0958,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0959,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0960,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x0202,clif->pDull/*,XXX*/);
+ packet(0x023b,clif->pTickSend,2);
+ packet(0x0281,clif->pDull/*,XXX*/);
+ packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x07e4,clif->pFriendsListAdd,2);
+ packet(0x0802,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0811,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0862,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0863,clif->pReqClickBuyingStore,2);
+ packet(0x0873,clif->pStoragePassword,0);
+ packet(0x0885,clif->pReqCloseBuyingStore,0);
+ packet(0x0889,clif->pActionRequest,2,6);
+ packet(0x088c,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x089c,clif->pMoveToKafra,2,4);
+ packet(0x08a4,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x091d,clif->pMoveFromKafra,2,4);
+ packet(0x0920,clif->pDropItem,2,4);
+ packet(0x0927,clif->pChangeDir,2,4);
+ packet(0x0928,clif->pTakeItem,2);
+ packet(0x0936,clif->pUseSkillToId,2,4,6);
+ packet(0x0937,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0938,clif->pPartyInvite2,2);
+ packet(0x093a,clif->pWalkToXY,2);
+ packet(0x093c,clif->pSolveCharName,2);
+ packet(0x094c,clif->pHomMenu,2,4);
+ packet(0x0951,clif->pGetCharNameRequest,2);
+ packet(0x0958,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0959,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0960,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2015-03-25bRagexeRE, 2015-03-25cRagexeRE
#if PACKETVER == 20150325
- packet(0x0202,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0363,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0365,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0438,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0802,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0819,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x086f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0883,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0885,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0891,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0893,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0897,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0899,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a1,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a7,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0919,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0931,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0932,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0938,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0947,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0950,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0954,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0969,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
+ packet(0x0202,clif->pPartyInvite2,2);
+ packet(0x0363,clif->pDropItem,2,4);
+ packet(0x0365,clif->pUseSkillToId,2,4,6);
+ packet(0x0438,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0802,clif->pDull/*,XXX*/);
+ packet(0x0819,clif->pReqClickBuyingStore,2);
+ packet(0x085d,clif->pSolveCharName,2);
+ packet(0x086f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087c,clif->pMoveToKafra,2,4);
+ packet(0x087e,clif->pChangeDir,2,4);
+ packet(0x0883,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0885,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0891,clif->pGetCharNameRequest,2);
+ packet(0x0893,clif->pDull/*,XXX*/);
+ packet(0x0897,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0899,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a1,clif->pActionRequest,2,6);
+ packet(0x08a7,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0919,clif->pStoragePassword,0);
+ packet(0x092c,clif->pTakeItem,2);
+ packet(0x0931,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0932,clif->pWalkToXY,2);
+ packet(0x0938,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pFriendsListAdd,2);
+ packet(0x0947,clif->pReqCloseBuyingStore,0);
+ packet(0x094a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0950,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0954,clif->pTickSend,2);
+ packet(0x0969,clif->pMoveFromKafra,2,4);
#endif
// 2015-04-01bRagexeRE
#if PACKETVER == 20150401
- packet(0x0362,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0367,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0437,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x083c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x085e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x086f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0875,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x087e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x088f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0895,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0898,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x089c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a5,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x091c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0922,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0924,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0938,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0939,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x093a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x093b,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x093e,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0946,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0949,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0953,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0964,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x0362,clif->pActionRequest,2,6);
+ packet(0x0367,clif->pGetCharNameRequest,2);
+ packet(0x0437,clif->pReqClickBuyingStore,2);
+ packet(0x083c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x085e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x086f,clif->pWalkToXY,2);
+ packet(0x0875,clif->pItemListWindowSelected,2,4,8);
+ packet(0x087e,clif->pDull/*,XXX*/);
+ packet(0x088c,clif->pDropItem,2,4);
+ packet(0x088f,clif->pTickSend,2);
+ packet(0x0895,clif->pMoveFromKafra,2,4);
+ packet(0x0898,clif->pHomMenu,2,4);
+ packet(0x089c,clif->pStoragePassword,0);
+ packet(0x08a5,clif->pMoveToKafra,2,4);
+ packet(0x091b,clif->pPartyInvite2,2);
+ packet(0x091c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0922,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0924,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0938,clif->pReqCloseBuyingStore,0);
+ packet(0x0939,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x093a,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x093b,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x093e,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0946,clif->pDull/*,XXX*/);
+ packet(0x0949,clif->pTakeItem,2);
+ packet(0x094b,clif->pUseSkillToId,2,4,6);
+ packet(0x0953,clif->pFriendsListAdd,2);
+ packet(0x095f,clif->pSolveCharName,2);
+ packet(0x0964,clif->pChangeDir,2,4);
#endif
// 2015-04-08aRagexeRE
#if PACKETVER == 20150408
- packet(0x0819,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x085a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0865,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0868,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x086b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x086e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0878,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x087e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x087f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0888,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0889,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0891,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0898,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a2,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a4,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x091e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0922,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0946,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0955,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0957,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0959,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0963,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
+ packet(0x0819,clif->pMoveFromKafra,2,4);
+ packet(0x085a,clif->pTickSend,2);
+ packet(0x085c,clif->pUseSkillToId,2,4,6);
+ packet(0x085e,clif->pHomMenu,2,4);
+ packet(0x0865,clif->pActionRequest,2,6);
+ packet(0x0868,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x086b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x086e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0878,clif->pPartyInvite2,2);
+ packet(0x087e,clif->pGetCharNameRequest,2);
+ packet(0x087f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0888,clif->pMoveToKafra,2,4);
+ packet(0x0889,clif->pStoragePassword,0);
+ packet(0x0891,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0898,clif->pDropItem,2,4);
+ packet(0x089c,clif->pWalkToXY,2);
+ packet(0x08a2,clif->pSolveCharName,2);
+ packet(0x08a4,clif->pFriendsListAdd,2);
+ packet(0x091b,clif->pDull/*,XXX*/);
+ packet(0x091e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0922,clif->pChangeDir,2,4);
+ packet(0x092a,clif->pDull/*,XXX*/);
+ packet(0x0946,clif->pReqCloseBuyingStore,0);
+ packet(0x094f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0955,clif->pReqClickBuyingStore,2);
+ packet(0x0957,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0959,clif->pTakeItem,2);
+ packet(0x095e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0963,clif->pSearchStoreInfoNextPage,0);
#endif
// 2015-04-15aRagexeRE
#if PACKETVER == 20150415
- packet(0x0361,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0364,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0366,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0368,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0802,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0817,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0835,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x085e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0863,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0867,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0868,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0869,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0880,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0891,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0898,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a0,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0922,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x093c,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0941,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0946,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0953,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x095c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0960,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0961,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x0361,clif->pMoveToKafra,2,4);
+ packet(0x0364,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0366,clif->pWalkToXY,2);
+ packet(0x0368,clif->pReqClickBuyingStore,2);
+ packet(0x0802,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0817,clif->pTakeItem,2);
+ packet(0x0835,clif->pDropItem,2,4);
+ packet(0x085e,clif->pDull/*,XXX*/);
+ packet(0x0863,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0867,clif->pPartyInvite2,2);
+ packet(0x0868,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0869,clif->pHomMenu,2,4);
+ packet(0x086c,clif->pActionRequest,2,6);
+ packet(0x0880,clif->pDull/*,XXX*/);
+ packet(0x088e,clif->pUseSkillToId,2,4,6);
+ packet(0x0891,clif->pGetCharNameRequest,2);
+ packet(0x0898,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a0,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0922,clif->pMoveFromKafra,2,4);
+ packet(0x092e,clif->pSolveCharName,2);
+ packet(0x093c,clif->pTickSend,2);
+ packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0941,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0946,clif->pReqCloseBuyingStore,0);
+ packet(0x094d,clif->pChangeDir,2,4);
+ packet(0x0953,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x095c,clif->pFriendsListAdd,2);
+ packet(0x0960,clif->pStoragePassword,0);
+ packet(0x0961,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2015-04-22aRagexeRE
#if PACKETVER == 20150422
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0955,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0955,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-04-29aRagexeRE
#if PACKETVER == 20150429
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0363,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0867,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x086a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0886,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0894,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0899,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x089f,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a6,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a8,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08ad,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0929,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0943,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0363,clif->pChangeDir,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0867,clif->pStoragePassword,0);
+ packet(0x086a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0886,clif->pPartyInvite2,2);
+ packet(0x088f,clif->pHomMenu,2,4);
+ packet(0x0894,clif->pDropItem,2,4);
+ packet(0x0899,clif->pMoveToKafra,2,4);
+ packet(0x089f,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a6,clif->pDull/*,XXX*/);
+ packet(0x08a8,clif->pDull/*,XXX*/);
+ packet(0x08ad,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0929,clif->pMoveFromKafra,2,4);
+ packet(0x093d,clif->pFriendsListAdd,2);
+ packet(0x0943,clif->pTakeItem,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-05-07bRagexeRE
#if PACKETVER == 20150507
- packet(0x023b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0864,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0887,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0889,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0924,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x093b,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0941,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0942,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0953,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0955,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0958,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pHomMenu,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pReqCloseBuyingStore,0);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pTakeItem,2);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pMoveToKafra,2,4);
+ packet(0x0864,clif->pPartyInvite2,2);
+ packet(0x0887,clif->pDull/*,XXX*/);
+ packet(0x0889,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0924,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x093b,clif->pChangeDir,2,4);
+ packet(0x0941,clif->pMoveFromKafra,2,4);
+ packet(0x0942,clif->pDull/*,XXX*/);
+ packet(0x0953,clif->pStoragePassword,0);
+ packet(0x0955,clif->pDropItem,2,4);
+ packet(0x0958,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-05-13aRagexeRE
#if PACKETVER == 20150513
- packet(0x022d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x02c4,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0363,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0864,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0879,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0883,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0885,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a8,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0923,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0924,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0927,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0958,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0960,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pReqCloseBuyingStore,0);
+ packet(0x02c4,clif->pDull/*,XXX*/);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0363,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pHomMenu,2,4);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0864,clif->pMoveFromKafra,2,4);
+ packet(0x0879,clif->pMoveToKafra,2,4);
+ packet(0x0883,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0885,clif->pDropItem,2,4);
+ packet(0x08a8,clif->pFriendsListAdd,2);
+ packet(0x0923,clif->pStoragePassword,0);
+ packet(0x0924,clif->pChangeDir,2,4);
+ packet(0x0927,clif->pDull/*,XXX*/);
+ packet(0x094a,clif->pPartyInvite2,2);
+ packet(0x0958,clif->pTakeItem,2);
+ packet(0x0960,clif->pItemListWindowSelected,2,4,8);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-05-20aRagexeRE
#if PACKETVER == 20150520
- packet(0x0202,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0361,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0835,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x085e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0865,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0868,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0880,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0882,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x089c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a2,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08ad,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091d,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0924,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0931,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0936,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x093d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0940,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0945,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x094e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x095b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0960,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0961,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x0202,clif->pTickSend,2);
+ packet(0x0361,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0835,clif->pReqCloseBuyingStore,0);
+ packet(0x085e,clif->pReqClickBuyingStore,2);
+ packet(0x0865,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0868,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0880,clif->pPartyInvite2,2);
+ packet(0x0882,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x089c,clif->pStoragePassword,0);
+ packet(0x089e,clif->pDropItem,2,4);
+ packet(0x08a2,clif->pGetCharNameRequest,2);
+ packet(0x08ad,clif->pChangeDir,2,4);
+ packet(0x091c,clif->pTakeItem,2);
+ packet(0x091d,clif->pActionRequest,2,6);
+ packet(0x0924,clif->pMoveFromKafra,2,4);
+ packet(0x092b,clif->pWalkToXY,2);
+ packet(0x0931,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0936,clif->pUseSkillToId,2,4,6);
+ packet(0x093d,clif->pFriendsListAdd,2);
+ packet(0x0940,clif->pDull/*,XXX*/);
+ packet(0x0945,clif->pSolveCharName,2);
+ packet(0x094e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x095b,clif->pHomMenu,2,4);
+ packet(0x095f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0960,clif->pDull/*,XXX*/);
+ packet(0x0961,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2015-05-27aRagexeRE
#if PACKETVER == 20150527
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x083c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0940,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pUseSkillToId,2,4,6);
+ packet(0x083c,clif->pStoragePassword,0);
+ packet(0x0940,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-06-03bRagexeRE
#if PACKETVER == 20150603
- packet(0x0361,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0437,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0811,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0819,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0860,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0864,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0867,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x086a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0873,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0877,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0881,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0884,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0897,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x089a,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x089d,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x089e,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a1,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08ad,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x091b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0922,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x093b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x093f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0955,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0956,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0960,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0969,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x096a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
+ packet(0x0361,clif->pPartyInvite2,2);
+ packet(0x0437,clif->pDull/*,XXX*/);
+ packet(0x0811,clif->pChangeDir,2,4);
+ packet(0x0819,clif->pReqClickBuyingStore,2);
+ packet(0x0860,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0864,clif->pFriendsListAdd,2);
+ packet(0x0867,clif->pMoveToKafra,2,4);
+ packet(0x086a,clif->pMoveFromKafra,2,4);
+ packet(0x0873,clif->pActionRequest,2,6);
+ packet(0x0877,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0881,clif->pGetCharNameRequest,2);
+ packet(0x0884,clif->pDull/*,XXX*/);
+ packet(0x088b,clif->pDropItem,2,4);
+ packet(0x0897,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x089a,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x089d,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x089e,clif->pTickSend,2);
+ packet(0x08a1,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08ad,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x091b,clif->pSolveCharName,2);
+ packet(0x0922,clif->pStoragePassword,0);
+ packet(0x092d,clif->pTakeItem,2);
+ packet(0x093b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x093f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0955,clif->pHomMenu,2,4);
+ packet(0x0956,clif->pReqCloseBuyingStore,0);
+ packet(0x0960,clif->pUseSkillToId,2,4,6);
+ packet(0x0969,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x096a,clif->pWalkToXY,2);
#endif
// 2015-06-10aRagexeRE
#if PACKETVER == 20150610
- packet(0x022d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0438,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x07e4,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0835,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0870,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0872,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0877,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x087e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0884,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0885,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0888,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x088d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x088f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0897,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a0,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08ac,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0925,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x092c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x092e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0932,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x093e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0940,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0946,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0949,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0957,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x095d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0964,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x022d,clif->pReqCloseBuyingStore,0);
+ packet(0x0438,clif->pItemListWindowSelected,2,4,8);
+ packet(0x07e4,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0835,clif->pDull/*,XXX*/);
+ packet(0x0870,clif->pPartyInvite2,2);
+ packet(0x0872,clif->pSolveCharName,2);
+ packet(0x0877,clif->pReqClickBuyingStore,2);
+ packet(0x087e,clif->pGetCharNameRequest,2);
+ packet(0x0884,clif->pMoveFromKafra,2,4);
+ packet(0x0885,clif->pHomMenu,2,4);
+ packet(0x0888,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088c,clif->pMoveToKafra,2,4);
+ packet(0x088d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x088f,clif->pWalkToXY,2);
+ packet(0x0897,clif->pFriendsListAdd,2);
+ packet(0x08a0,clif->pStoragePassword,0);
+ packet(0x08ac,clif->pDropItem,2,4);
+ packet(0x0925,clif->pTakeItem,2);
+ packet(0x092b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x092c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x092e,clif->pDull/*,XXX*/);
+ packet(0x0932,clif->pSearchStoreInfoNextPage,0);
+ packet(0x093e,clif->pActionRequest,2,6);
+ packet(0x0940,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0946,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0949,clif->pUseSkillToId,2,4,6);
+ packet(0x0957,clif->pTickSend,2);
+ packet(0x095d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0964,clif->pChangeDir,2,4);
#endif
// 2015-06-17aRagexeRE, 2015-06-18aRagexeRE
#if PACKETVER == 20150617 || \
PACKETVER == 20150618
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0362,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0363,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0365,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07ec,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0811,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0869,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x086a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x086b,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0870,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x087a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0886,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0894,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0940,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x094e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pTakeItem,2);
+ packet(0x0362,clif->pReqClickBuyingStore,2);
+ packet(0x0363,clif->pStoragePassword,0);
+ packet(0x0365,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07ec,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0811,clif->pDull/*,XXX*/);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0869,clif->pMoveFromKafra,2,4);
+ packet(0x086a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x086b,clif->pChangeDir,2,4);
+ packet(0x0870,clif->pPartyInvite2,2);
+ packet(0x087a,clif->pMoveToKafra,2,4);
+ packet(0x0886,clif->pHomMenu,2,4);
+ packet(0x0894,clif->pDull/*,XXX*/);
+ packet(0x0940,clif->pDropItem,2,4);
+ packet(0x094e,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-06-24aRagexeRE
#if PACKETVER == 20150624
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0365,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0870,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0940,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0941,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0966,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0365,clif->pHomMenu,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0870,clif->pStoragePassword,0);
+ packet(0x0940,clif->pMoveFromKafra,2,4);
+ packet(0x0941,clif->pFriendsListAdd,2);
+ packet(0x0966,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-07-01bRagexeRE
#if PACKETVER == 20150701
- packet(0x023b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0281,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x07e4,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0802,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x087d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x087e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0883,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0893,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a0,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a4,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a5,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a6,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08ad,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0919,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0923,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0928,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x093e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x093f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0946,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0954,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0956,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0958,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x095f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0960,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0968,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x023b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0281,clif->pSearchStoreInfoNextPage,0);
+ packet(0x07e4,clif->pMoveFromKafra,2,4);
+ packet(0x0802,clif->pGetCharNameRequest,2);
+ packet(0x086d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x087d,clif->pTickSend,2);
+ packet(0x087e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0883,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088e,clif->pReqCloseBuyingStore,0);
+ packet(0x0893,clif->pDull/*,XXX*/);
+ packet(0x08a0,clif->pDropItem,2,4);
+ packet(0x08a4,clif->pReqClickBuyingStore,2);
+ packet(0x08a5,clif->pPartyInvite2,2);
+ packet(0x08a6,clif->pUseSkillToId,2,4,6);
+ packet(0x08ad,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0919,clif->pStoragePassword,0);
+ packet(0x0923,clif->pDull/*,XXX*/);
+ packet(0x0928,clif->pMoveToKafra,2,4);
+ packet(0x092c,clif->pWalkToXY,2);
+ packet(0x093e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x093f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0946,clif->pTakeItem,2);
+ packet(0x094e,clif->pSolveCharName,2);
+ packet(0x0954,clif->pHomMenu,2,4);
+ packet(0x0956,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0958,clif->pActionRequest,2,6);
+ packet(0x095f,clif->pFriendsListAdd,2);
+ packet(0x0960,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0968,clif->pChangeDir,2,4);
#endif
// 2015-07-08bRagexeRE, 2015-07-08cRagexeRE, 2015-07-08dRagexeRE
#if PACKETVER == 20150708
- packet(0x022d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0368,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085e,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0872,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0884,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x089d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a5,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08ad,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x092a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0962,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pSolveCharName,2);
+ packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pPartyInvite2,2);
+ packet(0x0368,clif->pHomMenu,2,4);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085e,clif->pMoveToKafra,2,4);
+ packet(0x0872,clif->pTakeItem,2);
+ packet(0x087f,clif->pDull/*,XXX*/);
+ packet(0x0884,clif->pWalkToXY,2);
+ packet(0x089d,clif->pChangeDir,2,4);
+ packet(0x08a5,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08ad,clif->pStoragePassword,0);
+ packet(0x091f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x092a,clif->pMoveFromKafra,2,4);
+ packet(0x093c,clif->pFriendsListAdd,2);
+ packet(0x095b,clif->pDropItem,2,4);
+ packet(0x0962,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-07-15aRagexeRE
#if PACKETVER == 20150715
- packet(0x023b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0362,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0364,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0436,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0437,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0438,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0835,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x083c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086f,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0873,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0879,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x087c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x087f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0886,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0895,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0896,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0897,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0899,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x089a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08ac,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0917,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x093e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0944,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0950,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0956,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0961,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0965,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x023b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0362,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0364,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0436,clif->pSolveCharName,2);
+ packet(0x0437,clif->pUseSkillToId,2,4,6);
+ packet(0x0438,clif->pWalkToXY,2);
+ packet(0x0835,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x083c,clif->pActionRequest,2,6);
+ packet(0x085c,clif->pGetCharNameRequest,2);
+ packet(0x086f,clif->pMoveFromKafra,2,4);
+ packet(0x0873,clif->pTickSend,2);
+ packet(0x0879,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x087c,clif->pDropItem,2,4);
+ packet(0x087f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0886,clif->pDull/*,XXX*/);
+ packet(0x0895,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0896,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0897,clif->pPartyInvite2,2);
+ packet(0x0899,clif->pReqCloseBuyingStore,0);
+ packet(0x089a,clif->pTakeItem,2);
+ packet(0x08a4,clif->pDull/*,XXX*/);
+ packet(0x08ac,clif->pChangeDir,2,4);
+ packet(0x0917,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x093e,clif->pHomMenu,2,4);
+ packet(0x0944,clif->pFriendsListAdd,2);
+ packet(0x0950,clif->pReqClickBuyingStore,2);
+ packet(0x0956,clif->pStoragePassword,0);
+ packet(0x0961,clif->pMoveToKafra,2,4);
+ packet(0x0965,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2015-07-22bRagexeRE
#if PACKETVER == 20150722
- packet(0x023b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0281,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0360,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0361,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0368,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0811,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0815,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0817,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0869,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0878,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x087b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x087d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0880,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0884,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0899,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a8,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0919,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0921,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0925,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x092e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x093c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x093d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x094c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0951,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0958,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x023b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0281,clif->pGetCharNameRequest,2);
+ packet(0x0360,clif->pActionRequest,2,6);
+ packet(0x0361,clif->pDropItem,2,4);
+ packet(0x0368,clif->pPartyInvite2,2);
+ packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0811,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0815,clif->pReqCloseBuyingStore,0);
+ packet(0x0817,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0869,clif->pTakeItem,2);
+ packet(0x0878,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x087b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x087d,clif->pWalkToXY,2);
+ packet(0x087e,clif->pSolveCharName,2);
+ packet(0x0880,clif->pReqClickBuyingStore,2);
+ packet(0x0884,clif->pHomMenu,2,4);
+ packet(0x088d,clif->pTickSend,2);
+ packet(0x0899,clif->pMoveFromKafra,2,4);
+ packet(0x08a8,clif->pChangeDir,2,4);
+ packet(0x0919,clif->pDull/*,XXX*/);
+ packet(0x0921,clif->pMoveToKafra,2,4);
+ packet(0x0925,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x092e,clif->pFriendsListAdd,2);
+ packet(0x093c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x093d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x094c,clif->pUseSkillToId,2,4,6);
+ packet(0x094f,clif->pDull/*,XXX*/);
+ packet(0x0951,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0958,clif->pStoragePassword,0);
#endif
// 2015-07-29aRagexeRE
#if PACKETVER == 20150729
- packet(0x0437,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0438,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x085b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0860,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x086d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x086e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x086f,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0870,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0880,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0881,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0886,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a3,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a4,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ac,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08ad,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0920,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x092b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x092f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x093a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x093f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0940,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x094f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0955,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0961,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
+ packet(0x0437,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0438,clif->pHomMenu,2,4);
+ packet(0x085b,clif->pDull/*,XXX*/);
+ packet(0x0860,clif->pTakeItem,2);
+ packet(0x086c,clif->pMoveToKafra,2,4);
+ packet(0x086d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x086e,clif->pWalkToXY,2);
+ packet(0x086f,clif->pMoveFromKafra,2,4);
+ packet(0x0870,clif->pGetCharNameRequest,2);
+ packet(0x0880,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0881,clif->pActionRequest,2,6);
+ packet(0x0886,clif->pSolveCharName,2);
+ packet(0x089a,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089b,clif->pFriendsListAdd,2);
+ packet(0x08a3,clif->pDull/*,XXX*/);
+ packet(0x08a4,clif->pChangeDir,2,4);
+ packet(0x08ac,clif->pPartyInvite2,2);
+ packet(0x08ad,clif->pReqClickBuyingStore,2);
+ packet(0x0920,clif->pSearchStoreInfoNextPage,0);
+ packet(0x092b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x092f,clif->pUseSkillToId,2,4,6);
+ packet(0x093a,clif->pTickSend,2);
+ packet(0x093f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0940,clif->pDropItem,2,4);
+ packet(0x094f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0955,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0961,clif->pStoragePassword,0);
+ packet(0x096a,clif->pReqCloseBuyingStore,0);
#endif
// 2015-08-05dRagexeRE
#if PACKETVER == 20150805
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x088a,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-08-12aRagexeRE
#if PACKETVER == 20150812
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087f,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-08-19aRagexeRE, 2015-08-19bRagexeRE
#if PACKETVER == 20150819
- packet(0x0202,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x022d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0281,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x085d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0862,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0865,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0871,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0888,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0919,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0927,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0940,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0961,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0967,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pItemListWindowSelected,2,4,8);
+ packet(0x022d,clif->pUseSkillToId,2,4,6);
+ packet(0x0281,clif->pTakeItem,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x085d,clif->pMoveFromKafra,2,4);
+ packet(0x0862,clif->pDull/*,XXX*/);
+ packet(0x0865,clif->pFriendsListAdd,2);
+ packet(0x0871,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0888,clif->pHomMenu,2,4);
+ packet(0x0919,clif->pMoveToKafra,2,4);
+ packet(0x091e,clif->pStoragePassword,0);
+ packet(0x0927,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0940,clif->pDropItem,2,4);
+ packet(0x0961,clif->pPartyInvite2,2);
+ packet(0x0967,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-08-26aRagexeRE, 2015-08-26bRagexeRE
#if PACKETVER == 20150826
- packet(0x0362,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0368,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0436,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x07ec,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0819,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0861,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0865,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x086b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0870,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x087b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x088b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0890,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0891,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a0,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08a1,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a8,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0924,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0928,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x092e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x093b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0945,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0951,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0959,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0964,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0968,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0969,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
+ packet(0x0362,clif->pStoragePassword,0);
+ packet(0x0368,clif->pMoveFromKafra,2,4);
+ packet(0x0436,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x07ec,clif->pActionRequest,2,6);
+ packet(0x0819,clif->pReqClickBuyingStore,2);
+ packet(0x0861,clif->pDull/*,XXX*/);
+ packet(0x0865,clif->pWalkToXY,2);
+ packet(0x086b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0870,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x087b,clif->pSolveCharName,2);
+ packet(0x088b,clif->pPartyInvite2,2);
+ packet(0x088d,clif->pFriendsListAdd,2);
+ packet(0x0890,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0891,clif->pUseSkillToId,2,4,6);
+ packet(0x08a0,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08a1,clif->pMoveToKafra,2,4);
+ packet(0x08a4,clif->pTakeItem,2);
+ packet(0x08a8,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0924,clif->pDropItem,2,4);
+ packet(0x0928,clif->pReqCloseBuyingStore,0);
+ packet(0x092e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x093b,clif->pGetCharNameRequest,2);
+ packet(0x0945,clif->pHomMenu,2,4);
+ packet(0x094f,clif->pChangeDir,2,4);
+ packet(0x0951,clif->pTickSend,2);
+ packet(0x0959,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0964,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0968,clif->pDull/*,XXX*/);
+ packet(0x0969,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
#endif
// 2015-09-02aRagexeRE
#if PACKETVER == 20150902
- packet(0x023b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0360,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0367,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0802,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x083c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x085b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0863,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x087b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0886,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0887,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0889,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x088d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0892,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0897,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0899,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08a9,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0923,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0928,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x092d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0941,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0947,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x094f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0953,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x095b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0960,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
+ packet(0x023b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0360,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0367,clif->pTickSend,2);
+ packet(0x0802,clif->pStoragePassword,0);
+ packet(0x083c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x085b,clif->pActionRequest,2,6);
+ packet(0x085d,clif->pSolveCharName,2);
+ packet(0x0863,clif->pUseSkillToId,2,4,6);
+ packet(0x086f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x087b,clif->pWalkToXY,2);
+ packet(0x087f,clif->pDull/*,XXX*/);
+ packet(0x0886,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0887,clif->pDull/*,XXX*/);
+ packet(0x0889,clif->pReqCloseBuyingStore,0);
+ packet(0x088d,clif->pMoveFromKafra,2,4);
+ packet(0x0892,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0897,clif->pMoveToKafra,2,4);
+ packet(0x0899,clif->pGetCharNameRequest,2);
+ packet(0x08a9,clif->pDropItem,2,4);
+ packet(0x0923,clif->pFriendsListAdd,2);
+ packet(0x0928,clif->pTakeItem,2);
+ packet(0x092a,clif->pHomMenu,2,4);
+ packet(0x092d,clif->pPartyInvite2,2);
+ packet(0x0941,clif->pChangeDir,2,4);
+ packet(0x0947,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x094f,clif->pReqClickBuyingStore,2);
+ packet(0x0953,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x095b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0960,clif->pSearchStoreInfoNextPage,0);
#endif
// 2015-09-09aRagexeRE
#if PACKETVER == 20150909
- packet(0x023b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0361,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0365,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0437,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0861,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0871,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x087b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0883,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0886,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0895,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0928,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0940,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0941,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0962,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x023b,clif->pActionRequest,2,6);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqCloseBuyingStore,0);
+ packet(0x0361,clif->pGetCharNameRequest,2);
+ packet(0x0365,clif->pWalkToXY,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pStoragePassword,0);
+ packet(0x0437,clif->pMoveFromKafra,2,4);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0861,clif->pDull/*,XXX*/);
+ packet(0x0871,clif->pItemListWindowSelected,2,4,8);
+ packet(0x087b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0883,clif->pTakeItem,2);
+ packet(0x0886,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088f,clif->pPartyInvite2,2);
+ packet(0x0895,clif->pFriendsListAdd,2);
+ packet(0x0928,clif->pDull/*,XXX*/);
+ packet(0x0940,clif->pReqClickBuyingStore,2);
+ packet(0x0941,clif->pHomMenu,2,4);
+ packet(0x095e,clif->pDropItem,2,4);
+ packet(0x0962,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pChangeDir,2,4);
#endif
// 2015-09-16cRagexeRE
#if PACKETVER == 20150916
- packet(0x022d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0817,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0835,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0869,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0873,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0877,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0881,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x089b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x089c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x089e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08ac,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0920,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0924,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x092e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x092f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0934,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0936,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0938,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x093e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0941,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0942,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0948,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x094f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x095a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0960,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0961,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0969,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x022d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0817,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0835,clif->pReqClickBuyingStore,2);
+ packet(0x085e,clif->pMoveFromKafra,2,4);
+ packet(0x0869,clif->pActionRequest,2,6);
+ packet(0x0873,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0877,clif->pWalkToXY,2);
+ packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0881,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x089b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x089c,clif->pTakeItem,2);
+ packet(0x089e,clif->pFriendsListAdd,2);
+ packet(0x08ac,clif->pTickSend,2);
+ packet(0x0920,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0924,clif->pPartyInvite2,2);
+ packet(0x092e,clif->pReqCloseBuyingStore,0);
+ packet(0x092f,clif->pDropItem,2,4);
+ packet(0x0934,clif->pMoveToKafra,2,4);
+ packet(0x0936,clif->pChangeDir,2,4);
+ packet(0x0938,clif->pDull/*,XXX*/);
+ packet(0x093e,clif->pUseSkillToId,2,4,6);
+ packet(0x0941,clif->pStoragePassword,0);
+ packet(0x0942,clif->pSolveCharName,2);
+ packet(0x0948,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x094f,clif->pDull/*,XXX*/);
+ packet(0x095a,clif->pGetCharNameRequest,2);
+ packet(0x0960,clif->pHomMenu,2,4);
+ packet(0x0961,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0969,clif->pWantToConnection,2,6,10,14,18);
#endif
// 2015-09-23bRagexeRE, 2015-09-23eRagexeRE, 2015-09-23fRagexeRE
#if PACKETVER == 20150923
- packet(0x0361,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x07e4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0817,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x085c,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x085d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0864,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x086f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0870,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0879,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0886,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x088e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0892,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0895,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a0,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a2,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a5,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08a6,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x091e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x092b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0930,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0936,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x093b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0951,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0961,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
+ packet(0x0361,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x07e4,clif->pStoragePassword,0);
+ packet(0x0817,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x085c,clif->pSolveCharName,2);
+ packet(0x085d,clif->pFriendsListAdd,2);
+ packet(0x0864,clif->pHomMenu,2,4);
+ packet(0x086e,clif->pReqCloseBuyingStore,0);
+ packet(0x086f,clif->pUseSkillToId,2,4,6);
+ packet(0x0870,clif->pChangeDir,2,4);
+ packet(0x0879,clif->pMoveFromKafra,2,4);
+ packet(0x087f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0886,clif->pWalkToXY,2);
+ packet(0x088e,clif->pReqClickBuyingStore,2);
+ packet(0x0892,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0895,clif->pDull/*,XXX*/);
+ packet(0x089b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089f,clif->pMoveToKafra,2,4);
+ packet(0x08a0,clif->pTickSend,2);
+ packet(0x08a2,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a5,clif->pGetCharNameRequest,2);
+ packet(0x08a6,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x091e,clif->pDull/*,XXX*/);
+ packet(0x092b,clif->pTakeItem,2);
+ packet(0x0930,clif->pDropItem,2,4);
+ packet(0x0936,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x093b,clif->pPartyInvite2,2);
+ packet(0x0951,clif->pActionRequest,2,6);
+ packet(0x0961,clif->pItemListWindowSelected,2,4,8);
#endif
// 2015-10-01bRagexeRE
#if PACKETVER == 20151001
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0960,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0960,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-10-07aRagexeRE
#if PACKETVER == 20151007
- packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0862,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x093f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0961,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0967,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pFriendsListAdd,2);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0862,clif->pDull/*,XXX*/);
+ packet(0x093f,clif->pHomMenu,2,4);
+ packet(0x095f,clif->pChangeDir,2,4);
+ packet(0x0961,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0967,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-10-14bRagexeRE
#if PACKETVER == 20151014
- packet(0x0202,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0817,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0838,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x085a,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0860,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0863,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0872,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0874,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0881,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0883,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0884,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0889,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x088e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x089a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x089f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08aa,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x091d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0930,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0934,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0944,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x094f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0956,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x095e,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0961,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0964,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x0202,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0817,clif->pFriendsListAdd,2);
+ packet(0x0838,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x085a,clif->pUseSkillToId,2,4,6);
+ packet(0x085c,clif->pActionRequest,2,6);
+ packet(0x0860,clif->pDropItem,2,4);
+ packet(0x0863,clif->pChangeDir,2,4);
+ packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0872,clif->pHomMenu,2,4);
+ packet(0x0874,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0881,clif->pMoveFromKafra,2,4);
+ packet(0x0883,clif->pTickSend,2);
+ packet(0x0884,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0889,clif->pReqClickBuyingStore,2);
+ packet(0x088e,clif->pDull/*,XXX*/);
+ packet(0x089a,clif->pDull/*,XXX*/);
+ packet(0x089b,clif->pReqCloseBuyingStore,0);
+ packet(0x089f,clif->pWalkToXY,2);
+ packet(0x08aa,clif->pTakeItem,2);
+ packet(0x091c,clif->pPartyInvite2,2);
+ packet(0x091d,clif->pStoragePassword,0);
+ packet(0x0930,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0934,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0944,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x094f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0956,clif->pSolveCharName,2);
+ packet(0x095e,clif->pMoveToKafra,2,4);
+ packet(0x0961,clif->pGetCharNameRequest,2);
+ packet(0x0964,clif->pWantToConnection,2,6,10,14,18);
#endif
// 2015-10-21aRagexeRE, 2015-10-22aRagexeRE
#if PACKETVER == 20151021 || \
PACKETVER == 20151022
- packet(0x023b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x02c4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x02c4,clif->pStoragePassword,0);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pMoveToKafra,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pChangeDir,2,4);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086a,clif->pFriendsListAdd,2);
+ packet(0x091d,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-10-28bRagexeRE, 2015-10-28bRagexeRE_2, 2015-10-28cRagexeRE, 2015-10-28dRagexeRE, 2015-10-29aRagexeRE
#if PACKETVER == 20151028 || \
PACKETVER == 20151029
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0860,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0860,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-11-04aRagexeRE
#if PACKETVER == 20151104
- packet(0x023b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0360,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0363,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0437,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07ec,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0811,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0815,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0886,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0887,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x088b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x088d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a3,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a5,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0928,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0939,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093a,clif->pItemListWindowSelected,2,4,8,12); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0940,clif->pStoragePassword,2,4,20); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0964,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x023b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0360,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0363,clif->pWalkToXY,2);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pReqClickBuyingStore,2);
+ packet(0x0437,clif->pDropItem,2,4);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07ec,clif->pFriendsListAdd,2);
+ packet(0x0811,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0815,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0886,clif->pTickSend,2);
+ packet(0x0887,clif->pGetCharNameRequest,2);
+ packet(0x088b,clif->pMoveToKafra,2,4);
+ packet(0x088d,clif->pHomMenu,2,4);
+ packet(0x08a3,clif->pDull/*,XXX*/);
+ packet(0x08a5,clif->pPartyInvite2,2);
+ packet(0x0928,clif->pChangeDir,2,4);
+ packet(0x0939,clif->pDull/*,XXX*/);
+ packet(0x093a,clif->pItemListWindowSelected,2,4,8,12);
+ packet(0x0940,clif->pStoragePassword,2,4,20);
+ packet(0x0964,clif->pTakeItem,2);
#endif
// 2015-11-11aRagexeRE
#if PACKETVER == 20151111
- packet(0x02c4,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085d,clif->pItemListWindowSelected,2,4,8,12); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0862,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0871,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0885,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x089c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0942,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0958,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0966,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0967,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0969,clif->pStoragePassword,2,4,20); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x02c4,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pHomMenu,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pMoveToKafra,2,4);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pDull/*,XXX*/);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pPartyInvite2,2);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085d,clif->pItemListWindowSelected,2,4,8,12);
+ packet(0x0862,clif->pDropItem,2,4);
+ packet(0x0871,clif->pFriendsListAdd,2);
+ packet(0x0885,clif->pActionRequest,2,6);
+ packet(0x089c,clif->pChangeDir,2,4);
+ packet(0x0942,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x094a,clif->pTakeItem,2);
+ packet(0x0958,clif->pDull/*,XXX*/);
+ packet(0x0966,clif->pMoveFromKafra,2,4);
+ packet(0x0967,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0969,clif->pStoragePassword,2,4,20);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-11-18aRagexeRE
#if PACKETVER == 20151118
- packet(0x022d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x035f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x088b,clif->pStoragePassword,2,4,20); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08ab,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0921,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0925,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0943,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0946,clif->pItemListWindowSelected,2,4,8,12); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0957,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095c,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pTickSend,2);
+ packet(0x035f,clif->pHomMenu,2,4);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pPartyInvite2,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086b,clif->pMoveToKafra,2,4);
+ packet(0x088b,clif->pStoragePassword,2,4,20);
+ packet(0x08ab,clif->pMoveFromKafra,2,4);
+ packet(0x0921,clif->pFriendsListAdd,2);
+ packet(0x0925,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092e,clif->pChangeDir,2,4);
+ packet(0x092f,clif->pDull/*,XXX*/);
+ packet(0x093c,clif->pDropItem,2,4);
+ packet(0x0943,clif->pTakeItem,2);
+ packet(0x0946,clif->pItemListWindowSelected,2,4,8,12);
+ packet(0x0957,clif->pDull/*,XXX*/);
+ packet(0x095c,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-11-25bRagexeRE, 2015-11-25cRagexeRE, 2015-11-25dRagexeRE
#if PACKETVER == 20151125
- packet(0x0361,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0365,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0366,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0368,clif->pItemListWindowSelected,2,4,8,12); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0438,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0802,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0838,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0863,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0883,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0884,clif->pStoragePassword,2,4,20); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0885,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088c,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0899,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x089f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x08a9,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08ad,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0920,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x092a,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x092e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0939,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0951,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0956,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0957,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0959,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
+ packet(0x0361,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0365,clif->pWalkToXY,2);
+ packet(0x0366,clif->pMoveFromKafra,2,4);
+ packet(0x0368,clif->pItemListWindowSelected,2,4,8,12);
+ packet(0x0438,clif->pTakeItem,2);
+ packet(0x0802,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0838,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x085e,clif->pGetCharNameRequest,2);
+ packet(0x085f,clif->pMoveToKafra,2,4);
+ packet(0x0863,clif->pReqCloseBuyingStore,0);
+ packet(0x0883,clif->pChangeDir,2,4);
+ packet(0x0884,clif->pStoragePassword,2,4,20);
+ packet(0x0885,clif->pDull/*,XXX*/);
+ packet(0x088c,clif->pTickSend,2);
+ packet(0x088d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0899,clif->pFriendsListAdd,2);
+ packet(0x089c,clif->pActionRequest,2,6);
+ packet(0x089f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x08a9,clif->pDropItem,2,4);
+ packet(0x08ad,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0920,clif->pSolveCharName,2);
+ packet(0x092a,clif->pUseSkillToId,2,4,6);
+ packet(0x092e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0939,clif->pReqClickBuyingStore,2);
+ packet(0x093e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0951,clif->pHomMenu,2,4);
+ packet(0x0956,clif->pPartyInvite2,2);
+ packet(0x0957,clif->pDull/*,XXX*/);
+ packet(0x0959,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
#endif
// 2015-12-02bRagexeRE
#if PACKETVER == 20151202
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8,12); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0870,clif->pStoragePassword,2,4,20); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8,12);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0870,clif->pStoragePassword,2,4,20);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2015-12-09aRagexeRE
#if PACKETVER == 20151209
- packet(0x0365,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0369,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x07e4,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x07ec,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0811,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0819,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x085b,clif->pStoragePassword,2,4,20); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x085d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0861,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0866,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0875,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x087a,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x087f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x088e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0894,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a1,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0920,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x092d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0930,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0932,clif->pItemListWindowSelected,2,4,8,12); // CZ_ITEMLISTWIN_RES // -1
- packet(0x093b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0948,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x094a,clif->pPartyBookingRegisterReq,2,4,6); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0956,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x095c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0961,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0964,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
+ packet(0x0365,clif->pWalkToXY,2);
+ packet(0x0369,clif->pSolveCharName,2);
+ packet(0x07e4,clif->pPartyInvite2,2);
+ packet(0x07ec,clif->pTakeItem,2);
+ packet(0x0811,clif->pTickSend,2);
+ packet(0x0819,clif->pReqCloseBuyingStore,0);
+ packet(0x085b,clif->pStoragePassword,2,4,20);
+ packet(0x085d,clif->pGetCharNameRequest,2);
+ packet(0x085e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0861,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0866,clif->pChangeDir,2,4);
+ packet(0x0875,clif->pSearchStoreInfoNextPage,0);
+ packet(0x087a,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x087f,clif->pReqClickBuyingStore,2);
+ packet(0x088e,clif->pUseSkillToId,2,4,6);
+ packet(0x088f,clif->pDull/*,XXX*/);
+ packet(0x0894,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a1,clif->pHomMenu,2,4);
+ packet(0x0920,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x092d,clif->pMoveFromKafra,2,4);
+ packet(0x0930,clif->pDropItem,2,4);
+ packet(0x0932,clif->pItemListWindowSelected,2,4,8,12);
+ packet(0x093b,clif->pMoveToKafra,2,4);
+ packet(0x0948,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x094a,clif->pPartyBookingRegisterReq,2,4,6);
+ packet(0x0956,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x095c,clif->pDull/*,XXX*/);
+ packet(0x0961,clif->pActionRequest,2,6);
+ packet(0x0964,clif->pFriendsListAdd,2);
#endif
// 2015-12-16aRagexeRE
#if PACKETVER == 20151216
- packet(0x022d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0361,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0364,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0436,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x085b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0864,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0865,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x086e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0870,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0874,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0885,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089d,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x089e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a2,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a9,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08ac,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0947,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0949,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0954,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0960,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0966,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0968,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
+ packet(0x022d,clif->pChangeDir,2,4);
+ packet(0x0361,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pHomMenu,2,4);
+ packet(0x0364,clif->pDull/*,XXX*/);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0436,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pReqCloseBuyingStore,0);
+ packet(0x085b,clif->pTickSend,2);
+ packet(0x0864,clif->pMoveFromKafra,2,4);
+ packet(0x0865,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086a,clif->pDull/*,XXX*/);
+ packet(0x086e,clif->pPartyInvite2,2);
+ packet(0x0870,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0874,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0885,clif->pStoragePassword,0);
+ packet(0x088b,clif->pGetCharNameRequest,2);
+ packet(0x089d,clif->pActionRequest,2,6);
+ packet(0x089e,clif->pSolveCharName,2);
+ packet(0x08a2,clif->pWalkToXY,2);
+ packet(0x08a9,clif->pTakeItem,2);
+ packet(0x08ac,clif->pMoveToKafra,2,4);
+ packet(0x091d,clif->pFriendsListAdd,2);
+ packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0947,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0949,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0954,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0960,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0966,clif->pDropItem,2,4);
+ packet(0x0968,clif->pUseSkillToId,2,4,6);
#endif
// 2015-12-23bRagexeRE
#if PACKETVER == 20151223
- packet(0x02c4,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0362,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0802,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0815,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0864,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0866,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x086e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0872,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0875,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0876,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0881,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0884,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0886,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x088d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0890,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0891,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0898,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08aa,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0918,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x091a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x091b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0920,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0923,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0924,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x095e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x095f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0965,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0967,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
+ packet(0x02c4,clif->pMoveToKafra,2,4);
+ packet(0x0362,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pTakeItem,2);
+ packet(0x0802,clif->pDull/*,XXX*/);
+ packet(0x0815,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0864,clif->pGetCharNameRequest,2);
+ packet(0x0866,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x086e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0872,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0875,clif->pUseSkillToId,2,4,6);
+ packet(0x0876,clif->pDropItem,2,4);
+ packet(0x0881,clif->pActionRequest,2,6);
+ packet(0x0884,clif->pMoveFromKafra,2,4);
+ packet(0x0886,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x088d,clif->pHomMenu,2,4);
+ packet(0x0890,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0891,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0898,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08aa,clif->pPartyInvite2,2);
+ packet(0x0918,clif->pSearchStoreInfoNextPage,0);
+ packet(0x091a,clif->pReqClickBuyingStore,2);
+ packet(0x091b,clif->pFriendsListAdd,2);
+ packet(0x0920,clif->pWalkToXY,2);
+ packet(0x0923,clif->pChangeDir,2,4);
+ packet(0x0924,clif->pTickSend,2);
+ packet(0x095e,clif->pSolveCharName,2);
+ packet(0x095f,clif->pReqCloseBuyingStore,0);
+ packet(0x0965,clif->pStoragePassword,0);
+ packet(0x0967,clif->pSearchStoreInfoListItemClick,2,6,10);
#endif
// 2015-12-30aRagexeRE
#if PACKETVER == 20151230
- packet(0x02c4,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x07ec,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0861,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0869,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0886,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x088e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0897,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0923,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0949,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x02c4,clif->pMoveToKafra,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pDull/*,XXX*/);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x07ec,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0861,clif->pPartyInvite2,2);
+ packet(0x0869,clif->pChangeDir,2,4);
+ packet(0x0886,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x088e,clif->pFriendsListAdd,2);
+ packet(0x0897,clif->pDropItem,2,4);
+ packet(0x091d,clif->pMoveFromKafra,2,4);
+ packet(0x0923,clif->pStoragePassword,0);
+ packet(0x093a,clif->pDull/*,XXX*/);
+ packet(0x0949,clif->pHomMenu,2,4);
+ packet(0x094e,clif->pTakeItem,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-01-06aRagexeRE
#if PACKETVER == 20160106
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07ec,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0861,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x086c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0878,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x087a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x087f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0885,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0889,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x088a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0891,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a0,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0940,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07ec,clif->pHomMenu,2,4);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0861,clif->pTakeItem,2);
+ packet(0x086a,clif->pDropItem,2,4);
+ packet(0x086c,clif->pDull/*,XXX*/);
+ packet(0x0878,clif->pStoragePassword,0);
+ packet(0x087a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x087f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0885,clif->pMoveToKafra,2,4);
+ packet(0x0889,clif->pChangeDir,2,4);
+ packet(0x088a,clif->pPartyInvite2,2);
+ packet(0x0891,clif->pMoveFromKafra,2,4);
+ packet(0x08a0,clif->pFriendsListAdd,2);
+ packet(0x091d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0940,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-01-13aRagexeRE, 2016-01-13bRagexeRE, 2016-01-13bRagexeRE_2, 2016-01-13cRagexeRE
#if PACKETVER == 20160113
- packet(0x022d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x023b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x035f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0815,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x085b,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0864,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x086d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0873,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0875,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0888,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x088b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0892,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0893,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0899,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a0,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a6,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08aa,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0919,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x091b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0924,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0930,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0932,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x093c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0941,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x094d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x094f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0967,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x022d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x023b,clif->pWalkToXY,2);
+ packet(0x035f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0815,clif->pStoragePassword,0);
+ packet(0x085b,clif->pChangeDir,2,4);
+ packet(0x0864,clif->pReqClickBuyingStore,2);
+ packet(0x086d,clif->pHomMenu,2,4);
+ packet(0x0873,clif->pDull/*,XXX*/);
+ packet(0x0875,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0888,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x088b,clif->pPartyInvite2,2);
+ packet(0x088c,clif->pReqCloseBuyingStore,0);
+ packet(0x0892,clif->pUseSkillToId,2,4,6);
+ packet(0x0893,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0899,clif->pFriendsListAdd,2);
+ packet(0x089a,clif->pActionRequest,2,6);
+ packet(0x08a0,clif->pTickSend,2);
+ packet(0x08a6,clif->pTakeItem,2);
+ packet(0x08aa,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0919,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x091b,clif->pGetCharNameRequest,2);
+ packet(0x0924,clif->pDropItem,2,4);
+ packet(0x0930,clif->pSolveCharName,2);
+ packet(0x0932,clif->pMoveToKafra,2,4);
+ packet(0x093c,clif->pMoveFromKafra,2,4);
+ packet(0x0941,clif->pItemListWindowSelected,2,4,8);
+ packet(0x094d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x094f,clif->pDull/*,XXX*/);
+ packet(0x0967,clif->pReqOpenBuyingStore,2,4,8,9,89);
#endif
// 2016-01-20aRagexeRE
#if PACKETVER == 20160120
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0865,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0865,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-01-27aRagexeRE, 2016-01-27aRagexeRE_2, 2016-01-27bRagexeRE
#if PACKETVER == 20160127
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0922,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0961,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085e,clif->pChangeDir,2,4);
+ packet(0x0922,clif->pHomMenu,2,4);
+ packet(0x095a,clif->pStoragePassword,0);
+ packet(0x0961,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-02-03aRagexeRE
#if PACKETVER == 20160203
- packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0437,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0811,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0835,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0872,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0873,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0918,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0940,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0947,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0954,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pFriendsListAdd,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0437,clif->pTickSend,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0811,clif->pChangeDir,2,4);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0835,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0872,clif->pHomMenu,2,4);
+ packet(0x0873,clif->pStoragePassword,0);
+ packet(0x088c,clif->pDull/*,XXX*/);
+ packet(0x0918,clif->pDull/*,XXX*/);
+ packet(0x093e,clif->pPartyInvite2,2);
+ packet(0x0940,clif->pWalkToXY,2);
+ packet(0x0947,clif->pDropItem,2,4);
+ packet(0x0954,clif->pMoveFromKafra,2,4);
+ packet(0x095a,clif->pTakeItem,2);
+ packet(0x095d,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-02-11aRagexeRE
#if PACKETVER == 20160211
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0870,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0886,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pStoragePassword,0);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086c,clif->pChangeDir,2,4);
+ packet(0x0870,clif->pFriendsListAdd,2);
+ packet(0x0886,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-02-17aRagexeRE, 2016-02-17bRagexeRE, 2016-02-17bRagexeRE_2, 2016-02-17cRagexeRE
#if PACKETVER == 20160217
- packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x023b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0362,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0365,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0864,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0870,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0873,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x087a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0888,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x088f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0899,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a0,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a9,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08ac,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08ad,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x091d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0920,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0926,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x092e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x093b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x093e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0941,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x094f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x095e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0966,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0967,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0969,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x0202,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x023b,clif->pReqCloseBuyingStore,0);
+ packet(0x0362,clif->pChangeDir,2,4);
+ packet(0x0365,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0864,clif->pMoveToKafra,2,4);
+ packet(0x0870,clif->pFriendsListAdd,2);
+ packet(0x0873,clif->pHomMenu,2,4);
+ packet(0x087a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0888,clif->pTickSend,2);
+ packet(0x088d,clif->pReqClickBuyingStore,2);
+ packet(0x088f,clif->pDropItem,2,4);
+ packet(0x0899,clif->pDull/*,XXX*/);
+ packet(0x08a0,clif->pMoveFromKafra,2,4);
+ packet(0x08a9,clif->pPartyInvite2,2);
+ packet(0x08ac,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08ad,clif->pSearchStoreInfoNextPage,0);
+ packet(0x091d,clif->pWalkToXY,2);
+ packet(0x0920,clif->pActionRequest,2,6);
+ packet(0x0926,clif->pUseSkillToId,2,4,6);
+ packet(0x092e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x093b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x093e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0941,clif->pTakeItem,2);
+ packet(0x094a,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x094f,clif->pDull/*,XXX*/);
+ packet(0x095e,clif->pStoragePassword,0);
+ packet(0x0966,clif->pGetCharNameRequest,2);
+ packet(0x0967,clif->pSolveCharName,2);
+ packet(0x0969,clif->pReqOpenBuyingStore,2,4,8,9,89);
#endif
// 2016-02-24aRagexeRE, 2016-02-24bRagexeRE
#if PACKETVER == 20160224
- packet(0x022d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0364,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0436,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0861,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x086b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0884,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0885,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0888,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a9,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0920,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0929,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092f,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0936,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0938,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0961,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pPartyInvite2,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0364,clif->pUseSkillToId,2,4,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pMoveFromKafra,2,4);
+ packet(0x0436,clif->pDropItem,2,4);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pMoveToKafra,2,4);
+ packet(0x0861,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x086b,clif->pDull/*,XXX*/);
+ packet(0x0884,clif->pActionRequest,2,6);
+ packet(0x0885,clif->pReqClickBuyingStore,2);
+ packet(0x0888,clif->pWalkToXY,2);
+ packet(0x08a9,clif->pFriendsListAdd,2);
+ packet(0x0920,clif->pDull/*,XXX*/);
+ packet(0x0929,clif->pChangeDir,2,4);
+ packet(0x092f,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0936,clif->pStoragePassword,0);
+ packet(0x0938,clif->pTakeItem,2);
+ packet(0x094c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0961,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-03-02bRagexeRE
#if PACKETVER == 20160302
- packet(0x022d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0367,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0802,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0819,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0864,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0865,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0868,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0873,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0875,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x087a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x087d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0883,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a6,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08a9,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0927,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0945,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x094e,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0950,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0957,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0960,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0961,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0967,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0968,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
+ packet(0x022d,clif->pChangeDir,2,4);
+ packet(0x0367,clif->pReqClickBuyingStore,2);
+ packet(0x0802,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0819,clif->pWalkToXY,2);
+ packet(0x085b,clif->pFriendsListAdd,2);
+ packet(0x0864,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0865,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0867,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0868,clif->pHomMenu,2,4);
+ packet(0x0873,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0875,clif->pSearchStoreInfoNextPage,0);
+ packet(0x087a,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x087d,clif->pPartyInvite2,2);
+ packet(0x0883,clif->pUseSkillToId,2,4,6);
+ packet(0x08a6,clif->pReqCloseBuyingStore,0);
+ packet(0x08a9,clif->pMoveFromKafra,2,4);
+ packet(0x091a,clif->pDropItem,2,4);
+ packet(0x0927,clif->pTakeItem,2);
+ packet(0x092d,clif->pDull/*,XXX*/);
+ packet(0x092f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0945,clif->pGetCharNameRequest,2);
+ packet(0x094e,clif->pStoragePassword,0);
+ packet(0x0950,clif->pDull/*,XXX*/);
+ packet(0x0957,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095a,clif->pTickSend,2);
+ packet(0x0960,clif->pMoveToKafra,2,4);
+ packet(0x0961,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0967,clif->pSolveCharName,2);
+ packet(0x0968,clif->pActionRequest,2,6);
#endif
// 2016-03-09aRagexeRE
#if PACKETVER == 20160309
- packet(0x023b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0281,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0364,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0819,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0838,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x083c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x085a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x085f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0866,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x086a,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0873,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x087e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x089b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a7,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0920,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0922,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0929,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092a,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x092e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0932,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094f,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0956,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x095e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x096a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x023b,clif->pDropItem,2,4);
+ packet(0x0281,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pFriendsListAdd,2);
+ packet(0x0364,clif->pStoragePassword,0);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0819,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0838,clif->pWalkToXY,2);
+ packet(0x083c,clif->pPartyInvite2,2);
+ packet(0x085a,clif->pMoveToKafra,2,4);
+ packet(0x085f,clif->pUseSkillToId,2,4,6);
+ packet(0x0866,clif->pSearchStoreInfoNextPage,0);
+ packet(0x086a,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0873,clif->pDull/*,XXX*/);
+ packet(0x087c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x087e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x089b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089d,clif->pChangeDir,2,4);
+ packet(0x08a7,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091d,clif->pGetCharNameRequest,2);
+ packet(0x0920,clif->pMoveFromKafra,2,4);
+ packet(0x0922,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0929,clif->pDull/*,XXX*/);
+ packet(0x092a,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x092e,clif->pReqCloseBuyingStore,0);
+ packet(0x0932,clif->pHomMenu,2,4);
+ packet(0x094f,clif->pActionRequest,2,6);
+ packet(0x0956,clif->pTickSend,2);
+ packet(0x095e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x096a,clif->pTakeItem,2);
#endif
// 2016-03-16aRagexeRE
#if PACKETVER == 20160316
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0922,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0922,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-03-23aRagexeRE, 2016-03-23bRagexeRE
#if PACKETVER == 20160323
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0867,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0869,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0872,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0878,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0883,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0896,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x091b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0926,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0927,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0933,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x093c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pFriendsListAdd,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0867,clif->pDull/*,XXX*/);
+ packet(0x0869,clif->pTakeItem,2);
+ packet(0x086a,clif->pMoveFromKafra,2,4);
+ packet(0x0872,clif->pStoragePassword,0);
+ packet(0x0878,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0883,clif->pPartyInvite2,2);
+ packet(0x0896,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089a,clif->pHomMenu,2,4);
+ packet(0x091b,clif->pDull/*,XXX*/);
+ packet(0x0926,clif->pMoveToKafra,2,4);
+ packet(0x0927,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0933,clif->pChangeDir,2,4);
+ packet(0x093c,clif->pDropItem,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-03-30aRagexeRE
#if PACKETVER == 20160330
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0365,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0867,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x086d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0878,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087f,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0889,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x088b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0918,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0925,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x092c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0930,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0939,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x093b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0365,clif->pStoragePassword,0);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0867,clif->pPartyInvite2,2);
+ packet(0x086d,clif->pTakeItem,2);
+ packet(0x0878,clif->pDull/*,XXX*/);
+ packet(0x087f,clif->pMoveFromKafra,2,4);
+ packet(0x0889,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x088b,clif->pHomMenu,2,4);
+ packet(0x088d,clif->pDull/*,XXX*/);
+ packet(0x0918,clif->pMoveToKafra,2,4);
+ packet(0x0925,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x092c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0930,clif->pChangeDir,2,4);
+ packet(0x0939,clif->pDropItem,2,4);
+ packet(0x093b,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-04-06aRagexeRE
#if PACKETVER == 20160406
- packet(0x0364,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x07e4,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0819,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x085a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0869,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0877,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0878,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0879,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0884,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0892,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0895,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0898,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a1,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a9,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08ac,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0927,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0933,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0934,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0940,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0949,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x094d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0953,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0962,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x0364,clif->pSolveCharName,2);
+ packet(0x07e4,clif->pDropItem,2,4);
+ packet(0x0819,clif->pSearchStoreInfoNextPage,0);
+ packet(0x085a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x085c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0869,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0877,clif->pTakeItem,2);
+ packet(0x0878,clif->pFriendsListAdd,2);
+ packet(0x0879,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0884,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0892,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0895,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0898,clif->pPartyInvite2,2);
+ packet(0x089b,clif->pGetCharNameRequest,2);
+ packet(0x089e,clif->pMoveFromKafra,2,4);
+ packet(0x08a1,clif->pActionRequest,2,6);
+ packet(0x08a9,clif->pReqCloseBuyingStore,0);
+ packet(0x08ac,clif->pDull/*,XXX*/);
+ packet(0x0927,clif->pMoveToKafra,2,4);
+ packet(0x092d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0933,clif->pChangeDir,2,4);
+ packet(0x0934,clif->pUseSkillToId,2,4,6);
+ packet(0x0940,clif->pTickSend,2);
+ packet(0x0949,clif->pItemListWindowSelected,2,4,8);
+ packet(0x094d,clif->pReqClickBuyingStore,2);
+ packet(0x0953,clif->pStoragePassword,0);
+ packet(0x095d,clif->pHomMenu,2,4);
+ packet(0x095f,clif->pWalkToXY,2);
+ packet(0x0962,clif->pDull/*,XXX*/);
#endif
// 2016-04-14aRagexeRE, 2016-04-14bRagexeRE
#if PACKETVER == 20160414
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0363,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0862,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x087a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0880,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0885,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x089e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0918,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0922,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0927,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0931,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0934,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0945,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0953,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0363,clif->pTakeItem,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0862,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x087a,clif->pDull/*,XXX*/);
+ packet(0x0880,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0885,clif->pMoveFromKafra,2,4);
+ packet(0x089e,clif->pPartyInvite2,2);
+ packet(0x0918,clif->pDull/*,XXX*/);
+ packet(0x0922,clif->pChangeDir,2,4);
+ packet(0x0927,clif->pStoragePassword,0);
+ packet(0x0931,clif->pDropItem,2,4);
+ packet(0x0934,clif->pHomMenu,2,4);
+ packet(0x0945,clif->pFriendsListAdd,2);
+ packet(0x0953,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-04-20aRagexeRE
#if PACKETVER == 20160420
- packet(0x022d,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x02c4,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x035f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0864,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0870,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0872,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0874,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0884,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0888,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a5,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0935,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x094e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x02c4,clif->pTickSend,2);
+ packet(0x035f,clif->pPartyInvite2,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pHomMenu,2,4);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0864,clif->pTakeItem,2);
+ packet(0x0870,clif->pDull/*,XXX*/);
+ packet(0x0872,clif->pChangeDir,2,4);
+ packet(0x0874,clif->pMoveToKafra,2,4);
+ packet(0x0884,clif->pDropItem,2,4);
+ packet(0x0888,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088b,clif->pMoveFromKafra,2,4);
+ packet(0x08a5,clif->pStoragePassword,0);
+ packet(0x092f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0935,clif->pFriendsListAdd,2);
+ packet(0x094e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095c,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-04-27aRagexeRE
#if PACKETVER == 20160427
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0835,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0940,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0835,clif->pStoragePassword,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0940,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-05-04aRagexeRE
#if PACKETVER == 20160504
- packet(0x0202,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0363,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0365,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x083c,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x085f,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x086b,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x087f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0884,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0886,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0887,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x088d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088f,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0890,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0893,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0898,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x089d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08ad,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0918,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0921,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0922,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0924,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x093e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0940,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0941,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0948,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0952,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0969,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x0202,clif->pHomMenu,2,4);
+ packet(0x0363,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0365,clif->pDull/*,XXX*/);
+ packet(0x083c,clif->pSearchStoreInfoNextPage,0);
+ packet(0x085f,clif->pActionRequest,2,6);
+ packet(0x086b,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x087f,clif->pReqCloseBuyingStore,0);
+ packet(0x0884,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0886,clif->pMoveToKafra,2,4);
+ packet(0x0887,clif->pPartyInvite2,2);
+ packet(0x088a,clif->pTakeItem,2);
+ packet(0x088d,clif->pUseSkillToId,2,4,6);
+ packet(0x088f,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0890,clif->pDropItem,2,4);
+ packet(0x0893,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0898,clif->pDull/*,XXX*/);
+ packet(0x089d,clif->pSolveCharName,2);
+ packet(0x08ad,clif->pChangeDir,2,4);
+ packet(0x0918,clif->pTickSend,2);
+ packet(0x0921,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0922,clif->pGetCharNameRequest,2);
+ packet(0x0924,clif->pWalkToXY,2);
+ packet(0x093e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0940,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0941,clif->pMoveFromKafra,2,4);
+ packet(0x0948,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0952,clif->pFriendsListAdd,2);
+ packet(0x095b,clif->pReqClickBuyingStore,2);
+ packet(0x0969,clif->pStoragePassword,0);
#endif
// 2016-05-11aRagexeRE, 2016-05-11bRagexeRE
#if PACKETVER == 20160511
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0894,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0918,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0920,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0940,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085e,clif->pChangeDir,2,4);
+ packet(0x0894,clif->pFriendsListAdd,2);
+ packet(0x089b,clif->pDull/*,XXX*/);
+ packet(0x0918,clif->pHomMenu,2,4);
+ packet(0x0920,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0940,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-05-18aRagexeRE
#if PACKETVER == 20160518
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0874,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x089a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a9,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0928,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086c,clif->pChangeDir,2,4);
+ packet(0x0874,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x089a,clif->pStoragePassword,0);
+ packet(0x08a9,clif->pFriendsListAdd,2);
+ packet(0x0928,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-05-25aRagexeRE
#if PACKETVER == 20160525
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x085e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0867,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0899,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x089c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x092c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0937,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0945,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x094a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x094e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0951,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0956,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pDull/*,XXX*/);
+ packet(0x085e,clif->pDropItem,2,4);
+ packet(0x0867,clif->pHomMenu,2,4);
+ packet(0x086a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0899,clif->pTakeItem,2);
+ packet(0x089c,clif->pChangeDir,2,4);
+ packet(0x091d,clif->pStoragePassword,0);
+ packet(0x092c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0937,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0945,clif->pPartyInvite2,2);
+ packet(0x094a,clif->pMoveToKafra,2,4);
+ packet(0x094e,clif->pDull/*,XXX*/);
+ packet(0x0951,clif->pFriendsListAdd,2);
+ packet(0x0956,clif->pMoveFromKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-06-01aRagexeRE
#if PACKETVER == 20160601
- packet(0x0202,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x02c4,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0863,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0870,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x088f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0895,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a7,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08ac,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0924,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095b,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x095f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0961,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pReqCloseBuyingStore,0);
+ packet(0x02c4,clif->pPartyInvite2,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pFriendsListAdd,2);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0863,clif->pTakeItem,2);
+ packet(0x0870,clif->pMoveFromKafra,2,4);
+ packet(0x087d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088d,clif->pDropItem,2,4);
+ packet(0x088f,clif->pMoveToKafra,2,4);
+ packet(0x0895,clif->pHomMenu,2,4);
+ packet(0x08a7,clif->pDull/*,XXX*/);
+ packet(0x08ac,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0924,clif->pDull/*,XXX*/);
+ packet(0x095b,clif->pChangeDir,2,4);
+ packet(0x095f,clif->pStoragePassword,0);
+ packet(0x0961,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-06-08aRagexeRE, 2016-06-08bRagexeRE
#if PACKETVER == 20160608
- packet(0x022d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x02c4,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x035f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0437,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07ec,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0802,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0885,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0889,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0899,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x089b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a6,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0958,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0969,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x02c4,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x035f,clif->pPartyInvite2,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pWalkToXY,2);
+ packet(0x0437,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07ec,clif->pChangeDir,2,4);
+ packet(0x0802,clif->pTickSend,2);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085c,clif->pDull/*,XXX*/);
+ packet(0x0885,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0889,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0899,clif->pTakeItem,2);
+ packet(0x089b,clif->pHomMenu,2,4);
+ packet(0x08a6,clif->pMoveFromKafra,2,4);
+ packet(0x093b,clif->pDull/*,XXX*/);
+ packet(0x094d,clif->pDropItem,2,4);
+ packet(0x0958,clif->pStoragePassword,0);
+ packet(0x095b,clif->pMoveToKafra,2,4);
+ packet(0x0969,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-06-15aRagexeRE
#if PACKETVER == 20160615
- packet(0x0281,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0363,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0364,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0369,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x083c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0866,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0870,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x087e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0884,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0887,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0888,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x088d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0891,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0898,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x092f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x093e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0947,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0948,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x094a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x094b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0954,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0957,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0958,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0961,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
+ packet(0x0281,clif->pFriendsListAdd,2);
+ packet(0x0363,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0364,clif->pStoragePassword,0);
+ packet(0x0369,clif->pHomMenu,2,4);
+ packet(0x083c,clif->pGetCharNameRequest,2);
+ packet(0x0866,clif->pWalkToXY,2);
+ packet(0x0870,clif->pDull/*,XXX*/);
+ packet(0x087d,clif->pSolveCharName,2);
+ packet(0x087e,clif->pTakeItem,2);
+ packet(0x087f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0884,clif->pDull/*,XXX*/);
+ packet(0x0887,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0888,clif->pUseSkillToId,2,4,6);
+ packet(0x088a,clif->pTickSend,2);
+ packet(0x088d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0891,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0898,clif->pDropItem,2,4);
+ packet(0x092f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x093e,clif->pPartyInvite2,2);
+ packet(0x0947,clif->pReqCloseBuyingStore,0);
+ packet(0x0948,clif->pActionRequest,2,6);
+ packet(0x094a,clif->pReqClickBuyingStore,2);
+ packet(0x094b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0954,clif->pChangeDir,2,4);
+ packet(0x0957,clif->pMoveToKafra,2,4);
+ packet(0x0958,clif->pMoveFromKafra,2,4);
+ packet(0x095c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x095e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0961,clif->pSearchStoreInfoListItemClick,2,6,10);
#endif
// 2016-06-22aRagexeRE
#if PACKETVER == 20160622
- packet(0x023b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x035f,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0361,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x07e4,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0861,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0865,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0867,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0880,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0887,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0890,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0891,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0892,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x089a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x089e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a2,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a8,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x092f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0936,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0937,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x093b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x093f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0946,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0959,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0965,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0969,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
+ packet(0x023b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x035f,clif->pMoveFromKafra,2,4);
+ packet(0x0361,clif->pPartyInvite2,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x07e4,clif->pHomMenu,2,4);
+ packet(0x0861,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0865,clif->pDull/*,XXX*/);
+ packet(0x0867,clif->pDull/*,XXX*/);
+ packet(0x0880,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0887,clif->pReqCloseBuyingStore,0);
+ packet(0x0890,clif->pFriendsListAdd,2);
+ packet(0x0891,clif->pReqClickBuyingStore,2);
+ packet(0x0892,clif->pSearchStoreInfoNextPage,0);
+ packet(0x089a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x089e,clif->pActionRequest,2,6);
+ packet(0x08a2,clif->pSolveCharName,2);
+ packet(0x08a8,clif->pStoragePassword,0);
+ packet(0x091c,clif->pTakeItem,2);
+ packet(0x092d,clif->pTickSend,2);
+ packet(0x092f,clif->pUseSkillToId,2,4,6);
+ packet(0x0936,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0937,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x093b,clif->pMoveToKafra,2,4);
+ packet(0x093f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0946,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0959,clif->pGetCharNameRequest,2);
+ packet(0x0965,clif->pChangeDir,2,4);
+ packet(0x0969,clif->pDropItem,2,4);
#endif
// 2016-06-29aRagexeRE, 2016-06-30aRagexeRE
#if PACKETVER == 20160629 || \
PACKETVER == 20160630
- packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x022d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x035f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0363,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0368,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x085c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x085e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0860,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0861,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0863,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0867,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x086b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0881,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0885,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0893,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x091e,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0922,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0925,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0926,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x093e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0946,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0948,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x094a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0957,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x095a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0968,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0969,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x096a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x022d,clif->pWalkToXY,2);
+ packet(0x035f,clif->pDull/*,XXX*/);
+ packet(0x0363,clif->pReqClickBuyingStore,2);
+ packet(0x0368,clif->pItemListWindowSelected,2,4,8);
+ packet(0x085c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x085e,clif->pDull/*,XXX*/);
+ packet(0x0860,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0861,clif->pDropItem,2,4);
+ packet(0x0863,clif->pSolveCharName,2);
+ packet(0x0867,clif->pStoragePassword,0);
+ packet(0x086b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0881,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0885,clif->pHomMenu,2,4);
+ packet(0x088e,clif->pGetCharNameRequest,2);
+ packet(0x0893,clif->pTickSend,2);
+ packet(0x091e,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0922,clif->pMoveFromKafra,2,4);
+ packet(0x0925,clif->pUseSkillToId,2,4,6);
+ packet(0x0926,clif->pPartyInvite2,2);
+ packet(0x093e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0946,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0948,clif->pChangeDir,2,4);
+ packet(0x094a,clif->pFriendsListAdd,2);
+ packet(0x0957,clif->pReqCloseBuyingStore,0);
+ packet(0x095a,clif->pActionRequest,2,6);
+ packet(0x0968,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0969,clif->pTakeItem,2);
+ packet(0x096a,clif->pMoveToKafra,2,4);
#endif
// 2016-07-06cRagexeRE
#if PACKETVER == 20160706
- packet(0x0362,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0436,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x085f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0860,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0869,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x086b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0884,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0886,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0889,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0892,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0899,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a4,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a5,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a8,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0918,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x091b,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0924,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0926,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0927,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0929,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0939,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x093d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0944,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0945,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x094c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0952,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0957,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0958,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x0362,clif->pSolveCharName,2);
+ packet(0x0436,clif->pReqClickBuyingStore,2);
+ packet(0x085f,clif->pPartyInvite2,2);
+ packet(0x0860,clif->pActionRequest,2,6);
+ packet(0x0869,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x086b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0884,clif->pFriendsListAdd,2);
+ packet(0x0886,clif->pDull/*,XXX*/);
+ packet(0x0889,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0892,clif->pHomMenu,2,4);
+ packet(0x0899,clif->pUseSkillToId,2,4,6);
+ packet(0x08a4,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a5,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a8,clif->pTickSend,2);
+ packet(0x0918,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x091b,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0924,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0926,clif->pChangeDir,2,4);
+ packet(0x0927,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0929,clif->pMoveFromKafra,2,4);
+ packet(0x092d,clif->pWalkToXY,2);
+ packet(0x0939,clif->pMoveToKafra,2,4);
+ packet(0x093d,clif->pDropItem,2,4);
+ packet(0x0944,clif->pDull/*,XXX*/);
+ packet(0x0945,clif->pGetCharNameRequest,2);
+ packet(0x094c,clif->pStoragePassword,0);
+ packet(0x0952,clif->pReqCloseBuyingStore,0);
+ packet(0x0957,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0958,clif->pTakeItem,2);
#endif
// 2016-07-13aRagexeRE, 2016-07-13bRagexeRE
#if PACKETVER == 20160713
- packet(0x022d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0363,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0364,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0838,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0860,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0865,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0869,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0875,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0877,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x087b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0883,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0892,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x089a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a2,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a4,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x091c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x091d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0921,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0922,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x092c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0931,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0939,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0944,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0945,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0947,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0957,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x095b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x022d,clif->pStoragePassword,0);
+ packet(0x0363,clif->pChangeDir,2,4);
+ packet(0x0364,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0838,clif->pTakeItem,2);
+ packet(0x0860,clif->pReqClickBuyingStore,2);
+ packet(0x0865,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0869,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0875,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0877,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x087b,clif->pTickSend,2);
+ packet(0x0883,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0892,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x089a,clif->pPartyInvite2,2);
+ packet(0x089f,clif->pDull/*,XXX*/);
+ packet(0x08a2,clif->pMoveFromKafra,2,4);
+ packet(0x08a4,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x091c,clif->pWalkToXY,2);
+ packet(0x091d,clif->pSolveCharName,2);
+ packet(0x0921,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0922,clif->pHomMenu,2,4);
+ packet(0x092c,clif->pGetCharNameRequest,2);
+ packet(0x0931,clif->pUseSkillToId,2,4,6);
+ packet(0x0939,clif->pFriendsListAdd,2);
+ packet(0x0944,clif->pReqCloseBuyingStore,0);
+ packet(0x0945,clif->pActionRequest,2,6);
+ packet(0x0947,clif->pMoveToKafra,2,4);
+ packet(0x0957,clif->pDropItem,2,4);
+ packet(0x095b,clif->pDull/*,XXX*/);
#endif
// 2016-07-20aRagexeRE, 2016-07-20bRagexeRE
#if PACKETVER == 20160720
- packet(0x0362,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0363,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0365,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x07e4,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0838,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x085b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x086a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x086d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x087f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0883,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0887,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0897,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x089a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x089e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a0,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08aa,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0917,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x091c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x093b,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x093e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0946,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x094d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0953,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x095b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0960,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0969,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
+ packet(0x0362,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0363,clif->pUseSkillToId,2,4,6);
+ packet(0x0365,clif->pActionRequest,2,6);
+ packet(0x07e4,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0838,clif->pWalkToXY,2);
+ packet(0x085b,clif->pReqCloseBuyingStore,0);
+ packet(0x086a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x086d,clif->pReqClickBuyingStore,2);
+ packet(0x087f,clif->pDropItem,2,4);
+ packet(0x0883,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0887,clif->pGetCharNameRequest,2);
+ packet(0x0897,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x089a,clif->pStoragePassword,0);
+ packet(0x089c,clif->pHomMenu,2,4);
+ packet(0x089e,clif->pMoveFromKafra,2,4);
+ packet(0x08a0,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08aa,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0917,clif->pDull/*,XXX*/);
+ packet(0x091c,clif->pTakeItem,2);
+ packet(0x092a,clif->pFriendsListAdd,2);
+ packet(0x093b,clif->pChangeDir,2,4);
+ packet(0x093e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0946,clif->pTickSend,2);
+ packet(0x094d,clif->pSolveCharName,2);
+ packet(0x0953,clif->pDull/*,XXX*/);
+ packet(0x095b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0960,clif->pMoveToKafra,2,4);
+ packet(0x0969,clif->pPartyInvite2,2);
#endif
// 2016-07-27aRagexeRE, 2016-07-27bRagexeRE
#if PACKETVER == 20160727
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x023b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0362,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0363,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0436,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0438,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x07ec,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0866,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0868,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0869,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0874,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0877,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0883,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0887,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0891,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x089f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a2,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a4,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a7,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0936,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0941,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0946,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0949,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0951,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x095f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0966,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0969,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x023b,clif->pDull/*,XXX*/);
+ packet(0x0362,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0363,clif->pFriendsListAdd,2);
+ packet(0x0436,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0438,clif->pTickSend,2);
+ packet(0x07ec,clif->pDropItem,2,4);
+ packet(0x0866,clif->pDull/*,XXX*/);
+ packet(0x0868,clif->pPartyInvite2,2);
+ packet(0x0869,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0874,clif->pReqClickBuyingStore,2);
+ packet(0x0877,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0883,clif->pActionRequest,2,6);
+ packet(0x0887,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088e,clif->pUseSkillToId,2,4,6);
+ packet(0x0891,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x089f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a2,clif->pStoragePassword,0);
+ packet(0x08a4,clif->pSolveCharName,2);
+ packet(0x08a7,clif->pTakeItem,2);
+ packet(0x092e,clif->pWalkToXY,2);
+ packet(0x0936,clif->pHomMenu,2,4);
+ packet(0x0941,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0946,clif->pGetCharNameRequest,2);
+ packet(0x0949,clif->pMoveFromKafra,2,4);
+ packet(0x0951,clif->pMoveToKafra,2,4);
+ packet(0x095f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0966,clif->pReqCloseBuyingStore,0);
+ packet(0x0969,clif->pItemListWindowSelected,2,4,8);
#endif
// 2016-08-03bRagexeRE
#if PACKETVER == 20160803
- packet(0x0364,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x085d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0878,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0881,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0886,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0887,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0888,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x088b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0891,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0895,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089e,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x08a1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x091b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0929,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0930,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0932,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0934,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0937,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x093a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x093e,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x093f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0952,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0955,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0956,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0959,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x095a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
+ packet(0x0364,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x085d,clif->pReqClickBuyingStore,2);
+ packet(0x0878,clif->pDull/*,XXX*/);
+ packet(0x087f,clif->pWalkToXY,2);
+ packet(0x0881,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0886,clif->pMoveToKafra,2,4);
+ packet(0x0887,clif->pGetCharNameRequest,2);
+ packet(0x0888,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x088b,clif->pReqCloseBuyingStore,0);
+ packet(0x0891,clif->pChangeDir,2,4);
+ packet(0x0895,clif->pFriendsListAdd,2);
+ packet(0x089c,clif->pDropItem,2,4);
+ packet(0x089e,clif->pSearchStoreInfoNextPage,0);
+ packet(0x08a1,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x091b,clif->pTakeItem,2);
+ packet(0x0929,clif->pStoragePassword,0);
+ packet(0x0930,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0932,clif->pUseSkillToId,2,4,6);
+ packet(0x0934,clif->pActionRequest,2,6);
+ packet(0x0937,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x093a,clif->pDull/*,XXX*/);
+ packet(0x093e,clif->pTickSend,2);
+ packet(0x093f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0952,clif->pHomMenu,2,4);
+ packet(0x0955,clif->pMoveFromKafra,2,4);
+ packet(0x0956,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0959,clif->pSolveCharName,2);
+ packet(0x095a,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pReqTradeBuyingStore,2,4,8,12);
#endif
// 2016-08-10aRagexeRE
#if PACKETVER == 20160810
- packet(0x0361,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0819,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0838,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x085d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x085e,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x085f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0860,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x086f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0875,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0879,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x087a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0885,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0888,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0890,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x089d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x089f,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a9,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x091c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0926,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092b,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x092d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0935,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0943,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x094b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0959,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x095b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0967,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x0361,clif->pStoragePassword,0);
+ packet(0x0819,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0838,clif->pPartyInvite2,2);
+ packet(0x085d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x085e,clif->pDropItem,2,4);
+ packet(0x085f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0860,clif->pSolveCharName,2);
+ packet(0x086f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0875,clif->pHomMenu,2,4);
+ packet(0x0879,clif->pReqClickBuyingStore,2);
+ packet(0x087a,clif->pWalkToXY,2);
+ packet(0x0885,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0888,clif->pFriendsListAdd,2);
+ packet(0x0890,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x089d,clif->pChangeDir,2,4);
+ packet(0x089f,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a9,clif->pMoveToKafra,2,4);
+ packet(0x091a,clif->pTakeItem,2);
+ packet(0x091b,clif->pGetCharNameRequest,2);
+ packet(0x091c,clif->pUseSkillToId,2,4,6);
+ packet(0x0926,clif->pDull/*,XXX*/);
+ packet(0x092b,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x092d,clif->pMoveFromKafra,2,4);
+ packet(0x0935,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0943,clif->pTickSend,2);
+ packet(0x094b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0959,clif->pReqCloseBuyingStore,0);
+ packet(0x095b,clif->pActionRequest,2,6);
+ packet(0x0967,clif->pDull/*,XXX*/);
#endif
// 2016-08-17aRagexeRE
#if PACKETVER == 20160817
- packet(0x0364,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0437,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x07e4,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0811,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0819,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x083c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x085c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0867,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x086b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0875,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x087f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0886,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0891,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x089c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08a5,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a6,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a9,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x08ab,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08ac,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08ad,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0929,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x092d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0930,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0939,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0957,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0960,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0963,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x0364,clif->pReqClickBuyingStore,2);
+ packet(0x0437,clif->pFriendsListAdd,2);
+ packet(0x07e4,clif->pGetCharNameRequest,2);
+ packet(0x0811,clif->pDull/*,XXX*/);
+ packet(0x0819,clif->pTickSend,2);
+ packet(0x083c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x085c,clif->pTakeItem,2);
+ packet(0x0867,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x086b,clif->pSolveCharName,2);
+ packet(0x0875,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x087f,clif->pDropItem,2,4);
+ packet(0x0886,clif->pActionRequest,2,6);
+ packet(0x0891,clif->pUseSkillToId,2,4,6);
+ packet(0x089c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08a5,clif->pStoragePassword,0);
+ packet(0x08a6,clif->pPartyInvite2,2);
+ packet(0x08a9,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x08ab,clif->pHomMenu,2,4);
+ packet(0x08ac,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08ad,clif->pMoveToKafra,2,4);
+ packet(0x091b,clif->pReqCloseBuyingStore,0);
+ packet(0x0929,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x092d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0930,clif->pWalkToXY,2);
+ packet(0x0939,clif->pMoveFromKafra,2,4);
+ packet(0x093c,clif->pDull/*,XXX*/);
+ packet(0x0957,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0960,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0963,clif->pChangeDir,2,4);
#endif
// 2016-08-24aRagexeRE
#if PACKETVER == 20160824
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0934,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0934,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-08-31aRagexeRE, 2016-08-31bRagexeRE
#if PACKETVER == 20160831
- packet(0x022d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0366,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x07ec,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0835,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0865,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x086d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0870,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0874,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0876,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0878,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x087c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08a8,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08a9,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0917,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0938,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x093a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0946,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x094a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x094f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0950,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0954,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0957,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x095e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0960,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0964,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0967,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
+ packet(0x022d,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0366,clif->pDropItem,2,4);
+ packet(0x07ec,clif->pReqClickBuyingStore,2);
+ packet(0x0835,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0865,clif->pWalkToXY,2);
+ packet(0x086d,clif->pReqCloseBuyingStore,0);
+ packet(0x0870,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0874,clif->pPartyInvite2,2);
+ packet(0x0876,clif->pDull/*,XXX*/);
+ packet(0x0878,clif->pActionRequest,2,6);
+ packet(0x087c,clif->pGetCharNameRequest,2);
+ packet(0x08a8,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08a9,clif->pTickSend,2);
+ packet(0x0917,clif->pStoragePassword,0);
+ packet(0x091b,clif->pDull/*,XXX*/);
+ packet(0x092c,clif->pFriendsListAdd,2);
+ packet(0x092e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0938,clif->pSearchStoreInfoNextPage,0);
+ packet(0x093a,clif->pHomMenu,2,4);
+ packet(0x0946,clif->pSolveCharName,2);
+ packet(0x094a,clif->pChangeDir,2,4);
+ packet(0x094f,clif->pMoveToKafra,2,4);
+ packet(0x0950,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0954,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0957,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x095e,clif->pMoveFromKafra,2,4);
+ packet(0x0960,clif->pTakeItem,2);
+ packet(0x0964,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0967,clif->pUseSkillToId,2,4,6);
#endif
// 2016-09-07aRagexeRE
#if PACKETVER == 20160907
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x091c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x091c,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-09-13aRagexeRE
#if PACKETVER == 20160913
- packet(0x0361,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0817,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x085b,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0865,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0874,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0875,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0879,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x087a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0887,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0889,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x088e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0891,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0892,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x089b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x089c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0928,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0935,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x093a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0949,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x094a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0950,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0952,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0954,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0962,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0963,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0968,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
+ packet(0x0361,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0817,clif->pMoveToKafra,2,4);
+ packet(0x085b,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0865,clif->pGetCharNameRequest,2);
+ packet(0x0874,clif->pReqClickBuyingStore,2);
+ packet(0x0875,clif->pTickSend,2);
+ packet(0x0879,clif->pDropItem,2,4);
+ packet(0x087a,clif->pDull/*,XXX*/);
+ packet(0x087b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0887,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0889,clif->pTakeItem,2);
+ packet(0x088e,clif->pUseSkillToId,2,4,6);
+ packet(0x088f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0891,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0892,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x089b,clif->pMoveFromKafra,2,4);
+ packet(0x089c,clif->pStoragePassword,0);
+ packet(0x08a5,clif->pChangeDir,2,4);
+ packet(0x0928,clif->pFriendsListAdd,2);
+ packet(0x0935,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x093a,clif->pHomMenu,2,4);
+ packet(0x0949,clif->pPartyInvite2,2);
+ packet(0x094a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0950,clif->pActionRequest,2,6);
+ packet(0x0952,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0954,clif->pWalkToXY,2);
+ packet(0x0962,clif->pDull/*,XXX*/);
+ packet(0x0963,clif->pSolveCharName,2);
+ packet(0x0968,clif->pReqCloseBuyingStore,0);
#endif
// 2016-09-21bRagexeRE
#if PACKETVER == 20160921
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x094a,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-09-28cRagexeRE, 2016-09-28dRagexeRE
#if PACKETVER == 20160928
- packet(0x0202,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0366,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0436,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0811,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0838,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0864,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0866,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x086d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0872,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0878,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0889,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x088e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0897,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x089a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a2,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a9,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0919,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x091e,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0927,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x092d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0944,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x094d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0953,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0955,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0957,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x0202,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pGetCharNameRequest,2);
+ packet(0x0366,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0436,clif->pReqClickBuyingStore,2);
+ packet(0x0811,clif->pDull/*,XXX*/);
+ packet(0x0838,clif->pPartyInvite2,2);
+ packet(0x0864,clif->pMoveFromKafra,2,4);
+ packet(0x0866,clif->pSearchStoreInfoNextPage,0);
+ packet(0x086d,clif->pDropItem,2,4);
+ packet(0x0872,clif->pHomMenu,2,4);
+ packet(0x0878,clif->pSolveCharName,2);
+ packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0889,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x088e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0897,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x089a,clif->pActionRequest,2,6);
+ packet(0x08a2,clif->pStoragePassword,0);
+ packet(0x08a9,clif->pMoveToKafra,2,4);
+ packet(0x0919,clif->pWalkToXY,2);
+ packet(0x091e,clif->pTickSend,2);
+ packet(0x0927,clif->pUseSkillToId,2,4,6);
+ packet(0x092d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0944,clif->pChangeDir,2,4);
+ packet(0x094d,clif->pReqCloseBuyingStore,0);
+ packet(0x094e,clif->pFriendsListAdd,2);
+ packet(0x0953,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0955,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0957,clif->pTakeItem,2);
+ packet(0x095a,clif->pDull/*,XXX*/);
#endif
// 2016-10-05aRagexeRE
#if PACKETVER == 20161005
- packet(0x0202,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0838,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0863,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0886,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0891,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0892,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x089b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a0,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08ac,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08ad,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0918,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0919,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x091e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x092b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0931,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0932,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x093b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0942,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0945,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x094a,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x094d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0952,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x095b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0967,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
+ packet(0x0202,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pActionRequest,2,6);
+ packet(0x0838,clif->pStoragePassword,0);
+ packet(0x0863,clif->pGetCharNameRequest,2);
+ packet(0x0886,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088e,clif->pMoveFromKafra,2,4);
+ packet(0x0891,clif->pChangeDir,2,4);
+ packet(0x0892,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x089b,clif->pPartyInvite2,2);
+ packet(0x089c,clif->pTakeItem,2);
+ packet(0x08a0,clif->pMoveToKafra,2,4);
+ packet(0x08ac,clif->pReqCloseBuyingStore,0);
+ packet(0x08ad,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0918,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0919,clif->pSolveCharName,2);
+ packet(0x091e,clif->pDull/*,XXX*/);
+ packet(0x092b,clif->pTickSend,2);
+ packet(0x0931,clif->pFriendsListAdd,2);
+ packet(0x0932,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x093b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0942,clif->pDropItem,2,4);
+ packet(0x0944,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0945,clif->pWalkToXY,2);
+ packet(0x094a,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x094d,clif->pHomMenu,2,4);
+ packet(0x0952,clif->pDull/*,XXX*/);
+ packet(0x095a,clif->pReqClickBuyingStore,2);
+ packet(0x095b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0967,clif->pUseSkillToId,2,4,6);
#endif
// 2016-10-12aRagexeRE
#if PACKETVER == 20161012
- packet(0x023b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0364,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0365,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0369,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x07ec,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0819,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x085b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x085e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0863,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0868,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0872,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0875,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0880,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0893,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a0,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0936,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0937,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0939,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0943,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0944,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x094f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0951,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x095c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0962,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0966,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0967,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x023b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0364,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0365,clif->pTickSend,2);
+ packet(0x0369,clif->pPartyInvite2,2);
+ packet(0x07ec,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0819,clif->pFriendsListAdd,2);
+ packet(0x085b,clif->pDull/*,XXX*/);
+ packet(0x085e,clif->pReqCloseBuyingStore,0);
+ packet(0x0863,clif->pActionRequest,2,6);
+ packet(0x0868,clif->pTakeItem,2);
+ packet(0x086d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0872,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0875,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0880,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0893,clif->pMoveToKafra,2,4);
+ packet(0x08a0,clif->pChangeDir,2,4);
+ packet(0x092d,clif->pSolveCharName,2);
+ packet(0x0936,clif->pGetCharNameRequest,2);
+ packet(0x0937,clif->pReqClickBuyingStore,2);
+ packet(0x0939,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0943,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0944,clif->pMoveFromKafra,2,4);
+ packet(0x094f,clif->pDull/*,XXX*/);
+ packet(0x0951,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x095c,clif->pHomMenu,2,4);
+ packet(0x0962,clif->pUseSkillToId,2,4,6);
+ packet(0x0966,clif->pWalkToXY,2);
+ packet(0x0967,clif->pStoragePassword,0);
#endif
// 2016-10-19aRagexeRE
#if PACKETVER == 20161019
- packet(0x022d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0361,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0889,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0892,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0946,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0963,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pReqClickBuyingStore,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pHomMenu,2,4);
+ packet(0x0361,clif->pWalkToXY,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pChangeDir,2,4);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0889,clif->pStoragePassword,0);
+ packet(0x0892,clif->pDull/*,XXX*/);
+ packet(0x0946,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0963,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-10-26bRagexeRE, 2016-10-26cRagexeRE
#if PACKETVER == 20161026
- packet(0x0363,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0438,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0802,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x085f,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0861,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0862,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x086a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x086c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x086e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087a,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x087c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0886,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0891,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0894,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0898,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x091b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0926,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x092c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x092e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x092f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0930,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x094b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0953,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x095c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x095e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0962,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x0363,clif->pStoragePassword,0);
+ packet(0x0438,clif->pWalkToXY,2);
+ packet(0x0802,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x085a,clif->pMoveToKafra,2,4);
+ packet(0x085f,clif->pActionRequest,2,6);
+ packet(0x0861,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0862,clif->pTickSend,2);
+ packet(0x086a,clif->pSearchStoreInfoNextPage,0);
+ packet(0x086c,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x086e,clif->pDull/*,XXX*/);
+ packet(0x087a,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x087c,clif->pDull/*,XXX*/);
+ packet(0x087f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0886,clif->pDropItem,2,4);
+ packet(0x0891,clif->pReqClickBuyingStore,2);
+ packet(0x0894,clif->pUseSkillToId,2,4,6);
+ packet(0x0898,clif->pFriendsListAdd,2);
+ packet(0x091a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x091b,clif->pTakeItem,2);
+ packet(0x0926,clif->pSolveCharName,2);
+ packet(0x092c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x092e,clif->pHomMenu,2,4);
+ packet(0x092f,clif->pReqCloseBuyingStore,0);
+ packet(0x0930,clif->pGetCharNameRequest,2);
+ packet(0x094b,clif->pMoveFromKafra,2,4);
+ packet(0x0953,clif->pPartyInvite2,2);
+ packet(0x095c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x095e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0962,clif->pChangeDir,2,4);
#endif
// 2016-11-02aRagexeRE, 2016-11-03aRagexeRE
#if PACKETVER == 20161102 || \
PACKETVER == 20161103
- packet(0x0361,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0367,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0436,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0802,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0838,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x083c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0869,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x086c,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x086f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0874,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0886,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x088f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0890,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a2,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08aa,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x091b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0922,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0925,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0928,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092f,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0936,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0946,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0949,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x095e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0964,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0965,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0966,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
+ packet(0x0361,clif->pMoveFromKafra,2,4);
+ packet(0x0367,clif->pDull/*,XXX*/);
+ packet(0x0436,clif->pActionRequest,2,6);
+ packet(0x0802,clif->pTakeItem,2);
+ packet(0x0838,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x083c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x085f,clif->pUseSkillToId,2,4,6);
+ packet(0x0869,clif->pMoveToKafra,2,4);
+ packet(0x086c,clif->pSearchStoreInfoNextPage,0);
+ packet(0x086f,clif->pDull/*,XXX*/);
+ packet(0x0874,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0886,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x088f,clif->pHomMenu,2,4);
+ packet(0x0890,clif->pDropItem,2,4);
+ packet(0x089f,clif->pPartyInvite2,2);
+ packet(0x08a2,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08aa,clif->pWalkToXY,2);
+ packet(0x091b,clif->pStoragePassword,0);
+ packet(0x0922,clif->pReqClickBuyingStore,2);
+ packet(0x0925,clif->pSolveCharName,2);
+ packet(0x0928,clif->pFriendsListAdd,2);
+ packet(0x092f,clif->pGetCharNameRequest,2);
+ packet(0x0936,clif->pReqCloseBuyingStore,0);
+ packet(0x0946,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0949,clif->pChangeDir,2,4);
+ packet(0x095e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0964,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0965,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0966,clif->pTickSend,2);
#endif
// 2016-11-09aRagexeRE, 2016-11-09bRagexeRE, 2016-11-09cRagexeRE, 2016-11-09dRagexeRE
#if PACKETVER == 20161109
- packet(0x02c4,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0361,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0362,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0366,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x085d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x085e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0865,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x086a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x086d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0870,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0876,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x087a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0881,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x088e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0891,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0898,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x089a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089d,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x089f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a7,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08ad,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0927,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0937,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x093c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093f,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0954,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0956,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x02c4,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0361,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0362,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pTickSend,2);
+ packet(0x0366,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSolveCharName,2);
+ packet(0x085d,clif->pReqCloseBuyingStore,0);
+ packet(0x085e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0865,clif->pWalkToXY,2);
+ packet(0x086a,clif->pActionRequest,2,6);
+ packet(0x086d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0870,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0876,clif->pReqClickBuyingStore,2);
+ packet(0x087a,clif->pDull/*,XXX*/);
+ packet(0x0881,clif->pMoveToKafra,2,4);
+ packet(0x088e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0891,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0898,clif->pTakeItem,2);
+ packet(0x089a,clif->pDropItem,2,4);
+ packet(0x089d,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x089f,clif->pDull/*,XXX*/);
+ packet(0x08a7,clif->pHomMenu,2,4);
+ packet(0x08ad,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0927,clif->pPartyInvite2,2);
+ packet(0x0937,clif->pFriendsListAdd,2);
+ packet(0x093c,clif->pStoragePassword,0);
+ packet(0x093f,clif->pGetCharNameRequest,2);
+ packet(0x0954,clif->pUseSkillToId,2,4,6);
+ packet(0x0956,clif->pChangeDir,2,4);
#endif
// 2016-11-16bRagexeRE, 2016-11-16cRagexeRE
#if PACKETVER == 20161116
- packet(0x0368,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0369,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0835,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x085f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0864,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x086f,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0885,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x088d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x088f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0890,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0892,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0893,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a1,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a2,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08ac,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0920,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0925,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x092a,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0931,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x093c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x094a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0952,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0957,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x095b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0967,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x0368,clif->pTickSend,2);
+ packet(0x0369,clif->pMoveToKafra,2,4);
+ packet(0x0835,clif->pFriendsListAdd,2);
+ packet(0x085f,clif->pDropItem,2,4);
+ packet(0x0864,clif->pPartyInvite2,2);
+ packet(0x086f,clif->pTakeItem,2);
+ packet(0x0885,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088b,clif->pHomMenu,2,4);
+ packet(0x088d,clif->pReqClickBuyingStore,2);
+ packet(0x088f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0890,clif->pWalkToXY,2);
+ packet(0x0892,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0893,clif->pActionRequest,2,6);
+ packet(0x08a1,clif->pChangeDir,2,4);
+ packet(0x08a2,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08ac,clif->pMoveFromKafra,2,4);
+ packet(0x0920,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0925,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x092a,clif->pUseSkillToId,2,4,6);
+ packet(0x0931,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x093c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x094a,clif->pGetCharNameRequest,2);
+ packet(0x0952,clif->pReqCloseBuyingStore,0);
+ packet(0x0957,clif->pSolveCharName,2);
+ packet(0x095b,clif->pStoragePassword,0);
+ packet(0x095d,clif->pDull/*,XXX*/);
+ packet(0x095f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0967,clif->pDull/*,XXX*/);
#endif
// 2016-11-23aRagexeRE
#if PACKETVER == 20161123
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0362,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0437,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0861,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0862,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0866,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x086f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0871,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0880,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0882,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x088b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a9,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x091a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0926,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x092f,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0930,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0941,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x094d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x095a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x095b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0962,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x096a,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0362,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0437,clif->pTickSend,2);
+ packet(0x085c,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0861,clif->pWalkToXY,2);
+ packet(0x0862,clif->pReqCloseBuyingStore,0);
+ packet(0x0866,clif->pSearchStoreInfoNextPage,0);
+ packet(0x086f,clif->pDropItem,2,4);
+ packet(0x0871,clif->pDull/*,XXX*/);
+ packet(0x087f,clif->pPartyInvite2,2);
+ packet(0x0880,clif->pStoragePassword,0);
+ packet(0x0882,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x088b,clif->pGetCharNameRequest,2);
+ packet(0x089c,clif->pChangeDir,2,4);
+ packet(0x08a9,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08aa,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x091a,clif->pMoveToKafra,2,4);
+ packet(0x0926,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092a,clif->pReqClickBuyingStore,2);
+ packet(0x092f,clif->pTakeItem,2);
+ packet(0x0930,clif->pHomMenu,2,4);
+ packet(0x0941,clif->pFriendsListAdd,2);
+ packet(0x094d,clif->pUseSkillToId,2,4,6);
+ packet(0x094f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x095a,clif->pDull/*,XXX*/);
+ packet(0x095b,clif->pActionRequest,2,6);
+ packet(0x0962,clif->pMoveFromKafra,2,4);
+ packet(0x096a,clif->pSolveCharName,2);
#endif
// 2016-11-30aRagexeRE, 2016-11-30bRagexeRE
#if PACKETVER == 20161130
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0931,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0943,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0954,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0959,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pChangeDir,2,4);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pTickSend,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x088f,clif->pDull/*,XXX*/);
+ packet(0x0931,clif->pHomMenu,2,4);
+ packet(0x0943,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0954,clif->pStoragePassword,0);
+ packet(0x0959,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-12-07cRagexeRE, 2016-12-07dRagexeRE, 2016-12-07eRagexeRE
#if PACKETVER == 20161207
- packet(0x023b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0867,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0868,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0875,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0886,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a1,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a2,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08ad,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0918,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0943,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0965,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pHomMenu,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0867,clif->pFriendsListAdd,2);
+ packet(0x0868,clif->pDull/*,XXX*/);
+ packet(0x0875,clif->pMoveToKafra,2,4);
+ packet(0x087e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0886,clif->pActionRequest,2,6);
+ packet(0x08a1,clif->pChangeDir,2,4);
+ packet(0x08a2,clif->pTakeItem,2);
+ packet(0x08ad,clif->pDropItem,2,4);
+ packet(0x0918,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091d,clif->pMoveFromKafra,2,4);
+ packet(0x0943,clif->pDull/*,XXX*/);
+ packet(0x095d,clif->pStoragePassword,0);
+ packet(0x0965,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-12-14bRagexeRE, 2016-12-14cRagexeRE
#if PACKETVER == 20161214
- packet(0x022d,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0281,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x02c4,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0364,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0436,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0862,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x086d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0887,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0895,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0899,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a6,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x092e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x093d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pReqClickBuyingStore,2);
+ packet(0x0281,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x02c4,clif->pMoveFromKafra,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pHomMenu,2,4);
+ packet(0x0364,clif->pMoveToKafra,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0436,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pDull/*,XXX*/);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0862,clif->pFriendsListAdd,2);
+ packet(0x086d,clif->pPartyInvite2,2);
+ packet(0x0887,clif->pDropItem,2,4);
+ packet(0x0895,clif->pDull/*,XXX*/);
+ packet(0x0899,clif->pStoragePassword,0);
+ packet(0x08a6,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x092e,clif->pTakeItem,2);
+ packet(0x093d,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2016-12-21aRagexeRE, 2016-12-21bRagexeRE, 2016-12-21cRagexeRE, 2016-12-21dRagexeRE
#if PACKETVER == 20161221
- packet(0x035f,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0366,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0438,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0817,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x085b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0866,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0876,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0881,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0884,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0885,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0890,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0899,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x089b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08aa,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x091e,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0926,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0928,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x092e,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0930,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0943,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0946,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x094b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x095a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0964,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0965,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x035f,clif->pTakeItem,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0366,clif->pSolveCharName,2);
+ packet(0x0438,clif->pWalkToXY,2);
+ packet(0x0817,clif->pMoveToKafra,2,4);
+ packet(0x085b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0866,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0876,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0881,clif->pGetCharNameRequest,2);
+ packet(0x0884,clif->pDull/*,XXX*/);
+ packet(0x0885,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0890,clif->pStoragePassword,0);
+ packet(0x0899,clif->pDull/*,XXX*/);
+ packet(0x089a,clif->pMoveFromKafra,2,4);
+ packet(0x089b,clif->pActionRequest,2,6);
+ packet(0x08aa,clif->pTickSend,2);
+ packet(0x091e,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0926,clif->pPartyInvite2,2);
+ packet(0x0928,clif->pFriendsListAdd,2);
+ packet(0x092c,clif->pReqCloseBuyingStore,0);
+ packet(0x092e,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0930,clif->pHomMenu,2,4);
+ packet(0x0943,clif->pUseSkillToId,2,4,6);
+ packet(0x0946,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x094b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x095a,clif->pReqClickBuyingStore,2);
+ packet(0x0964,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0965,clif->pChangeDir,2,4);
#endif
// 2016-12-28aRagexeRE
#if PACKETVER == 20161228
- packet(0x0362,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x085a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0865,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x086a,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x086c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0870,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0871,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0875,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0886,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0889,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0893,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a2,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a3,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a5,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08ab,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08ac,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08ad,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0929,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x092c,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0934,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0935,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0938,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x093d,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0944,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
+ packet(0x0362,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x085a,clif->pGetCharNameRequest,2);
+ packet(0x085e,clif->pHomMenu,2,4);
+ packet(0x0865,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x086a,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x086c,clif->pTakeItem,2);
+ packet(0x086d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0870,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0871,clif->pChangeDir,2,4);
+ packet(0x0875,clif->pReqCloseBuyingStore,0);
+ packet(0x087f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0886,clif->pWalkToXY,2);
+ packet(0x0889,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0893,clif->pDropItem,2,4);
+ packet(0x089f,clif->pMoveToKafra,2,4);
+ packet(0x08a2,clif->pUseSkillToId,2,4,6);
+ packet(0x08a3,clif->pReqClickBuyingStore,2);
+ packet(0x08a5,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08ab,clif->pMoveFromKafra,2,4);
+ packet(0x08ac,clif->pSolveCharName,2);
+ packet(0x08ad,clif->pStoragePassword,0);
+ packet(0x091c,clif->pFriendsListAdd,2);
+ packet(0x0929,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x092c,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0934,clif->pPartyInvite2,2);
+ packet(0x0935,clif->pDull/*,XXX*/);
+ packet(0x0938,clif->pDull/*,XXX*/);
+ packet(0x093d,clif->pActionRequest,2,6);
+ packet(0x0944,clif->pTickSend,2);
#endif
// 2017-01-04bRagexeRE
#if PACKETVER == 20170104
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x085a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x087f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0896,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x085a,clif->pFriendsListAdd,2);
+ packet(0x087f,clif->pStoragePassword,0);
+ packet(0x0896,clif->pChangeDir,2,4);
+ packet(0x091b,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pUseSkillToId,2,4,6);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-01-11aRagexeRE
#if PACKETVER == 20170111
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0877,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x087f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a1,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a3,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a6,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0940,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x094c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0961,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0969,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085d,clif->pHomMenu,2,4);
+ packet(0x0877,clif->pFriendsListAdd,2);
+ packet(0x087f,clif->pDull/*,XXX*/);
+ packet(0x088a,clif->pMoveToKafra,2,4);
+ packet(0x08a1,clif->pChangeDir,2,4);
+ packet(0x08a3,clif->pTakeItem,2);
+ packet(0x08a6,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091a,clif->pStoragePassword,0);
+ packet(0x091b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0940,clif->pDropItem,2,4);
+ packet(0x094c,clif->pMoveFromKafra,2,4);
+ packet(0x0961,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0969,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-01-18aRagexeRE
#if PACKETVER == 20170118
- packet(0x022d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0364,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0862,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0865,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x086f,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0873,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08ad,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x091f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0927,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0933,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0958,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0962,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x022d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0364,clif->pGetCharNameRequest,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pHomMenu,2,4);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0862,clif->pMoveFromKafra,2,4);
+ packet(0x0865,clif->pChangeDir,2,4);
+ packet(0x086f,clif->pTakeItem,2);
+ packet(0x0873,clif->pDull/*,XXX*/);
+ packet(0x089e,clif->pPartyInvite2,2);
+ packet(0x08ad,clif->pItemListWindowSelected,2,4,8);
+ packet(0x091f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0927,clif->pDull/*,XXX*/);
+ packet(0x0933,clif->pDropItem,2,4);
+ packet(0x0958,clif->pStoragePassword,0);
+ packet(0x0962,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pMoveToKafra,2,4);
#endif
// 2017-01-25aRagexeRE
#if PACKETVER == 20170125
- packet(0x0438,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0811,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x086e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0876,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0877,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0879,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0881,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0884,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0893,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0894,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0895,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0898,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08a5,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x091b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x091c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0920,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0929,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x092b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0930,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x093c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0943,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0944,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0965,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0968,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
+ packet(0x0438,clif->pActionRequest,2,6);
+ packet(0x0811,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x086e,clif->pPartyInvite2,2);
+ packet(0x0876,clif->pHomMenu,2,4);
+ packet(0x0877,clif->pDropItem,2,4);
+ packet(0x0879,clif->pUseSkillToId,2,4,6);
+ packet(0x087b,clif->pTakeItem,2);
+ packet(0x087d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0881,clif->pChangeDir,2,4);
+ packet(0x0884,clif->pDull/*,XXX*/);
+ packet(0x0893,clif->pStoragePassword,0);
+ packet(0x0894,clif->pDull/*,XXX*/);
+ packet(0x0895,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0898,clif->pSolveCharName,2);
+ packet(0x089b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08a5,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x091b,clif->pReqClickBuyingStore,2);
+ packet(0x091c,clif->pMoveToKafra,2,4);
+ packet(0x091d,clif->pReqCloseBuyingStore,0);
+ packet(0x0920,clif->pFriendsListAdd,2);
+ packet(0x0929,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x092b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0930,clif->pWalkToXY,2);
+ packet(0x093c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0943,clif->pTickSend,2);
+ packet(0x0944,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x095c,clif->pMoveFromKafra,2,4);
+ packet(0x0965,clif->pGetCharNameRequest,2);
+ packet(0x0968,clif->pSearchStoreInfoNextPage,0);
#endif
// 2017-02-01aRagexeRE
#if PACKETVER == 20170201
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0815,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0875,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0879,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0881,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0884,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0885,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0886,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a4,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0919,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0920,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0938,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x094c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0966,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0969,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0815,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x085e,clif->pChangeDir,2,4);
+ packet(0x0875,clif->pTakeItem,2);
+ packet(0x0879,clif->pDull/*,XXX*/);
+ packet(0x0881,clif->pMoveToKafra,2,4);
+ packet(0x0884,clif->pWalkToXY,2);
+ packet(0x0885,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0886,clif->pStoragePassword,0);
+ packet(0x088b,clif->pDropItem,2,4);
+ packet(0x08a4,clif->pDull/*,XXX*/);
+ packet(0x0919,clif->pFriendsListAdd,2);
+ packet(0x0920,clif->pPartyInvite2,2);
+ packet(0x0938,clif->pHomMenu,2,4);
+ packet(0x0940,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x094c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0966,clif->pMoveFromKafra,2,4);
+ packet(0x0969,clif->pItemListWindowSelected,2,4,8);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-02-08aRagexeRE, 2017-02-08bRagexeRE
#if PACKETVER == 20170208
- packet(0x02c4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0367,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0860,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0892,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a1,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08ac,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0921,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0923,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0932,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0937,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x02c4,clif->pDull/*,XXX*/);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0367,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085c,clif->pPartyInvite2,2);
+ packet(0x0860,clif->pChangeDir,2,4);
+ packet(0x087a,clif->pDull/*,XXX*/);
+ packet(0x088c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0892,clif->pFriendsListAdd,2);
+ packet(0x08a1,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08ac,clif->pMoveToKafra,2,4);
+ packet(0x0921,clif->pDropItem,2,4);
+ packet(0x0923,clif->pTakeItem,2);
+ packet(0x092d,clif->pHomMenu,2,4);
+ packet(0x0932,clif->pMoveFromKafra,2,4);
+ packet(0x0937,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-02-15aRagexeRE
#if PACKETVER == 20170215
- packet(0x02c4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x035f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0360,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0811,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x083c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0876,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x087c,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x087d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087e,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0883,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0884,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x088b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x088c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0890,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0896,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a2,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08a8,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0925,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x092d,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0942,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x095f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0962,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0969,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
+ packet(0x02c4,clif->pStoragePassword,0);
+ packet(0x035f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0360,clif->pTickSend,2);
+ packet(0x0811,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x083c,clif->pActionRequest,2,6);
+ packet(0x085c,clif->pDropItem,2,4);
+ packet(0x0876,clif->pFriendsListAdd,2);
+ packet(0x087c,clif->pItemListWindowSelected,2,4,8);
+ packet(0x087d,clif->pChangeDir,2,4);
+ packet(0x087e,clif->pUseSkillToId,2,4,6);
+ packet(0x0883,clif->pSolveCharName,2);
+ packet(0x0884,clif->pDull/*,XXX*/);
+ packet(0x088a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x088b,clif->pPartyInvite2,2);
+ packet(0x088c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0890,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0896,clif->pDull/*,XXX*/);
+ packet(0x089b,clif->pMoveToKafra,2,4);
+ packet(0x08a2,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08a8,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091c,clif->pReqCloseBuyingStore,0);
+ packet(0x0925,clif->pMoveFromKafra,2,4);
+ packet(0x092b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x092d,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0942,clif->pTakeItem,2);
+ packet(0x094e,clif->pGetCharNameRequest,2);
+ packet(0x095f,clif->pReqClickBuyingStore,2);
+ packet(0x0962,clif->pHomMenu,2,4);
+ packet(0x0969,clif->pWalkToXY,2);
#endif
// 2017-02-22aRagexeRE
#if PACKETVER == 20170222
- packet(0x0202,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0866,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0870,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0871,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0877,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0889,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0894,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a3,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a8,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0937,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0939,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0943,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0962,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pHomMenu,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085f,clif->pFriendsListAdd,2);
+ packet(0x0866,clif->pDropItem,2,4);
+ packet(0x0870,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0871,clif->pDull/*,XXX*/);
+ packet(0x0877,clif->pDull/*,XXX*/);
+ packet(0x0889,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0894,clif->pTakeItem,2);
+ packet(0x08a3,clif->pChangeDir,2,4);
+ packet(0x08a8,clif->pPartyInvite2,2);
+ packet(0x0937,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0939,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0943,clif->pStoragePassword,0);
+ packet(0x095d,clif->pMoveToKafra,2,4);
+ packet(0x0962,clif->pMoveFromKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-02-28aRagexeRE
#if PACKETVER == 20170228
- packet(0x022d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0360,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0362,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0819,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x085e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0863,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086b,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0873,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0874,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0876,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0883,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0884,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0889,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0893,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x089e,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a0,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a2,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a6,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a7,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x091f,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x092a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0937,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x093e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0944,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0947,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0948,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0952,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0955,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x022d,clif->pDropItem,2,4);
+ packet(0x0360,clif->pActionRequest,2,6);
+ packet(0x0362,clif->pHomMenu,2,4);
+ packet(0x0819,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x085e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0863,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086b,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0873,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0874,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0876,clif->pReqCloseBuyingStore,0);
+ packet(0x0883,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0884,clif->pWalkToXY,2);
+ packet(0x0889,clif->pChangeDir,2,4);
+ packet(0x0893,clif->pGetCharNameRequest,2);
+ packet(0x089e,clif->pMoveToKafra,2,4);
+ packet(0x08a0,clif->pFriendsListAdd,2);
+ packet(0x08a2,clif->pStoragePassword,0);
+ packet(0x08a6,clif->pDull/*,XXX*/);
+ packet(0x08a7,clif->pReqClickBuyingStore,2);
+ packet(0x091f,clif->pUseSkillToId,2,4,6);
+ packet(0x092a,clif->pTakeItem,2);
+ packet(0x092e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0937,clif->pTickSend,2);
+ packet(0x093e,clif->pDull/*,XXX*/);
+ packet(0x0944,clif->pMoveFromKafra,2,4);
+ packet(0x0947,clif->pSolveCharName,2);
+ packet(0x0948,clif->pPartyInvite2,2);
+ packet(0x0952,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0955,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2017-03-08bRagexeRE
#if PACKETVER == 20170308
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087d,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-03-15cRagexeRE
#if PACKETVER == 20170315
- packet(0x02c4,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x035f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0360,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0366,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0436,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x07ec,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0863,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x086a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0872,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x087b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0884,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x088b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x088d,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0892,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x089c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08aa,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x091d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0920,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0922,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0944,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x094a,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x094e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0950,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0952,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x02c4,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x035f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0360,clif->pChangeDir,2,4);
+ packet(0x0366,clif->pTakeItem,2);
+ packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0436,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x07ec,clif->pTickSend,2);
+ packet(0x085c,clif->pDull/*,XXX*/);
+ packet(0x0863,clif->pHomMenu,2,4);
+ packet(0x086a,clif->pMoveFromKafra,2,4);
+ packet(0x0872,clif->pFriendsListAdd,2);
+ packet(0x087b,clif->pPartyInvite2,2);
+ packet(0x0884,clif->pActionRequest,2,6);
+ packet(0x088b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x088d,clif->pDull/*,XXX*/);
+ packet(0x088f,clif->pWalkToXY,2);
+ packet(0x0892,clif->pUseSkillToId,2,4,6);
+ packet(0x089c,clif->pReqCloseBuyingStore,0);
+ packet(0x08aa,clif->pMoveToKafra,2,4);
+ packet(0x091a,clif->pDropItem,2,4);
+ packet(0x091b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x091d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0920,clif->pSolveCharName,2);
+ packet(0x0922,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0944,clif->pGetCharNameRequest,2);
+ packet(0x094a,clif->pReqClickBuyingStore,2);
+ packet(0x094e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0950,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0952,clif->pStoragePassword,0);
#endif
// 2017-03-22aRagexeRE, 2017-03-22bRagexeRE
#if PACKETVER == 20170322
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x091a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x091a,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-03-29cRagexeRE, 2017-03-29dRagexeRE
#if PACKETVER == 20170329
- packet(0x0281,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0363,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x087a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0888,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x08a8,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0917,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0926,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0929,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x092e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0937,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0939,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0949,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pPartyInvite2,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pHomMenu,2,4);
+ packet(0x0363,clif->pMoveToKafra,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085d,clif->pStoragePassword,0);
+ packet(0x087a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0888,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x08a8,clif->pDropItem,2,4);
+ packet(0x0917,clif->pDull/*,XXX*/);
+ packet(0x0926,clif->pChangeDir,2,4);
+ packet(0x0929,clif->pTakeItem,2);
+ packet(0x092e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0937,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0939,clif->pFriendsListAdd,2);
+ packet(0x0949,clif->pMoveFromKafra,2,4);
+ packet(0x095f,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-04-05bRagexeRE, 2017-04-05cRagexeRE
#if PACKETVER == 20170405
- packet(0x022d,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0281,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085f,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0860,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0864,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0865,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x086f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0893,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a5,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x094c,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0964,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0281,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pActionRequest,2,6);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pTakeItem,2);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pHomMenu,2,4);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085f,clif->pMoveToKafra,2,4);
+ packet(0x0860,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0864,clif->pPartyInvite2,2);
+ packet(0x0865,clif->pChangeDir,2,4);
+ packet(0x086f,clif->pFriendsListAdd,2);
+ packet(0x0893,clif->pMoveFromKafra,2,4);
+ packet(0x08a5,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x094c,clif->pStoragePassword,0);
+ packet(0x094f,clif->pDull/*,XXX*/);
+ packet(0x0964,clif->pDropItem,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-04-12aRagexeRE
#if PACKETVER == 20170412
- packet(0x023b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0365,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0863,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0869,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x086d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0878,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0879,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0890,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0893,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0898,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x089a,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x089c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08a1,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x091a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x091e,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0929,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x092e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0938,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0942,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0945,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0949,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x094f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0952,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0959,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x095c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x095d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x023b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0365,clif->pReqClickBuyingStore,2);
+ packet(0x0863,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0869,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x086d,clif->pMoveFromKafra,2,4);
+ packet(0x0878,clif->pWalkToXY,2);
+ packet(0x0879,clif->pDull/*,XXX*/);
+ packet(0x087b,clif->pUseSkillToId,2,4,6);
+ packet(0x088b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0890,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0893,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0898,clif->pSolveCharName,2);
+ packet(0x089a,clif->pHomMenu,2,4);
+ packet(0x089c,clif->pDropItem,2,4);
+ packet(0x08a1,clif->pActionRequest,2,6);
+ packet(0x091a,clif->pChangeDir,2,4);
+ packet(0x091e,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0929,clif->pTickSend,2);
+ packet(0x092e,clif->pDull/*,XXX*/);
+ packet(0x0938,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0942,clif->pFriendsListAdd,2);
+ packet(0x0945,clif->pMoveToKafra,2,4);
+ packet(0x0949,clif->pSearchStoreInfoNextPage,0);
+ packet(0x094f,clif->pPartyInvite2,2);
+ packet(0x0952,clif->pReqCloseBuyingStore,0);
+ packet(0x0959,clif->pTakeItem,2);
+ packet(0x095b,clif->pGetCharNameRequest,2);
+ packet(0x095c,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x095d,clif->pStoragePassword,0);
#endif
// 2017-04-19bRagexeRE
#if PACKETVER == 20170419
- packet(0x0811,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0819,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0838,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0862,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0868,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0872,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0881,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0897,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0898,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x089d,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08aa,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0920,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0922,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0930,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0931,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0935,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x093a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x093f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0942,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x095c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x095d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0963,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0965,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
+ packet(0x0811,clif->pChangeDir,2,4);
+ packet(0x0819,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0838,clif->pGetCharNameRequest,2);
+ packet(0x085a,clif->pActionRequest,2,6);
+ packet(0x085e,clif->pWalkToXY,2);
+ packet(0x0862,clif->pPartyInvite2,2);
+ packet(0x0868,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0872,clif->pDull/*,XXX*/);
+ packet(0x0881,clif->pStoragePassword,0);
+ packet(0x088d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088f,clif->pHomMenu,2,4);
+ packet(0x0897,clif->pDropItem,2,4);
+ packet(0x0898,clif->pTickSend,2);
+ packet(0x089d,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08aa,clif->pMoveToKafra,2,4);
+ packet(0x091b,clif->pSolveCharName,2);
+ packet(0x0920,clif->pUseSkillToId,2,4,6);
+ packet(0x0922,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0930,clif->pMoveFromKafra,2,4);
+ packet(0x0931,clif->pReqCloseBuyingStore,0);
+ packet(0x0935,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x093a,clif->pFriendsListAdd,2);
+ packet(0x093f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0942,clif->pSearchStoreInfoNextPage,0);
+ packet(0x095c,clif->pTakeItem,2);
+ packet(0x095d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0963,clif->pDull/*,XXX*/);
+ packet(0x0965,clif->pReqClickBuyingStore,2);
#endif
// 2017-04-26dRagexeRE
#if PACKETVER == 20170426
- packet(0x0281,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0866,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0887,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0899,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x089c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a2,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0927,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0940,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0958,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0963,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pStoragePassword,0);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0866,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086f,clif->pDull/*,XXX*/);
+ packet(0x087a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0887,clif->pSolveCharName,2);
+ packet(0x0899,clif->pMoveFromKafra,2,4);
+ packet(0x089c,clif->pHomMenu,2,4);
+ packet(0x08a2,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a4,clif->pTakeItem,2);
+ packet(0x091f,clif->pDull/*,XXX*/);
+ packet(0x0927,clif->pChangeDir,2,4);
+ packet(0x0940,clif->pDropItem,2,4);
+ packet(0x0958,clif->pFriendsListAdd,2);
+ packet(0x0963,clif->pMoveToKafra,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-05-02dRagexeRE
#if PACKETVER == 20170502
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0875,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0894,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x089c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x093c,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0950,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0875,clif->pStoragePassword,0);
+ packet(0x0894,clif->pChangeDir,2,4);
+ packet(0x089c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x093c,clif->pFriendsListAdd,2);
+ packet(0x0950,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-05-17aRagexeRE, 2017-05-17bRagexeRE
#if PACKETVER == 20170517
- packet(0x0364,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0367,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0437,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0802,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0815,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0817,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0868,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0875,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x087b,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x087d,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x088d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0894,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0896,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0899,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x089f,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08a2,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a8,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08aa,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x091b,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0923,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x093b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0945,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0946,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0947,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0958,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0960,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0964,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x0364,clif->pDull/*,XXX*/);
+ packet(0x0367,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0437,clif->pActionRequest,2,6);
+ packet(0x0802,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0815,clif->pUseSkillToId,2,4,6);
+ packet(0x0817,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0868,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0875,clif->pSearchStoreInfoNextPage,0);
+ packet(0x087b,clif->pSolveCharName,2);
+ packet(0x087d,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088c,clif->pMoveFromKafra,2,4);
+ packet(0x088d,clif->pChangeDir,2,4);
+ packet(0x0894,clif->pGetCharNameRequest,2);
+ packet(0x0896,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0899,clif->pPartyInvite2,2);
+ packet(0x089e,clif->pDull/*,XXX*/);
+ packet(0x089f,clif->pReqCloseBuyingStore,0);
+ packet(0x08a2,clif->pTickSend,2);
+ packet(0x08a8,clif->pWalkToXY,2);
+ packet(0x08aa,clif->pMoveToKafra,2,4);
+ packet(0x091b,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0923,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x093b,clif->pDropItem,2,4);
+ packet(0x0945,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0946,clif->pReqClickBuyingStore,2);
+ packet(0x0947,clif->pStoragePassword,0);
+ packet(0x0958,clif->pHomMenu,2,4);
+ packet(0x0960,clif->pFriendsListAdd,2);
+ packet(0x0964,clif->pTakeItem,2);
#endif
// 2017-05-24aRagexeRE
#if PACKETVER == 20170524
- packet(0x0364,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0368,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0802,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x085e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0860,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0864,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0866,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0868,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x086d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0873,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0874,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x087d,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0882,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x088d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0894,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x089c,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a1,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x091e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0923,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0925,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0934,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0946,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0958,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x095b,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0964,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0967,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0968,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
+ packet(0x0364,clif->pPartyInvite2,2);
+ packet(0x0368,clif->pStoragePassword,0);
+ packet(0x0802,clif->pDropItem,2,4);
+ packet(0x085e,clif->pActionRequest,2,6);
+ packet(0x085f,clif->pReqClickBuyingStore,2);
+ packet(0x0860,clif->pTickSend,2);
+ packet(0x0864,clif->pTakeItem,2);
+ packet(0x0866,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0868,clif->pMoveToKafra,2,4);
+ packet(0x086d,clif->pHomMenu,2,4);
+ packet(0x0873,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0874,clif->pSearchStoreInfoNextPage,0);
+ packet(0x087d,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0882,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x088d,clif->pUseSkillToId,2,4,6);
+ packet(0x0894,clif->pMoveFromKafra,2,4);
+ packet(0x089c,clif->pWalkToXY,2);
+ packet(0x08a1,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x091e,clif->pDull/*,XXX*/);
+ packet(0x0923,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0925,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0934,clif->pChangeDir,2,4);
+ packet(0x0946,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0958,clif->pDull/*,XXX*/);
+ packet(0x095a,clif->pGetCharNameRequest,2);
+ packet(0x095b,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0964,clif->pReqCloseBuyingStore,0);
+ packet(0x0967,clif->pFriendsListAdd,2);
+ packet(0x0968,clif->pSolveCharName,2);
#endif
// 2017-05-31aRagexeRE
#if PACKETVER == 20170531
- packet(0x0361,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0369,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x07e4,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x07ec,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0819,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x085f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0861,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0868,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0873,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0875,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0878,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x087b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0885,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x088d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0894,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x089a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x08ac,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08ad,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0933,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0937,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0940,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0945,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0963,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0968,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
+ packet(0x0361,clif->pChangeDir,2,4);
+ packet(0x0369,clif->pUseSkillToId,2,4,6);
+ packet(0x07e4,clif->pWalkToXY,2);
+ packet(0x07ec,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0819,clif->pTickSend,2);
+ packet(0x085b,clif->pDull/*,XXX*/);
+ packet(0x085f,clif->pSolveCharName,2);
+ packet(0x0861,clif->pFriendsListAdd,2);
+ packet(0x0868,clif->pDull/*,XXX*/);
+ packet(0x0873,clif->pReqCloseBuyingStore,0);
+ packet(0x0875,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0878,clif->pPartyInvite2,2);
+ packet(0x087b,clif->pActionRequest,2,6);
+ packet(0x0885,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x088d,clif->pDropItem,2,4);
+ packet(0x0894,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x089a,clif->pStoragePassword,0);
+ packet(0x089c,clif->pHomMenu,2,4);
+ packet(0x08a2,clif->pSearchStoreInfoNextPage,0);
+ packet(0x08ac,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08ad,clif->pMoveToKafra,2,4);
+ packet(0x092d,clif->pGetCharNameRequest,2);
+ packet(0x0933,clif->pMoveFromKafra,2,4);
+ packet(0x0937,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0940,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0945,clif->pReqClickBuyingStore,2);
+ packet(0x0963,clif->pTakeItem,2);
+ packet(0x0968,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
#endif
// 2017-06-07bRagexeRE, 2017-06-07cRagexeRE
#if PACKETVER == 20170607
- packet(0x0361,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0364,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x07e4,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x085e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0862,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0863,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0864,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0871,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0873,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0875,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0885,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x088a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0897,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x089d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a9,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08ab,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0917,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0918,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0919,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0925,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0927,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0931,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0934,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0938,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x093d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0942,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0944,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0949,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x0361,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0364,clif->pStoragePassword,0);
+ packet(0x07e4,clif->pTickSend,2);
+ packet(0x085a,clif->pChangeDir,2,4);
+ packet(0x085e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0862,clif->pGetCharNameRequest,2);
+ packet(0x0863,clif->pReqClickBuyingStore,2);
+ packet(0x0864,clif->pDropItem,2,4);
+ packet(0x0871,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0873,clif->pDull/*,XXX*/);
+ packet(0x0875,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0885,clif->pFriendsListAdd,2);
+ packet(0x088a,clif->pMoveFromKafra,2,4);
+ packet(0x0897,clif->pTakeItem,2);
+ packet(0x089d,clif->pMoveToKafra,2,4);
+ packet(0x08a9,clif->pUseSkillToId,2,4,6);
+ packet(0x08ab,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0917,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0918,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0919,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0925,clif->pPartyInvite2,2);
+ packet(0x0927,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0931,clif->pDull/*,XXX*/);
+ packet(0x0934,clif->pWalkToXY,2);
+ packet(0x0938,clif->pActionRequest,2,6);
+ packet(0x093d,clif->pReqCloseBuyingStore,0);
+ packet(0x0942,clif->pHomMenu,2,4);
+ packet(0x0944,clif->pSolveCharName,2);
+ packet(0x0949,clif->pReqOpenBuyingStore,2,4,8,9,89);
#endif
// 2017-06-14bRagexeRE
#if PACKETVER == 20170614
- packet(0x023b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0361,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0364,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0367,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0437,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0838,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x083c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0860,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0865,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0866,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0867,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x086b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0877,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0879,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x087e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0889,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0899,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a2,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08ad,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0928,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x092f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0936,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0944,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0957,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0963,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
+ packet(0x023b,clif->pMoveFromKafra,2,4);
+ packet(0x0361,clif->pWalkToXY,2);
+ packet(0x0364,clif->pHomMenu,2,4);
+ packet(0x0367,clif->pDropItem,2,4);
+ packet(0x0437,clif->pStoragePassword,0);
+ packet(0x0838,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x083c,clif->pActionRequest,2,6);
+ packet(0x0860,clif->pReqClickBuyingStore,2);
+ packet(0x0865,clif->pDull/*,XXX*/);
+ packet(0x0866,clif->pTickSend,2);
+ packet(0x0867,clif->pFriendsListAdd,2);
+ packet(0x086b,clif->pReqCloseBuyingStore,0);
+ packet(0x086c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0877,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0879,clif->pMoveToKafra,2,4);
+ packet(0x087d,clif->pSolveCharName,2);
+ packet(0x087e,clif->pChangeDir,2,4);
+ packet(0x0889,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0899,clif->pPartyInvite2,2);
+ packet(0x089d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a2,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08ad,clif->pTakeItem,2);
+ packet(0x091b,clif->pUseSkillToId,2,4,6);
+ packet(0x0928,clif->pSearchStoreInfoNextPage,0);
+ packet(0x092f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0936,clif->pGetCharNameRequest,2);
+ packet(0x0944,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0957,clif->pDull/*,XXX*/);
+ packet(0x0963,clif->pSearchStoreInfoListItemClick,2,6,10);
#endif
// 2017-06-21aRagexeRE
#if PACKETVER == 20170621
- packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0365,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0366,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0802,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0885,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0889,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a8,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0956,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0957,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x095c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0961,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pTakeItem,2);
+ packet(0x0365,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0366,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pFriendsListAdd,2);
+ packet(0x0802,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085d,clif->pChangeDir,2,4);
+ packet(0x087d,clif->pDropItem,2,4);
+ packet(0x0885,clif->pPartyInvite2,2);
+ packet(0x0889,clif->pMoveFromKafra,2,4);
+ packet(0x08a8,clif->pHomMenu,2,4);
+ packet(0x0956,clif->pDull/*,XXX*/);
+ packet(0x0957,clif->pStoragePassword,0);
+ packet(0x095b,clif->pDull/*,XXX*/);
+ packet(0x095c,clif->pMoveToKafra,2,4);
+ packet(0x0961,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-06-28bRagexeRE
#if PACKETVER == 20170628
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0863,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0863,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-07-05aRagexeRE
#if PACKETVER == 20170705
- packet(0x0202,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x02c4,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0879,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0886,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x088d,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x089d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x092f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0930,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0932,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0934,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x094c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pStoragePassword,0);
+ packet(0x02c4,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0879,clif->pMoveToKafra,2,4);
+ packet(0x0886,clif->pFriendsListAdd,2);
+ packet(0x088d,clif->pDull/*,XXX*/);
+ packet(0x088e,clif->pPartyInvite2,2);
+ packet(0x089a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x089d,clif->pDropItem,2,4);
+ packet(0x091a,clif->pChangeDir,2,4);
+ packet(0x092f,clif->pDull/*,XXX*/);
+ packet(0x0930,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0932,clif->pTakeItem,2);
+ packet(0x0934,clif->pMoveFromKafra,2,4);
+ packet(0x094c,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-07-12bRagexeRE
#if PACKETVER == 20170712
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0944,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0944,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-07-19aRagexeRE
#if PACKETVER == 20170719
- packet(0x022d,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0367,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0368,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0369,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x07e4,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085a,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0863,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x086e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x087d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0881,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0882,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0885,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0891,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0898,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x089a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089d,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x08a6,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a8,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x091b,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x092c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x092e,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x092f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x093d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x093e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0944,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0946,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0966,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x022d,clif->pActionRequest,2,6);
+ packet(0x0367,clif->pReqCloseBuyingStore,0);
+ packet(0x0368,clif->pDull/*,XXX*/);
+ packet(0x0369,clif->pHomMenu,2,4);
+ packet(0x07e4,clif->pGetCharNameRequest,2);
+ packet(0x085a,clif->pTickSend,2);
+ packet(0x085e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0863,clif->pReqClickBuyingStore,2);
+ packet(0x086e,clif->pPartyInvite2,2);
+ packet(0x087d,clif->pTakeItem,2);
+ packet(0x0881,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0882,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0885,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0891,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0898,clif->pUseSkillToId,2,4,6);
+ packet(0x089a,clif->pStoragePassword,0);
+ packet(0x089d,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x08a6,clif->pMoveFromKafra,2,4);
+ packet(0x08a8,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x091b,clif->pDropItem,2,4);
+ packet(0x091f,clif->pSolveCharName,2);
+ packet(0x092c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x092e,clif->pSearchStoreInfoNextPage,0);
+ packet(0x092f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x093d,clif->pWalkToXY,2);
+ packet(0x093e,clif->pDull/*,XXX*/);
+ packet(0x0944,clif->pChangeDir,2,4);
+ packet(0x0946,clif->pFriendsListAdd,2);
+ packet(0x0966,clif->pMoveToKafra,2,4);
#endif
// 2017-07-26cRagexeRE
#if PACKETVER == 20170726
- packet(0x0363,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0364,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0366,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0369,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0438,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0838,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0873,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0874,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0878,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0881,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0888,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x088e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a3,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a7,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08aa,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08ab,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08ac,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x091d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x091e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x091f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0921,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0923,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0943,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x094f,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0950,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0952,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0954,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0963,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
+ packet(0x0363,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0364,clif->pMoveToKafra,2,4);
+ packet(0x0366,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0369,clif->pUseSkillToId,2,4,6);
+ packet(0x0438,clif->pPartyInvite2,2);
+ packet(0x0838,clif->pReqCloseBuyingStore,0);
+ packet(0x0873,clif->pReqClickBuyingStore,2);
+ packet(0x0874,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0878,clif->pActionRequest,2,6);
+ packet(0x0881,clif->pDull/*,XXX*/);
+ packet(0x0888,clif->pSearchStoreInfoNextPage,0);
+ packet(0x088e,clif->pWalkToXY,2);
+ packet(0x08a3,clif->pDull/*,XXX*/);
+ packet(0x08a7,clif->pStoragePassword,0);
+ packet(0x08aa,clif->pGetCharNameRequest,2);
+ packet(0x08ab,clif->pTakeItem,2);
+ packet(0x08ac,clif->pTickSend,2);
+ packet(0x091d,clif->pFriendsListAdd,2);
+ packet(0x091e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x091f,clif->pHomMenu,2,4);
+ packet(0x0921,clif->pSolveCharName,2);
+ packet(0x0923,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0943,clif->pDropItem,2,4);
+ packet(0x094f,clif->pMoveFromKafra,2,4);
+ packet(0x0950,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0952,clif->pChangeDir,2,4);
+ packet(0x0954,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x095a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0963,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
#endif
// 2017-08-01aRagexeRE
#if PACKETVER == 20170801
- packet(0x022d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0281,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0362,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a6,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095a,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pDropItem,2,4);
+ packet(0x0281,clif->pChangeDir,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0362,clif->pHomMenu,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087d,clif->pStoragePassword,0);
+ packet(0x08a6,clif->pDull/*,XXX*/);
+ packet(0x094f,clif->pFriendsListAdd,2);
+ packet(0x095a,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-08-09cRagexeRE
#if PACKETVER == 20170809
- packet(0x022d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0281,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0364,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0366,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0367,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x07e4,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0802,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0835,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0868,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x086e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x086f,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0876,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x087d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0880,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0890,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0892,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0895,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0899,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a3,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08a6,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0918,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0921,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x092b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0931,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0939,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x093b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0940,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x022d,clif->pDull/*,XXX*/);
+ packet(0x0281,clif->pMoveFromKafra,2,4);
+ packet(0x0364,clif->pPartyInvite2,2);
+ packet(0x0366,clif->pFriendsListAdd,2);
+ packet(0x0367,clif->pReqCloseBuyingStore,0);
+ packet(0x07e4,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0802,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0835,clif->pDropItem,2,4);
+ packet(0x0868,clif->pActionRequest,2,6);
+ packet(0x086e,clif->pChangeDir,2,4);
+ packet(0x086f,clif->pHomMenu,2,4);
+ packet(0x0876,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x087d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0880,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088c,clif->pUseSkillToId,2,4,6);
+ packet(0x0890,clif->pStoragePassword,0);
+ packet(0x0892,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0895,clif->pWalkToXY,2);
+ packet(0x0899,clif->pDull/*,XXX*/);
+ packet(0x08a3,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08a6,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0918,clif->pTakeItem,2);
+ packet(0x0921,clif->pMoveToKafra,2,4);
+ packet(0x092a,clif->pGetCharNameRequest,2);
+ packet(0x092b,clif->pTickSend,2);
+ packet(0x0931,clif->pSolveCharName,2);
+ packet(0x0939,clif->pReqClickBuyingStore,2);
+ packet(0x093b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0940,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2017-08-16cRagexeRE, 2017-08-16dRagexeRE
#if PACKETVER == 20170816
- packet(0x022d,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x035f,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0361,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0362,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0438,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x085a,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0862,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0864,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x087e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0881,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0882,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0884,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0888,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0889,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x08a3,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a7,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a9,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08ac,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x091c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0921,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0925,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x092c,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x093a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x093d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0940,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0941,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0950,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0959,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0960,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
+ packet(0x022d,clif->pGetCharNameRequest,2);
+ packet(0x035f,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0361,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0362,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0438,clif->pActionRequest,2,6);
+ packet(0x085a,clif->pSolveCharName,2);
+ packet(0x0862,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0864,clif->pReqCloseBuyingStore,0);
+ packet(0x087e,clif->pTakeItem,2);
+ packet(0x0881,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0882,clif->pStoragePassword,0);
+ packet(0x0884,clif->pDull/*,XXX*/);
+ packet(0x0888,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0889,clif->pTickSend,2);
+ packet(0x08a3,clif->pFriendsListAdd,2);
+ packet(0x08a7,clif->pDull/*,XXX*/);
+ packet(0x08a9,clif->pWalkToXY,2);
+ packet(0x08ac,clif->pHomMenu,2,4);
+ packet(0x091c,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0921,clif->pReqClickBuyingStore,2);
+ packet(0x0925,clif->pMoveFromKafra,2,4);
+ packet(0x092c,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x093a,clif->pPartyInvite2,2);
+ packet(0x093d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0940,clif->pUseSkillToId,2,4,6);
+ packet(0x0941,clif->pDropItem,2,4);
+ packet(0x0950,clif->pChangeDir,2,4);
+ packet(0x0959,clif->pMoveToKafra,2,4);
+ packet(0x0960,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
#endif
// 2017-08-23aRagexeRE
#if PACKETVER == 20170823
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x086d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08ac,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pPartyInvite2,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pChangeDir,2,4);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x086d,clif->pStoragePassword,0);
+ packet(0x08ac,clif->pFriendsListAdd,2);
+ packet(0x095b,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-08-30aRagexeRE, 2017-08-30bRagexeRE
#if PACKETVER == 20170830
- packet(0x0281,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x02c4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0363,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0364,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0860,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0865,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x086a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0875,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0884,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0885,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0888,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0899,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089e,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a2,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091e,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0921,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0925,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x092e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0939,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x093e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0940,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0942,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0943,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0947,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0951,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0959,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x0281,clif->pChangeDir,2,4);
+ packet(0x02c4,clif->pTakeItem,2);
+ packet(0x0363,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0364,clif->pDull/*,XXX*/);
+ packet(0x0860,clif->pReqCloseBuyingStore,0);
+ packet(0x0865,clif->pWalkToXY,2);
+ packet(0x086a,clif->pPartyInvite2,2);
+ packet(0x0875,clif->pDull/*,XXX*/);
+ packet(0x0884,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0885,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0888,clif->pUseSkillToId,2,4,6);
+ packet(0x0897,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0899,clif->pDropItem,2,4);
+ packet(0x089a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089e,clif->pMoveToKafra,2,4);
+ packet(0x08a2,clif->pStoragePassword,0);
+ packet(0x08a8,clif->pMoveFromKafra,2,4);
+ packet(0x091e,clif->pTickSend,2);
+ packet(0x0921,clif->pHomMenu,2,4);
+ packet(0x0925,clif->pReqClickBuyingStore,2);
+ packet(0x092e,clif->pGetCharNameRequest,2);
+ packet(0x0939,clif->pFriendsListAdd,2);
+ packet(0x093e,clif->pActionRequest,2,6);
+ packet(0x0940,clif->pSolveCharName,2);
+ packet(0x0942,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0943,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0947,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0951,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0959,clif->pUseSkillToPos,2,4,6,8);
#endif
// 2017-09-06cRagexeRE
#if PACKETVER == 20170906
- packet(0x0202,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0281,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0860,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0866,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a2,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a3,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a7,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x091a,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0953,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pDull/*,XXX*/);
+ packet(0x0281,clif->pStoragePassword,0);
+ packet(0x02c4,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pPartyInvite2,2);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pChangeDir,2,4);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0860,clif->pDropItem,2,4);
+ packet(0x0866,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086c,clif->pDull/*,XXX*/);
+ packet(0x087b,clif->pMoveToKafra,2,4);
+ packet(0x08a2,clif->pMoveFromKafra,2,4);
+ packet(0x08a3,clif->pFriendsListAdd,2);
+ packet(0x08a7,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x091a,clif->pTakeItem,2);
+ packet(0x091e,clif->pHomMenu,2,4);
+ packet(0x0953,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-09-13bRagexeRE
#if PACKETVER == 20170913
- packet(0x0281,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x035f,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0437,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x07e4,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0817,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0835,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x085a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0860,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0865,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0866,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x088c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0890,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0891,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0892,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a7,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08aa,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08ab,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08ac,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ad,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x091b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x091d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x091e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0920,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0923,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0925,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0927,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x095a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x095c,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
+ packet(0x0281,clif->pGetCharNameRequest,2);
+ packet(0x035f,clif->pFriendsListAdd,2);
+ packet(0x0437,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x07e4,clif->pMoveFromKafra,2,4);
+ packet(0x0817,clif->pActionRequest,2,6);
+ packet(0x0835,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x085a,clif->pReqCloseBuyingStore,0);
+ packet(0x0860,clif->pTakeItem,2);
+ packet(0x0865,clif->pPartyInvite2,2);
+ packet(0x0866,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x088c,clif->pHomMenu,2,4);
+ packet(0x0890,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0891,clif->pMoveToKafra,2,4);
+ packet(0x0892,clif->pStoragePassword,0);
+ packet(0x08a6,clif->pReqClickBuyingStore,2);
+ packet(0x08a7,clif->pDull/*,XXX*/);
+ packet(0x08aa,clif->pUseSkillToId,2,4,6);
+ packet(0x08ab,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08ac,clif->pChangeDir,2,4);
+ packet(0x08ad,clif->pItemListWindowSelected,2,4,8);
+ packet(0x091b,clif->pTickSend,2);
+ packet(0x091d,clif->pDropItem,2,4);
+ packet(0x091e,clif->pDull/*,XXX*/);
+ packet(0x0920,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0923,clif->pWalkToXY,2);
+ packet(0x0925,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0927,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x095a,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x095c,clif->pSolveCharName,2);
#endif
// 2017-09-20bRagexeRE
#if PACKETVER == 20170920
- packet(0x0369,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0436,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x07ec,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x085a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0861,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0862,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0864,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0865,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x086a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x086c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0874,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0875,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0889,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x088e,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x089b,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0919,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x091e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0921,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0923,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0926,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0937,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0939,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0945,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x094c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x095d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0961,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0966,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x096a,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
+ packet(0x0369,clif->pTakeItem,2);
+ packet(0x0436,clif->pItemListWindowSelected,2,4,8);
+ packet(0x07ec,clif->pMoveFromKafra,2,4);
+ packet(0x085a,clif->pWalkToXY,2);
+ packet(0x0861,clif->pFriendsListAdd,2);
+ packet(0x0862,clif->pUseSkillToId,2,4,6);
+ packet(0x0864,clif->pStoragePassword,0);
+ packet(0x0865,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x086a,clif->pPartyInvite2,2);
+ packet(0x086c,clif->pDropItem,2,4);
+ packet(0x0874,clif->pReqCloseBuyingStore,0);
+ packet(0x0875,clif->pDull/*,XXX*/);
+ packet(0x0889,clif->pGetCharNameRequest,2);
+ packet(0x088e,clif->pTickSend,2);
+ packet(0x089b,clif->pActionRequest,2,6);
+ packet(0x0919,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x091e,clif->pDull/*,XXX*/);
+ packet(0x0921,clif->pSolveCharName,2);
+ packet(0x0923,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0926,clif->pMoveToKafra,2,4);
+ packet(0x092e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0937,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0939,clif->pChangeDir,2,4);
+ packet(0x0945,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x094c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x095d,clif->pHomMenu,2,4);
+ packet(0x0961,clif->pReqClickBuyingStore,2);
+ packet(0x0966,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x096a,clif->pSearchStoreInfoNextPage,0);
#endif
// 2017-09-27bRagexeRE, 2017-09-27dRagexeRE
#if PACKETVER == 20170927
- packet(0x02c4,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x035f,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0361,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0362,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0366,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x085c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0873,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0875,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x087d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x087e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x088b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0899,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x089a,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08a3,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08a5,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a6,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08ad,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x091e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0922,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0923,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0927,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x093b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0942,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0945,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x094b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x094d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0959,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x095a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x02c4,clif->pHomMenu,2,4);
+ packet(0x035f,clif->pGetCharNameRequest,2);
+ packet(0x0361,clif->pDull/*,XXX*/);
+ packet(0x0362,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0366,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x085c,clif->pUseSkillToId,2,4,6);
+ packet(0x0873,clif->pSolveCharName,2);
+ packet(0x0875,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x087d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x087e,clif->pChangeDir,2,4);
+ packet(0x088b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0899,clif->pActionRequest,2,6);
+ packet(0x089a,clif->pStoragePassword,0);
+ packet(0x089b,clif->pMoveFromKafra,2,4);
+ packet(0x08a3,clif->pReqCloseBuyingStore,0);
+ packet(0x08a5,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a6,clif->pDull/*,XXX*/);
+ packet(0x08ad,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x091e,clif->pReqClickBuyingStore,2);
+ packet(0x0922,clif->pPartyInvite2,2);
+ packet(0x0923,clif->pDropItem,2,4);
+ packet(0x0927,clif->pWalkToXY,2);
+ packet(0x093b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0942,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0945,clif->pTickSend,2);
+ packet(0x094b,clif->pFriendsListAdd,2);
+ packet(0x094d,clif->pTakeItem,2);
+ packet(0x0959,clif->pMoveToKafra,2,4);
+ packet(0x095a,clif->pUseSkillToPos,2,4,6,8);
#endif
// 2017-10-02cRagexeRE
#if PACKETVER == 20171002
- packet(0x022d,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0363,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0885,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0897,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0899,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0928,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x092d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0934,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093b,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x093e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0943,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x095f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x022d,clif->pDropItem,2,4);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0363,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pHomMenu,2,4);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0885,clif->pMoveToKafra,2,4);
+ packet(0x0897,clif->pChangeDir,2,4);
+ packet(0x0899,clif->pFriendsListAdd,2);
+ packet(0x089d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0928,clif->pItemListWindowSelected,2,4,8);
+ packet(0x092d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0934,clif->pStoragePassword,0);
+ packet(0x093b,clif->pMoveFromKafra,2,4);
+ packet(0x093d,clif->pTakeItem,2);
+ packet(0x093e,clif->pDull/*,XXX*/);
+ packet(0x0943,clif->pPartyInvite2,2);
+ packet(0x095f,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-10-11aRagexeRE, 2017-10-11bRagexeRE
#if PACKETVER == 20171011
- packet(0x023b,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0882,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0950,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0954,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x023b,clif->pWalkToXY,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pStoragePassword,0);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087b,clif->pFriendsListAdd,2);
+ packet(0x0882,clif->pHomMenu,2,4);
+ packet(0x0950,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0954,clif->pChangeDir,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-10-18aRagexeRE
#if PACKETVER == 20171018
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0363,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0364,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x087a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0889,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x089a,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a6,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0938,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0944,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x094a,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x094f,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0363,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0364,clif->pMoveToKafra,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pTakeItem,2);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086a,clif->pDull/*,XXX*/);
+ packet(0x087a,clif->pDull/*,XXX*/);
+ packet(0x087e,clif->pHomMenu,2,4);
+ packet(0x0889,clif->pMoveFromKafra,2,4);
+ packet(0x089a,clif->pDropItem,2,4);
+ packet(0x089f,clif->pPartyInvite2,2);
+ packet(0x08a6,clif->pChangeDir,2,4);
+ packet(0x0938,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0944,clif->pStoragePassword,0);
+ packet(0x094a,clif->pFriendsListAdd,2);
+ packet(0x094f,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-10-25bRagexeRE, 2017-10-25cRagexeRE, 2017-10-25dRagexeRE, 2017-10-25eRagexeRE
#if PACKETVER == 20171025
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a2,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x08a2,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-11-01bRagexeRE
#if PACKETVER == 20171101
- packet(0x022d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0368,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0369,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0438,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0835,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x085b,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0860,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0872,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0876,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0886,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0890,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0895,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0899,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x089b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x089c,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a0,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x08ab,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08ad,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x091b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0939,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x094a,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x094d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0957,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x095a,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0962,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0966,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x022d,clif->pStoragePassword,0);
+ packet(0x0368,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0369,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0438,clif->pTickSend,2);
+ packet(0x0835,clif->pDropItem,2,4);
+ packet(0x085b,clif->pHomMenu,2,4);
+ packet(0x0860,clif->pGetCharNameRequest,2);
+ packet(0x086c,clif->pUseSkillToId,2,4,6);
+ packet(0x0872,clif->pFriendsListAdd,2);
+ packet(0x0876,clif->pChangeDir,2,4);
+ packet(0x0886,clif->pDull/*,XXX*/);
+ packet(0x088e,clif->pReqClickBuyingStore,2);
+ packet(0x0890,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0895,clif->pDull/*,XXX*/);
+ packet(0x0899,clif->pPartyInvite2,2);
+ packet(0x089b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x089c,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a0,clif->pMoveFromKafra,2,4);
+ packet(0x08ab,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08ad,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x091b,clif->pMoveToKafra,2,4);
+ packet(0x0939,clif->pWalkToXY,2);
+ packet(0x094a,clif->pReqCloseBuyingStore,0);
+ packet(0x094d,clif->pSolveCharName,2);
+ packet(0x0952,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0957,clif->pActionRequest,2,6);
+ packet(0x095a,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0962,clif->pTakeItem,2);
+ packet(0x0966,clif->pUseSkillToPos,2,4,6,8);
#endif
// 2017-11-08bRagexeRE
#if PACKETVER == 20171108
- packet(0x0202,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0361,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x07e4,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0815,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0819,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0838,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x085d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0863,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0878,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x087e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0884,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0896,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0897,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x08a2,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x08a9,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08ad,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x091d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x091f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0940,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0941,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0945,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0947,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0949,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x094e,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0958,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x095a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0963,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0965,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0967,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x0202,clif->pTickSend,2);
+ packet(0x0361,clif->pSearchStoreInfoNextPage,0);
+ packet(0x07e4,clif->pSolveCharName,2);
+ packet(0x0815,clif->pStoragePassword,0);
+ packet(0x0819,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0838,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x085d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0863,clif->pWalkToXY,2);
+ packet(0x0878,clif->pFriendsListAdd,2);
+ packet(0x087e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0884,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0896,clif->pDull/*,XXX*/);
+ packet(0x0897,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x08a2,clif->pUseSkillToId,2,4,6);
+ packet(0x08a9,clif->pHomMenu,2,4);
+ packet(0x08ad,clif->pGetCharNameRequest,2);
+ packet(0x091d,clif->pReqCloseBuyingStore,0);
+ packet(0x091f,clif->pChangeDir,2,4);
+ packet(0x0940,clif->pReqClickBuyingStore,2);
+ packet(0x0941,clif->pMoveToKafra,2,4);
+ packet(0x0945,clif->pTakeItem,2);
+ packet(0x0947,clif->pDull/*,XXX*/);
+ packet(0x0949,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x094e,clif->pPartyInvite2,2);
+ packet(0x0958,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x095a,clif->pMoveFromKafra,2,4);
+ packet(0x0963,clif->pActionRequest,2,6);
+ packet(0x0965,clif->pDropItem,2,4);
+ packet(0x0967,clif->pUseSkillToPos,2,4,6,8);
#endif
// 2017-11-15aRagexeRE
#if PACKETVER == 20171115
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0365,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x086d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x086f,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x087e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0883,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0890,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0898,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a4,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0926,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0958,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x095a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0365,clif->pDropItem,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pReqClickBuyingStore,2);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pFriendsListAdd,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x086d,clif->pDull/*,XXX*/);
+ packet(0x086f,clif->pItemListWindowSelected,2,4,8);
+ packet(0x087e,clif->pMoveFromKafra,2,4);
+ packet(0x0883,clif->pDull/*,XXX*/);
+ packet(0x088b,clif->pMoveToKafra,2,4);
+ packet(0x0890,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0898,clif->pStoragePassword,0);
+ packet(0x08a4,clif->pChangeDir,2,4);
+ packet(0x0926,clif->pTakeItem,2);
+ packet(0x0958,clif->pHomMenu,2,4);
+ packet(0x095a,clif->pPartyInvite2,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-11-22bRagexeRE
#if PACKETVER == 20171122
- packet(0x0281,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x02c4,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x035f,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0838,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x083c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x085b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0862,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0867,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0877,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0885,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0890,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0891,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0893,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0897,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0898,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x089a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x089e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x08a6,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x08a9,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x091e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0920,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0923,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0934,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0945,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0946,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0947,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0962,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0968,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x0281,clif->pSolveCharName,2);
+ packet(0x02c4,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x035f,clif->pDull/*,XXX*/);
+ packet(0x0838,clif->pMoveToKafra,2,4);
+ packet(0x083c,clif->pHomMenu,2,4);
+ packet(0x085b,clif->pGetCharNameRequest,2);
+ packet(0x0862,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0867,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0877,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0885,clif->pDull/*,XXX*/);
+ packet(0x0890,clif->pTickSend,2);
+ packet(0x0891,clif->pTakeItem,2);
+ packet(0x0893,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0897,clif->pChangeDir,2,4);
+ packet(0x0898,clif->pDropItem,2,4);
+ packet(0x089a,clif->pMoveFromKafra,2,4);
+ packet(0x089e,clif->pActionRequest,2,6);
+ packet(0x08a6,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x08a9,clif->pReqClickBuyingStore,2);
+ packet(0x091e,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0920,clif->pReqCloseBuyingStore,0);
+ packet(0x0923,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0934,clif->pStoragePassword,0);
+ packet(0x093b,clif->pUseSkillToId,2,4,6);
+ packet(0x0945,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0946,clif->pFriendsListAdd,2);
+ packet(0x0947,clif->pWalkToXY,2);
+ packet(0x0962,clif->pPartyInvite2,2);
+ packet(0x0968,clif->pReqOpenBuyingStore,2,4,8,9,89);
#endif
// 2017-11-29aRagexeRE
#if PACKETVER == 20171129
- packet(0x02c4,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x035f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0363,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0365,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0862,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x086d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0876,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0878,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x08a5,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0940,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x094b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0953,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0966,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x02c4,clif->pChangeDir,2,4);
+ packet(0x035f,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0363,clif->pFriendsListAdd,2);
+ packet(0x0365,clif->pDropItem,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pPartyInvite2,2);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0862,clif->pTakeItem,2);
+ packet(0x086d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0876,clif->pDull/*,XXX*/);
+ packet(0x0878,clif->pStoragePassword,0);
+ packet(0x088a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089c,clif->pHomMenu,2,4);
+ packet(0x08a5,clif->pMoveToKafra,2,4);
+ packet(0x0940,clif->pTickSend,2);
+ packet(0x094b,clif->pDull/*,XXX*/);
+ packet(0x0953,clif->pMoveFromKafra,2,4);
+ packet(0x0966,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-12-06aRagexeRE
#if PACKETVER == 20171206
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0867,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x086a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x086e,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0885,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0888,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0897,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x089d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08a2,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x08a4,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0923,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x092e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0936,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0942,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0958,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0961,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0867,clif->pDropItem,2,4);
+ packet(0x086a,clif->pDull/*,XXX*/);
+ packet(0x086e,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0885,clif->pTickSend,2);
+ packet(0x0888,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0897,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x089d,clif->pStoragePassword,0);
+ packet(0x08a2,clif->pPartyInvite2,2);
+ packet(0x08a4,clif->pMoveFromKafra,2,4);
+ packet(0x091d,clif->pFriendsListAdd,2);
+ packet(0x0923,clif->pMoveToKafra,2,4);
+ packet(0x092e,clif->pDull/*,XXX*/);
+ packet(0x0936,clif->pChangeDir,2,4);
+ packet(0x0942,clif->pHomMenu,2,4);
+ packet(0x0958,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0961,clif->pTakeItem,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-12-13bRagexeRE
#if PACKETVER == 20171213
- packet(0x0202,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0860,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0881,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0890,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0957,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pPartyInvite2,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pFriendsListAdd,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0860,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0881,clif->pDull/*,XXX*/);
+ packet(0x0890,clif->pStoragePassword,0);
+ packet(0x091a,clif->pChangeDir,2,4);
+ packet(0x0957,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-12-20aRagexeRE
#if PACKETVER == 20171220
- packet(0x0281,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0366,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0369,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0436,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0437,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x085e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0861,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0872,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0873,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0880,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0882,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0885,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0899,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x089e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a7,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x091b,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091e,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0924,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0929,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0933,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x093e,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0941,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0946,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x094e,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0951,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0957,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0964,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
+ packet(0x0281,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0366,clif->pMoveFromKafra,2,4);
+ packet(0x0369,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0436,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0437,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x085e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0861,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0872,clif->pUseSkillToId,2,4,6);
+ packet(0x0873,clif->pGetCharNameRequest,2);
+ packet(0x0880,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0882,clif->pTickSend,2);
+ packet(0x0885,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0899,clif->pStoragePassword,0);
+ packet(0x089e,clif->pWalkToXY,2);
+ packet(0x08a7,clif->pReqCloseBuyingStore,0);
+ packet(0x091b,clif->pTakeItem,2);
+ packet(0x091e,clif->pSolveCharName,2);
+ packet(0x0924,clif->pMoveToKafra,2,4);
+ packet(0x0929,clif->pDropItem,2,4);
+ packet(0x0933,clif->pChangeDir,2,4);
+ packet(0x093e,clif->pActionRequest,2,6);
+ packet(0x0941,clif->pReqClickBuyingStore,2);
+ packet(0x0946,clif->pDull/*,XXX*/);
+ packet(0x094e,clif->pDull/*,XXX*/);
+ packet(0x0951,clif->pHomMenu,2,4);
+ packet(0x0957,clif->pFriendsListAdd,2);
+ packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0964,clif->pPartyInvite2,2);
#endif
// 2017-12-27aRagexeRE
#if PACKETVER == 20171227
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x087d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0888,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x088a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a0,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a5,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x092c,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x092e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0938,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0945,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0946,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0969,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x096a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pActionRequest,2,6);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pChangeDir,2,4);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pGetCharNameRequest,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x087d,clif->pStoragePassword,0);
+ packet(0x0888,clif->pMoveFromKafra,2,4);
+ packet(0x088a,clif->pDull/*,XXX*/);
+ packet(0x088d,clif->pTakeItem,2);
+ packet(0x08a0,clif->pMoveToKafra,2,4);
+ packet(0x08a5,clif->pHomMenu,2,4);
+ packet(0x092c,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x092e,clif->pDull/*,XXX*/);
+ packet(0x0938,clif->pPartyInvite2,2);
+ packet(0x0945,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0946,clif->pFriendsListAdd,2);
+ packet(0x0969,clif->pDropItem,2,4);
+ packet(0x096a,clif->pPartyBookingRegisterReq,2,4);
#endif
// 2018-01-03aRagexeRE, 2018-01-03bRagexeRE
#if PACKETVER == 20180103
- packet(0x02c4,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0363,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0865,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x086b,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0872,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0876,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0879,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x088e,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0899,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x089f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x08a9,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ab,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x08ac,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x091d,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0922,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0926,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0927,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x092c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0935,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0938,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0941,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0946,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0948,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094e,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x095d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x095f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
+ packet(0x02c4,clif->pMoveToKafra,2,4);
+ packet(0x0363,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0865,clif->pDull/*,XXX*/);
+ packet(0x086b,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0872,clif->pReqClickBuyingStore,2);
+ packet(0x0876,clif->pTickSend,2);
+ packet(0x0879,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x088e,clif->pReqCloseBuyingStore,0);
+ packet(0x0899,clif->pFriendsListAdd,2);
+ packet(0x089f,clif->pSolveCharName,2);
+ packet(0x08a9,clif->pChangeDir,2,4);
+ packet(0x08ab,clif->pGetCharNameRequest,2);
+ packet(0x08ac,clif->pItemListWindowSelected,2,4,8);
+ packet(0x091d,clif->pActionRequest,2,6);
+ packet(0x0922,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0926,clif->pDull/*,XXX*/);
+ packet(0x0927,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x092c,clif->pMoveFromKafra,2,4);
+ packet(0x0935,clif->pTakeItem,2);
+ packet(0x0938,clif->pUseSkillToId,2,4,6);
+ packet(0x0941,clif->pWalkToXY,2);
+ packet(0x0946,clif->pStoragePassword,0);
+ packet(0x0948,clif->pHomMenu,2,4);
+ packet(0x094e,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x095d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x095f,clif->pDropItem,2,4);
+ packet(0x0960,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
#endif
// 2018-01-17aRagexeRE
#if PACKETVER == 20180117
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0875,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0875,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2018-01-24bRagexeRE
#if PACKETVER == 20180124
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0802,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085f,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0868,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x086a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x086f,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x087a,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0888,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0890,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0919,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0940,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0946,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x094d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0958,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0961,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pMoveToKafra,2,4);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0802,clif->pDropItem,2,4);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085f,clif->pStoragePassword,0);
+ packet(0x0868,clif->pDull/*,XXX*/);
+ packet(0x086a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x086f,clif->pDull/*,XXX*/);
+ packet(0x087a,clif->pPartyInvite2,2);
+ packet(0x0888,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0890,clif->pMoveFromKafra,2,4);
+ packet(0x0919,clif->pFriendsListAdd,2);
+ packet(0x0940,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0946,clif->pItemListWindowSelected,2,4,8);
+ packet(0x094d,clif->pTakeItem,2);
+ packet(0x0958,clif->pChangeDir,2,4);
+ packet(0x0961,clif->pHomMenu,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2018-02-07bRagexeRE
#if PACKETVER == 20180207
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0360,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0870,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0881,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x092e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0940,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0950,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pReqClickBuyingStore,2);
+ packet(0x0360,clif->pDull/*,XXX*/);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0870,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0881,clif->pFriendsListAdd,2);
+ packet(0x092c,clif->pHomMenu,2,4);
+ packet(0x092e,clif->pChangeDir,2,4);
+ packet(0x0940,clif->pTickSend,2);
+ packet(0x0950,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2018-02-13aRagexeRE
#if PACKETVER == 20180213
- packet(0x0369,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0802,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0817,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x085a,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x086f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0874,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0875,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0878,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x087b,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0882,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x088c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0892,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0898,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x089c,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x08a3,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x08a5,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08a9,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08ad,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0917,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0922,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0924,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0926,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0933,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0936,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x093c,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0943,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0955,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x095a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0962,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
+ packet(0x0369,clif->pStoragePassword,0);
+ packet(0x0802,clif->pDropItem,2,4);
+ packet(0x0817,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x085a,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x086f,clif->pPartyInvite2,2);
+ packet(0x0874,clif->pTickSend,2);
+ packet(0x0875,clif->pMoveFromKafra,2,4);
+ packet(0x0878,clif->pChangeDir,2,4);
+ packet(0x087b,clif->pReqClickBuyingStore,2);
+ packet(0x0882,clif->pUseSkillToId,2,4,6);
+ packet(0x088c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0892,clif->pTakeItem,2);
+ packet(0x0898,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x089c,clif->pDull/*,XXX*/);
+ packet(0x08a3,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x08a5,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08a9,clif->pReqCloseBuyingStore,0);
+ packet(0x08ad,clif->pSolveCharName,2);
+ packet(0x0917,clif->pFriendsListAdd,2);
+ packet(0x0922,clif->pWalkToXY,2);
+ packet(0x0924,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0926,clif->pDull/*,XXX*/);
+ packet(0x0933,clif->pActionRequest,2,6);
+ packet(0x0936,clif->pSearchStoreInfoNextPage,0);
+ packet(0x093c,clif->pGetCharNameRequest,2);
+ packet(0x0943,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0955,clif->pMoveToKafra,2,4);
+ packet(0x095a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0962,clif->pHomMenu,2,4);
#endif
// 2018-02-21aRagexeRE, 2018-02-21bRagexeRE
#if PACKETVER == 20180221
- packet(0x0202,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0366,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0436,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0838,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0867,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086c,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x086f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0871,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0876,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0879,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x087d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0880,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0881,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0883,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x088f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0891,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0897,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0899,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x089d,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0917,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x091e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0929,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x093d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x094b,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x094e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0957,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0964,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x096a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
+ packet(0x0202,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0366,clif->pDull/*,XXX*/);
+ packet(0x0436,clif->pFriendsListAdd,2);
+ packet(0x0838,clif->pChangeDir,2,4);
+ packet(0x0867,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086c,clif->pReqClickBuyingStore,2);
+ packet(0x086f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0871,clif->pDropItem,2,4);
+ packet(0x0876,clif->pHomMenu,2,4);
+ packet(0x0879,clif->pMoveToKafra,2,4);
+ packet(0x087d,clif->pWalkToXY,2);
+ packet(0x0880,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0881,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0883,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x088f,clif->pSolveCharName,2);
+ packet(0x0891,clif->pDull/*,XXX*/);
+ packet(0x0897,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0899,clif->pSearchStoreInfoNextPage,0);
+ packet(0x089d,clif->pTickSend,2);
+ packet(0x0917,clif->pStoragePassword,0);
+ packet(0x091e,clif->pMoveFromKafra,2,4);
+ packet(0x0929,clif->pReqCloseBuyingStore,0);
+ packet(0x093d,clif->pPartyInvite2,2);
+ packet(0x094b,clif->pUseSkillToId,2,4,6);
+ packet(0x094d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x094e,clif->pTakeItem,2);
+ packet(0x0957,clif->pGetCharNameRequest,2);
+ packet(0x0964,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x096a,clif->pActionRequest,2,6);
#endif
// 2018-03-07bRagexeRE
#if PACKETVER == 20180307
- packet(0x0281,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x035f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0437,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x07e4,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0861,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0862,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0864,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x086c,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0870,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0872,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0877,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x088d,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0893,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x089b,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08a6,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x08aa,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08ab,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0917,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0920,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0937,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0939,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x093d,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0941,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0944,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0948,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0951,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0954,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0957,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0969,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
-#endif
-
-// 2018-03-21aRagexeRE, 2018-03-28bRagexeRE, 2018-04-04cRagexeRE, 2018-04-18bRagexeRE, 2018-04-25cRagexeRE, 2018-05-02bRagexeRE, 2018-05-02dRagexeRE, 2018-05-16cRagexeRE, 2018-05-23aRagexeRE, 2018-05-30bRagexeRE, 2018-05-30cRagexeRE, 2018-06-05bRagexeRE, 2018-06-12aRagexeRE, 2018-06-12bRagexeRE, 2018-06-20dRagexeRE, 2018-06-20eRagexeRE, 2018-06-21aRagexeRE
+ packet(0x0281,clif->pDull/*,XXX*/);
+ packet(0x035f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0437,clif->pDropItem,2,4);
+ packet(0x07e4,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0861,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0862,clif->pReqClickBuyingStore,2);
+ packet(0x0864,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x086c,clif->pTickSend,2);
+ packet(0x0870,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0872,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0877,clif->pWalkToXY,2);
+ packet(0x088d,clif->pMoveFromKafra,2,4);
+ packet(0x0893,clif->pUseSkillToId,2,4,6);
+ packet(0x089b,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08a6,clif->pSearchStoreInfoNextPage,0);
+ packet(0x08aa,clif->pFriendsListAdd,2);
+ packet(0x08ab,clif->pChangeDir,2,4);
+ packet(0x0917,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0920,clif->pMoveToKafra,2,4);
+ packet(0x0937,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0939,clif->pStoragePassword,0);
+ packet(0x093d,clif->pReqCloseBuyingStore,0);
+ packet(0x0941,clif->pGetCharNameRequest,2);
+ packet(0x0944,clif->pHomMenu,2,4);
+ packet(0x0948,clif->pPartyInvite2,2);
+ packet(0x0951,clif->pDull/*,XXX*/);
+ packet(0x0954,clif->pTakeItem,2);
+ packet(0x0957,clif->pSolveCharName,2);
+ packet(0x0969,clif->pActionRequest,2,6);
+#endif
+
+// 2018-03-21aRagexeRE, 2018-03-28bRagexeRE, 2018-04-04cRagexeRE, 2018-04-18bRagexeRE, 2018-04-25cRagexeRE, 2018-05-02bRagexeRE, 2018-05-02dRagexeRE, 2018-05-16cRagexeRE, 2018-05-23aRagexeRE, 2018-05-30bRagexeRE, 2018-05-30cRagexeRE, 2018-06-05bRagexeRE, 2018-06-12aRagexeRE, 2018-06-12bRagexeRE, 2018-06-20dRagexeRE, 2018-06-20eRagexeRE, 2018-06-21aRagexeRE, 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, 2019-09-04bRagexeRE, 2019-09-18cRagexeRE, 2019-09-25aRagexeRE, 2019-09-25bRagexeRE, 2019-10-02bRagexeRE, 2019-10-02dRagexeRE, 2019-10-02dRagexeRE_2, 2019-10-16fRagexeRE, 2019-10-16gRagexeRE, 2019-10-23aRagexeRE, 2019-10-30bRagexeRE, 2019-11-06bRagexeRE, 2019-11-07aRagexeRE, 2019-11-13eRagexeRE, 2019-11-20cRagexeRE, 2019-11-27aRagexeRE, 2019-12-04aRagexeRE, 2019-12-04bRagexeRE, 2019-12-04cRagexeRE, 2019-12-11fRagexeRE, 2019-12-18bRagexeRE, 2019-12-24aRagexeRE, 2019-12-24bRagexeRE, 2020-01-08bRagexeRE, 2020-01-22cRagexeRE, 2020-02-05aRagexeRE, 2020-02-12aRagexeRE, 2020-02-19eRagexeRE, 2020-03-04aRagexeRE, 2020-07-09_sakaRagexeRE
#if PACKETVER == 20180321 || \
PACKETVER == 20180328 || \
PACKETVER == 20180404 || \
@@ -9631,40 +9631,8 @@
PACKETVER == 20180605 || \
PACKETVER == 20180612 || \
PACKETVER == 20180620 || \
- PACKETVER == 20180621
- 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 // 90
- 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 // 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, 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 == 20180621 || \
+ PACKETVER == 20180704 || \
PACKETVER == 20180711 || \
PACKETVER == 20180718 || \
PACKETVER == 20180801 || \
@@ -9712,40 +9680,8 @@
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
- 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 // 90
- 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
-
-// 2019-09-04bRagexeRE, 2019-09-18cRagexeRE, 2019-09-25aRagexeRE, 2019-09-25bRagexeRE, 2019-10-02bRagexeRE, 2019-10-02dRagexeRE, 2019-10-02dRagexeRE_2, 2019-10-16fRagexeRE, 2019-10-16gRagexeRE, 2019-10-23aRagexeRE, 2019-10-30bRagexeRE, 2019-11-06bRagexeRE, 2019-11-07aRagexeRE, 2019-11-13eRagexeRE, 2019-11-20cRagexeRE, 2019-11-27aRagexeRE, 2019-12-04aRagexeRE, 2019-12-04bRagexeRE, 2019-12-04cRagexeRE, 2019-12-11fRagexeRE, 2019-12-18bRagexeRE, 2019-12-24aRagexeRE, 2019-12-24bRagexeRE, 2020-01-08bRagexeRE, 2020-01-22cRagexeRE, 2020-02-05aRagexeRE
-#if PACKETVER == 20190904 || \
+ PACKETVER == 20190828 || \
+ PACKETVER == 20190904 || \
PACKETVER == 20190918 || \
PACKETVER == 20190925 || \
PACKETVER == 20191002 || \
@@ -9763,36 +9699,40 @@
PACKETVER == 20191224 || \
PACKETVER == 20200108 || \
PACKETVER == 20200122 || \
- PACKETVER == 20200205
- 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
+ PACKETVER == 20200205 || \
+ PACKETVER == 20200212 || \
+ PACKETVER == 20200219 || \
+ PACKETVER == 20200304 || \
+ PACKETVER >= 20200709
+ packet(0x0202,clif->pFriendsListAdd,2);
+ packet(0x022d,clif->pHomMenu,2,4);
+ packet(0x023b,clif->pStoragePassword,0);
+ packet(0x0281,clif->pDull/*,XXX*/);
+ packet(0x02c4,clif->pPartyInvite2,2);
+ packet(0x035f,clif->pWalkToXY,2);
+ packet(0x0360,clif->pTickSend,2);
+ packet(0x0361,clif->pChangeDir,2,4);
+ packet(0x0362,clif->pTakeItem,2);
+ packet(0x0363,clif->pDropItem,2,4);
+ packet(0x0364,clif->pMoveToKafra,2,4);
+ packet(0x0365,clif->pMoveFromKafra,2,4);
+ packet(0x0366,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pGetCharNameRequest,2);
+ packet(0x0369,clif->pSolveCharName,2);
+ packet(0x0436,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0437,clif->pActionRequest,2,6);
+ packet(0x0438,clif->pUseSkillToId,2,4,6);
+ packet(0x07e4,clif->pItemListWindowSelected,2,4,8);
+ packet(0x07ec,clif->pDull/*,XXX*/);
+ packet(0x0802,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0811,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0815,clif->pReqCloseBuyingStore,0);
+ packet(0x0817,clif->pReqClickBuyingStore,2);
+ packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0835,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0838,clif->pSearchStoreInfoNextPage,0);
+ packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10);
#endif
diff --git a/src/map/packets_shuffle_zero.h b/src/map/packets_shuffle_zero.h
index 602264a8f..5ff03b264 100644
--- a/src/map/packets_shuffle_zero.h
+++ b/src/map/packets_shuffle_zero.h
@@ -2,8 +2,8 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2020 Hercules Dev Team
- * Copyright (C) 2018-2020 Andrei Karas (4144)
+ * Copyright (C) 2013-2020 Hercules Dev Team
+ * Copyright (C) 2018-2020 Andrei Karas (4144)
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -37,7 +37,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
+// 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, 2019-09-25_3aRagexe_zero, 2019-09-25_5aRagexe_zero, 2019-10-08_2aRagexe_zero, 2019-10-23_2aRagexe_zero, 2019-11-06aRagexe_zero, 2019-11-13aRagexe_zero, 2019-11-27_2aRagexe_zero, 2019-11-27aRagexe_zero, 2019-12-04aRagexe_zero, 2019-12-11_2aRagexe_zero, 2019-12-24_4aRagexe_zero, 2019-12-24_5aRagexe_zero, 2020-01-15_2aRagexe_zero, 2020-01-15aRagexe_zero, 2020-01-29_2aRagexe_zero, 2020-01-29aRagexe_zero, 2020-02-12aRagexe_zero, 2020-02-26aRagexe_zero, 2020-02-26bRagexe_zero, 2020-03-04aRagexe_zero, 2020-03-18_2aRagexe_zero, 2020-04-01_2aRagexe_zero, 2020-04-14bRagexe_zero, 2020-05-06aRagexe_zero, 2020-05-20_5aRagexe_zero, 2020-06-03_2aRagexe_zero, 2020-06-17aRagexe_zero, 2020-07-01_2aRagexe_zero, 2020-07-01aRagexe_zero
#if PACKETVER == 20171018 || \
PACKETVER == 20171019 || \
PACKETVER == 20171023 || \
@@ -69,238 +69,292 @@
PACKETVER == 20180919 || \
PACKETVER == 20180928 || \
PACKETVER == 20181010 || \
- PACKETVER == 20181024
- 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 // 90
- 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 // 12
+ PACKETVER == 20181024 || \
+ PACKETVER == 20181114 || \
+ PACKETVER == 20181120 || \
+ PACKETVER == 20181128 || \
+ PACKETVER == 20181212 || \
+ PACKETVER == 20181219 || \
+ PACKETVER == 20181226 || \
+ PACKETVER == 20190116 || \
+ PACKETVER == 20190117 || \
+ PACKETVER == 20190130 || \
+ PACKETVER == 20190213 || \
+ PACKETVER == 20190220 || \
+ PACKETVER == 20190227 || \
+ PACKETVER == 20190313 || \
+ PACKETVER == 20190327 || \
+ PACKETVER == 20190403 || \
+ PACKETVER == 20190410 || \
+ PACKETVER == 20190424 || \
+ PACKETVER == 20190502 || \
+ PACKETVER == 20190508 || \
+ PACKETVER == 20190515 || \
+ PACKETVER == 20190529 || \
+ PACKETVER == 20190530 || \
+ PACKETVER == 20190605 || \
+ PACKETVER == 20190626 || \
+ PACKETVER == 20190709 || \
+ PACKETVER == 20190710 || \
+ PACKETVER == 20190717 || \
+ PACKETVER == 20190724 || \
+ PACKETVER == 20190814 || \
+ PACKETVER == 20190828 || \
+ PACKETVER == 20190911 || \
+ PACKETVER == 20190918 || \
+ PACKETVER == 20190925 || \
+ PACKETVER == 20191008 || \
+ PACKETVER == 20191023 || \
+ PACKETVER == 20191106 || \
+ PACKETVER == 20191113 || \
+ PACKETVER == 20191127 || \
+ PACKETVER == 20191204 || \
+ PACKETVER == 20191211 || \
+ PACKETVER == 20191224 || \
+ PACKETVER == 20200115 || \
+ PACKETVER == 20200129 || \
+ PACKETVER == 20200212 || \
+ PACKETVER == 20200226 || \
+ PACKETVER == 20200304 || \
+ PACKETVER == 20200318 || \
+ PACKETVER == 20200401 || \
+ PACKETVER == 20200414 || \
+ PACKETVER == 20200506 || \
+ PACKETVER == 20200520 || \
+ PACKETVER == 20200603 || \
+ PACKETVER == 20200617 || \
+ PACKETVER >= 20200701
+ packet(0x0202,clif->pFriendsListAdd,2);
+ packet(0x022d,clif->pHomMenu,2,4);
+ packet(0x023b,clif->pStoragePassword,0);
+ packet(0x0281,clif->pDull/*,XXX*/);
+ packet(0x02c4,clif->pPartyInvite2,2);
+ packet(0x035f,clif->pWalkToXY,2);
+ packet(0x0360,clif->pTickSend,2);
+ packet(0x0361,clif->pChangeDir,2,4);
+ packet(0x0362,clif->pTakeItem,2);
+ packet(0x0363,clif->pDropItem,2,4);
+ packet(0x0364,clif->pMoveToKafra,2,4);
+ packet(0x0365,clif->pMoveFromKafra,2,4);
+ packet(0x0366,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pGetCharNameRequest,2);
+ packet(0x0369,clif->pSolveCharName,2);
+ packet(0x0436,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0437,clif->pActionRequest,2,6);
+ packet(0x0438,clif->pUseSkillToId,2,4,6);
+ packet(0x07e4,clif->pItemListWindowSelected,2,4,8);
+ packet(0x07ec,clif->pDull/*,XXX*/);
+ packet(0x0802,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0811,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0815,clif->pReqCloseBuyingStore,0);
+ packet(0x0817,clif->pReqClickBuyingStore,2);
+ packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0835,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0838,clif->pSearchStoreInfoNextPage,0);
+ packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10);
#endif
// 2017-11-15aRagexe_zero, 2017-11-15bRagexe_zero, 2017-11-16aRagexe_zero, 2017-11-17aRagexe_zero
#if PACKETVER == 20171115 || \
PACKETVER == 20171116 || \
PACKETVER == 20171117
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0860,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0881,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x091c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0922,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0959,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0966,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0860,clif->pDull/*,XXX*/);
+ packet(0x0881,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x091c,clif->pHomMenu,2,4);
+ packet(0x0922,clif->pStoragePassword,0);
+ packet(0x0959,clif->pChangeDir,2,4);
+ packet(0x0966,clif->pFriendsListAdd,2);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-11-21aRagexe_zero, 2017-11-22aRagexe_zero
#if PACKETVER == 20171121 || \
PACKETVER == 20171122
- packet(0x0202,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x022d,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0866,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0889,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0892,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x089e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08ad,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0918,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x091f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0928,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0943,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0950,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pStoragePassword,0);
+ packet(0x022d,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pHomMenu,2,4);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0866,clif->pMoveToKafra,2,4);
+ packet(0x0889,clif->pMoveFromKafra,2,4);
+ packet(0x0892,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x089e,clif->pChangeDir,2,4);
+ packet(0x08ad,clif->pPartyInvite2,2);
+ packet(0x0918,clif->pTakeItem,2);
+ packet(0x091f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0928,clif->pFriendsListAdd,2);
+ packet(0x0943,clif->pDull/*,XXX*/);
+ packet(0x0950,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-11-23dRagexe_zero
#if PACKETVER == 20171123
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0367,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0860,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0876,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0882,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x088c,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0896,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x089e,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x08a8,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x092b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0930,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0935,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0947,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0960,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0367,clif->pHomMenu,2,4);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085f,clif->pDropItem,2,4);
+ packet(0x0860,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0876,clif->pDull/*,XXX*/);
+ packet(0x0882,clif->pItemListWindowSelected,2,4,8);
+ packet(0x088c,clif->pPartyInvite2,2);
+ packet(0x0896,clif->pChangeDir,2,4);
+ packet(0x089e,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x08a8,clif->pFriendsListAdd,2);
+ packet(0x092b,clif->pMoveToKafra,2,4);
+ packet(0x0930,clif->pTakeItem,2);
+ packet(0x0935,clif->pMoveFromKafra,2,4);
+ packet(0x0947,clif->pStoragePassword,0);
+ packet(0x0960,clif->pDull/*,XXX*/);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-11-27aRagexe_zero, 2017-11-27cRagexe_zero, 2017-11-28aRagexe_zero
#if PACKETVER == 20171127 || \
PACKETVER == 20171128
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0893,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0893,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-11-30bRagexe_zero
#if PACKETVER == 20171130
- packet(0x0361,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0864,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x086f,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0871,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0872,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0875,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0878,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0881,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0884,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0886,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0887,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x088b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0894,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0899,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x08a0,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x08a7,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0925,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0928,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0930,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0931,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0935,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093a,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0947,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x094c,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x095b,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x095f,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0960,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0965,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
+ packet(0x0361,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0864,clif->pGetCharNameRequest,2);
+ packet(0x086f,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0871,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0872,clif->pReqClickBuyingStore,2);
+ packet(0x0875,clif->pTakeItem,2);
+ packet(0x0878,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0881,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0884,clif->pDropItem,2,4);
+ packet(0x0886,clif->pReqCloseBuyingStore,0);
+ packet(0x0887,clif->pStoragePassword,0);
+ packet(0x088b,clif->pMoveToKafra,2,4);
+ packet(0x0894,clif->pWalkToXY,2);
+ packet(0x0899,clif->pDull/*,XXX*/);
+ packet(0x08a0,clif->pChangeDir,2,4);
+ packet(0x08a7,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0925,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0928,clif->pDull/*,XXX*/);
+ packet(0x0930,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0931,clif->pFriendsListAdd,2);
+ packet(0x0935,clif->pMoveFromKafra,2,4);
+ packet(0x093a,clif->pActionRequest,2,6);
+ packet(0x0947,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x094c,clif->pHomMenu,2,4);
+ packet(0x094f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x095b,clif->pTickSend,2);
+ packet(0x095f,clif->pPartyInvite2,2);
+ packet(0x0960,clif->pSolveCharName,2);
+ packet(0x0965,clif->pUseSkillToId,2,4,6);
#endif
// 2017-12-04bRagexe_zero
#if PACKETVER == 20171204
- packet(0x0281,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x085b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x086f,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x087d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0885,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0887,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0892,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0896,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x08aa,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0917,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0921,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0924,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0937,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0960,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0281,clif->pTakeItem,2);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x085b,clif->pDull/*,XXX*/);
+ packet(0x086f,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x087d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0885,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0887,clif->pChangeDir,2,4);
+ packet(0x0892,clif->pDull/*,XXX*/);
+ packet(0x0896,clif->pStoragePassword,0);
+ packet(0x08aa,clif->pPartyInvite2,2);
+ packet(0x0917,clif->pMoveFromKafra,2,4);
+ packet(0x091b,clif->pFriendsListAdd,2);
+ packet(0x0921,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0924,clif->pHomMenu,2,4);
+ packet(0x0937,clif->pMoveToKafra,2,4);
+ packet(0x0960,clif->pDropItem,2,4);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2017-12-06aRagexe_zero, 2017-12-06bRagexe_zero, 2017-12-06cRagexe_zero, 2017-12-06dRagexe_zero, 2017-12-08aRagexe_zero, 2017-12-08cRagexe_zero, 2017-12-08dRagexe_zero, 2017-12-09bRagexe_zero, 2017-12-09cRagexe_zero, 2017-12-10aRagexe_zero, 2017-12-11bRagexe_zero, 2017-12-12aRagexe_zero, 2017-12-13aRagexe_zero, 2017-12-13bRagexe_zero, 2017-12-13cRagexe_zero
@@ -311,542 +365,435 @@
PACKETVER == 20171211 || \
PACKETVER == 20171212 || \
PACKETVER == 20171213
- packet(0x0281,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0366,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0436,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0835,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x083c,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0860,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0862,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0864,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0870,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0878,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x087a,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x087b,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0885,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x088d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0893,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0897,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x089e,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08a4,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x08ac,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0920,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0934,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0936,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x093a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0940,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0941,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0959,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x095c,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x095f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
+ packet(0x0281,clif->pUseSkillToId,2,4,6);
+ packet(0x0366,clif->pDropItem,2,4);
+ packet(0x0436,clif->pReqClickBuyingStore,2);
+ packet(0x0835,clif->pTakeItem,2);
+ packet(0x083c,clif->pDull/*,XXX*/);
+ packet(0x0860,clif->pDull/*,XXX*/);
+ packet(0x0862,clif->pChangeDir,2,4);
+ packet(0x0864,clif->pWalkToXY,2);
+ packet(0x0870,clif->pMoveToKafra,2,4);
+ packet(0x0878,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x087a,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x087b,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0885,clif->pSolveCharName,2);
+ packet(0x088d,clif->pPartyInvite2,2);
+ packet(0x0893,clif->pFriendsListAdd,2);
+ packet(0x0897,clif->pHomMenu,2,4);
+ packet(0x089e,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08a4,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x08ac,clif->pActionRequest,2,6);
+ packet(0x0920,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0934,clif->pReqCloseBuyingStore,0);
+ packet(0x0936,clif->pMoveFromKafra,2,4);
+ packet(0x093a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0940,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0941,clif->pGetCharNameRequest,2);
+ packet(0x0959,clif->pStoragePassword,0);
+ packet(0x095b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x095c,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x095f,clif->pTickSend,2);
#endif
// 2017-12-14cRagexe_zero
#if PACKETVER == 20171214
- packet(0x023b,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x02c4,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0438,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x085b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x085e,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0862,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0864,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x086a,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0871,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0873,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0886,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x088b,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088c,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0892,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0894,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0897,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x08a3,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x08a5,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x08ac,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0933,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x094a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x094d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x094f,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0951,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x095a,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x095b,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0960,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0969,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x096a,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x023b,clif->pSearchStoreInfoNextPage,0);
+ packet(0x02c4,clif->pDropItem,2,4);
+ packet(0x0438,clif->pGetCharNameRequest,2);
+ packet(0x085b,clif->pStoragePassword,0);
+ packet(0x085e,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0862,clif->pSolveCharName,2);
+ packet(0x0864,clif->pDull/*,XXX*/);
+ packet(0x086a,clif->pWalkToXY,2);
+ packet(0x0871,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0873,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0886,clif->pReqClickBuyingStore,2);
+ packet(0x088b,clif->pDull/*,XXX*/);
+ packet(0x088c,clif->pMoveToKafra,2,4);
+ packet(0x0892,clif->pUseSkillToId,2,4,6);
+ packet(0x0894,clif->pTakeItem,2);
+ packet(0x0897,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x08a3,clif->pFriendsListAdd,2);
+ packet(0x08a5,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x08ac,clif->pReqCloseBuyingStore,0);
+ packet(0x0933,clif->pActionRequest,2,6);
+ packet(0x094a,clif->pChangeDir,2,4);
+ packet(0x094d,clif->pHomMenu,2,4);
+ packet(0x094f,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0951,clif->pPartyInvite2,2);
+ packet(0x095a,clif->pMoveFromKafra,2,4);
+ packet(0x095b,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0960,clif->pTickSend,2);
+ packet(0x0969,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x096a,clif->pUseSkillToPos,2,4,6,8);
#endif
// 2017-12-20aRagexe_zero, 2017-12-21aRagexe_zero, 2017-12-21bRagexe_zero
#if PACKETVER == 20171220 || \
PACKETVER == 20171221
- packet(0x022d,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0281,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0438,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x07ec,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0819,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0835,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0838,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x085f,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0867,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x086c,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0872,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087a,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x087e,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0899,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x089b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x089c,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08a3,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a5,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x08ad,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x091f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0921,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x092d,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x092e,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0932,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0934,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0937,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x094d,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x095b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x022d,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0281,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0438,clif->pGetCharNameRequest,2);
+ packet(0x07ec,clif->pReqClickBuyingStore,2);
+ packet(0x0819,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0835,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0838,clif->pTickSend,2);
+ packet(0x085f,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0867,clif->pSolveCharName,2);
+ packet(0x086c,clif->pTakeItem,2);
+ packet(0x0872,clif->pMoveFromKafra,2,4);
+ packet(0x087a,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x087e,clif->pDull/*,XXX*/);
+ packet(0x0899,clif->pWalkToXY,2);
+ packet(0x089b,clif->pDull/*,XXX*/);
+ packet(0x089c,clif->pReqCloseBuyingStore,0);
+ packet(0x08a3,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a5,clif->pDropItem,2,4);
+ packet(0x08ad,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x091f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0921,clif->pHomMenu,2,4);
+ packet(0x092d,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x092e,clif->pFriendsListAdd,2);
+ packet(0x0932,clif->pPartyInvite2,2);
+ packet(0x0934,clif->pMoveToKafra,2,4);
+ packet(0x0937,clif->pActionRequest,2,6);
+ packet(0x094d,clif->pUseSkillToId,2,4,6);
+ packet(0x095b,clif->pStoragePassword,0);
+ packet(0x096a,clif->pChangeDir,2,4);
#endif
// 2017-12-27bRagexe_zero, 2017-12-29aRagexe_zero
#if PACKETVER == 20171227 || \
PACKETVER == 20171229
- packet(0x02c4,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0860,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x086c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0871,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0872,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0874,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0876,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0877,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0878,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x087b,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0885,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0889,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x088b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0894,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x089f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x091c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0920,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0925,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092d,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0930,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0939,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x093e,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0941,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0945,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0946,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x094b,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x095e,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0967,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0968,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
+ packet(0x02c4,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0860,clif->pChangeDir,2,4);
+ packet(0x086c,clif->pActionRequest,2,6);
+ packet(0x0871,clif->pSolveCharName,2);
+ packet(0x0872,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0874,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0876,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0877,clif->pDull/*,XXX*/);
+ packet(0x0878,clif->pTakeItem,2);
+ packet(0x087b,clif->pMoveToKafra,2,4);
+ packet(0x0885,clif->pMoveFromKafra,2,4);
+ packet(0x0889,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x088b,clif->pReqCloseBuyingStore,0);
+ packet(0x0894,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x089f,clif->pReqClickBuyingStore,2);
+ packet(0x091c,clif->pDropItem,2,4);
+ packet(0x0920,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0925,clif->pDull/*,XXX*/);
+ packet(0x092d,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0930,clif->pStoragePassword,0);
+ packet(0x0939,clif->pTickSend,2);
+ packet(0x093e,clif->pGetCharNameRequest,2);
+ packet(0x0941,clif->pFriendsListAdd,2);
+ packet(0x0945,clif->pPartyInvite2,2);
+ packet(0x0946,clif->pWalkToXY,2);
+ packet(0x094b,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x095e,clif->pHomMenu,2,4);
+ packet(0x0967,clif->pUseSkillToId,2,4,6);
+ packet(0x0968,clif->pItemListWindowSelected,2,4,8);
#endif
// 2018-01-03aRagexe_zero
#if PACKETVER == 20180103
- packet(0x035f,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0360,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x07e4,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x083c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0860,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0866,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x086d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0871,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0872,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0874,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x087b,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0885,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0888,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0890,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0896,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x089d,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x08a6,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x091e,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0924,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0938,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x093b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0956,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0958,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x095b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x095d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0964,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0966,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x096a,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
+ packet(0x035f,clif->pChangeDir,2,4);
+ packet(0x0360,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x07e4,clif->pWalkToXY,2);
+ packet(0x083c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0860,clif->pHomMenu,2,4);
+ packet(0x0866,clif->pItemListWindowSelected,2,4,8);
+ packet(0x086d,clif->pFriendsListAdd,2);
+ packet(0x0871,clif->pTickSend,2);
+ packet(0x0872,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0874,clif->pSearchStoreInfoNextPage,0);
+ packet(0x087b,clif->pDull/*,XXX*/);
+ packet(0x0885,clif->pReqCloseBuyingStore,0);
+ packet(0x0888,clif->pActionRequest,2,6);
+ packet(0x0890,clif->pDropItem,2,4);
+ packet(0x0896,clif->pUseSkillToId,2,4,6);
+ packet(0x089d,clif->pMoveToKafra,2,4);
+ packet(0x08a6,clif->pGetCharNameRequest,2);
+ packet(0x091e,clif->pTakeItem,2);
+ packet(0x0924,clif->pDull/*,XXX*/);
+ packet(0x0938,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x093b,clif->pPartyInvite2,2);
+ packet(0x0956,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0958,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x095b,clif->pStoragePassword,0);
+ packet(0x095d,clif->pSolveCharName,2);
+ packet(0x0964,clif->pReqClickBuyingStore,2);
+ packet(0x0966,clif->pMoveFromKafra,2,4);
+ packet(0x096a,clif->pSearchStoreInfoListItemClick,2,6,10);
#endif
// 2018-01-17aRagexe_zero
#if PACKETVER == 20180117
- packet(0x0361,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0364,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0438,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x07e4,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x083c,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0866,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x086e,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086f,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x087d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0881,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0884,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0886,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0890,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0891,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0893,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0899,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x089d,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x089e,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0919,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x091c,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x091f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0921,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0928,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0929,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x092d,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0933,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0946,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x095e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0963,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
+ packet(0x0361,clif->pPartyInvite2,2);
+ packet(0x0364,clif->pSolveCharName,2);
+ packet(0x0438,clif->pDull/*,XXX*/);
+ packet(0x07e4,clif->pStoragePassword,0);
+ packet(0x083c,clif->pDropItem,2,4);
+ packet(0x0866,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x086e,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086f,clif->pReqClickBuyingStore,2);
+ packet(0x087d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0881,clif->pUseSkillToId,2,4,6);
+ packet(0x0884,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0886,clif->pTakeItem,2);
+ packet(0x0890,clif->pMoveToKafra,2,4);
+ packet(0x0891,clif->pGetCharNameRequest,2);
+ packet(0x0893,clif->pActionRequest,2,6);
+ packet(0x0899,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x089d,clif->pItemListWindowSelected,2,4,8);
+ packet(0x089e,clif->pChangeDir,2,4);
+ packet(0x0919,clif->pTickSend,2);
+ packet(0x091c,clif->pMoveFromKafra,2,4);
+ packet(0x091f,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0921,clif->pWalkToXY,2);
+ packet(0x0928,clif->pReqCloseBuyingStore,0);
+ packet(0x0929,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x092d,clif->pDull/*,XXX*/);
+ packet(0x0933,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0946,clif->pFriendsListAdd,2);
+ packet(0x095e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0963,clif->pHomMenu,2,4);
#endif
// 2018-01-31dRagexe_zero
#if PACKETVER == 20180131
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0367,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0940,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0367,clif->pStoragePassword,0);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0940,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2018-02-07bRagexe_zero
#if PACKETVER == 20180207
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0967,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0967,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2018-02-13aRagexe_zero
#if PACKETVER == 20180213
- packet(0x022d,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x02c4,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x035f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0361,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0802,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0815,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0838,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x085a,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x085d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0868,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x087b,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0882,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0887,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0888,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x088a,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x088e,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0899,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0917,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x091d,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0922,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0930,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0941,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0942,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0947,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x094d,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0958,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x095b,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x095c,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0967,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x022d,clif->pChangeDir,2,4);
+ packet(0x02c4,clif->pMoveToKafra,2,4);
+ packet(0x035f,clif->pDropItem,2,4);
+ packet(0x0361,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0802,clif->pTickSend,2);
+ packet(0x0815,clif->pUseSkillToId,2,4,6);
+ packet(0x0838,clif->pSearchStoreInfoNextPage,0);
+ packet(0x085a,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x085d,clif->pHomMenu,2,4);
+ packet(0x0868,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x087b,clif->pGetCharNameRequest,2);
+ packet(0x0882,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0887,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0888,clif->pSolveCharName,2);
+ packet(0x088a,clif->pDull/*,XXX*/);
+ packet(0x088e,clif->pReqClickBuyingStore,2);
+ packet(0x0899,clif->pFriendsListAdd,2);
+ packet(0x0917,clif->pActionRequest,2,6);
+ packet(0x091d,clif->pWalkToXY,2);
+ packet(0x0922,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0930,clif->pDull/*,XXX*/);
+ packet(0x0941,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0942,clif->pMoveFromKafra,2,4);
+ packet(0x0947,clif->pTakeItem,2);
+ packet(0x094d,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0958,clif->pPartyInvite2,2);
+ packet(0x095b,clif->pReqCloseBuyingStore,0);
+ packet(0x095c,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0967,clif->pStoragePassword,0);
#endif
// 2018-02-21aRagexe_zero
#if PACKETVER == 20180221
- packet(0x02c4,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0362,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0364,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x0438,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x0817,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x085b,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x086a,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0878,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0880,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0884,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x088d,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0892,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0895,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x08a1,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x08a3,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x091b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0921,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0923,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x092d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0932,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x093b,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x093d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x093e,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0942,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0951,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0952,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0958,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0959,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x095d,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x02c4,clif->pTickSend,2);
+ packet(0x0362,clif->pGetCharNameRequest,2);
+ packet(0x0364,clif->pChangeDir,2,4);
+ packet(0x0438,clif->pItemListWindowSelected,2,4,8);
+ packet(0x0817,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x085b,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x086a,clif->pDull/*,XXX*/);
+ packet(0x0878,clif->pReqCloseBuyingStore,0);
+ packet(0x0880,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0884,clif->pSearchStoreInfoNextPage,0);
+ packet(0x088d,clif->pSolveCharName,2);
+ packet(0x0892,clif->pDropItem,2,4);
+ packet(0x0895,clif->pReqClickBuyingStore,2);
+ packet(0x08a1,clif->pWalkToXY,2);
+ packet(0x08a3,clif->pUseSkillToId,2,4,6);
+ packet(0x091b,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0921,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0923,clif->pHomMenu,2,4);
+ packet(0x092d,clif->pFriendsListAdd,2);
+ packet(0x0932,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x093b,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x093d,clif->pPartyInvite2,2);
+ packet(0x093e,clif->pMoveFromKafra,2,4);
+ packet(0x0942,clif->pStoragePassword,0);
+ packet(0x0951,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0952,clif->pDull/*,XXX*/);
+ packet(0x0958,clif->pActionRequest,2,6);
+ packet(0x0959,clif->pMoveToKafra,2,4);
+ packet(0x095d,clif->pTakeItem,2);
#endif
// 2018-02-28bRagexe_zero, 2018-03-07aRagexe_zero, 2018-03-09aRagexe_zero
#if PACKETVER == 20180228 || \
PACKETVER == 20180307 || \
PACKETVER == 20180309
- packet(0x0202,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x022d,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x023b,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0281,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x035f,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0360,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x0361,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0362,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0363,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x0364,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0365,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0368,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0369,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0436,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0437,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0438,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x07e4,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x07ec,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0802,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0835,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x083c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x0930,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x096a,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0202,clif->pChangeDir,2,4);
+ packet(0x022d,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x023b,clif->pFriendsListAdd,2);
+ packet(0x0281,clif->pItemListWindowSelected,2,4,8);
+ packet(0x035f,clif->pTickSend,2);
+ packet(0x0360,clif->pReqClickBuyingStore,2);
+ packet(0x0361,clif->pHomMenu,2,4);
+ packet(0x0362,clif->pDropItem,2,4);
+ packet(0x0363,clif->pDull/*,XXX*/);
+ packet(0x0364,clif->pMoveFromKafra,2,4);
+ packet(0x0365,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0366,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0368,clif->pSolveCharName,2);
+ packet(0x0369,clif->pActionRequest,2,6);
+ packet(0x0436,clif->pDull/*,XXX*/);
+ packet(0x0437,clif->pWalkToXY,2);
+ packet(0x0438,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x07e4,clif->pTakeItem,2);
+ packet(0x07ec,clif->pMoveToKafra,2,4);
+ packet(0x0802,clif->pPartyInvite2,2);
+ packet(0x0811,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0815,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x0819,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0835,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0838,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x083c,clif->pUseSkillToId,2,4,6);
+ packet(0x0930,clif->pStoragePassword,0);
+ packet(0x096a,clif->pGetCharNameRequest,2);
#endif
// 2018-03-14nRagexe_zero
#if PACKETVER == 20180314
- packet(0x023b,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x0438,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x07ec,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0817,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x083c,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x085d,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x085f,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0866,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- packet(0x0878,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x088d,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
- packet(0x0891,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x0897,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x0899,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x089e,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x08a1,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x0917,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0918,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x091f,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0920,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0923,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x0930,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0931,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x093f,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x0946,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x094a,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x094e,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x0954,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0956,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0958,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
+ packet(0x023b,clif->pPartyInvite2,2);
+ packet(0x0438,clif->pSearchStoreInfoNextPage,0);
+ packet(0x07ec,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0817,clif->pReqCloseBuyingStore,0);
+ packet(0x083c,clif->pChangeDir,2,4);
+ packet(0x085d,clif->pFriendsListAdd,2);
+ packet(0x085f,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0866,clif->pHomMenu,2,4);
+ packet(0x0878,clif->pDull/*,XXX*/);
+ packet(0x088d,clif->pStoragePassword,0);
+ packet(0x0891,clif->pMoveFromKafra,2,4);
+ packet(0x0897,clif->pTakeItem,2);
+ packet(0x0899,clif->pMoveToKafra,2,4);
+ packet(0x089e,clif->pItemListWindowSelected,2,4,8);
+ packet(0x08a1,clif->pDull/*,XXX*/);
+ packet(0x0917,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0918,clif->pActionRequest,2,6);
+ packet(0x091f,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0920,clif->pTickSend,2);
+ packet(0x0923,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x0930,clif->pDropItem,2,4);
+ packet(0x0931,clif->pReqClickBuyingStore,2);
+ packet(0x093f,clif->pSolveCharName,2);
+ packet(0x0946,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x094a,clif->pUseSkillToId,2,4,6);
+ packet(0x094e,clif->pWalkToXY,2);
+ packet(0x0954,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0956,clif->pGetCharNameRequest,2);
+ packet(0x0958,clif->pReqTradeBuyingStore,2,4,8,12);
#endif
// 2018-05-11aRagexe_zero, 2018-05-11bRagexe_zero
#if PACKETVER == 20180511
- packet(0x0817,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
- packet(0x085f,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
- packet(0x0863,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
- packet(0x086c,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
- packet(0x0877,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
- packet(0x087e,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
- packet(0x0880,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
- packet(0x0889,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
- packet(0x0893,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
- packet(0x0896,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
- packet(0x0899,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
- packet(0x08a2,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
- packet(0x08a4,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
- packet(0x08a5,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
- packet(0x0919,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
- packet(0x091a,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
- packet(0x091d,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
- packet(0x0920,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
- packet(0x092c,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
- packet(0x092d,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
- packet(0x092e,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
- packet(0x0941,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
- packet(0x0942,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
- packet(0x094a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 90
- packet(0x0955,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
- packet(0x0956,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
- packet(0x095c,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
- packet(0x0961,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
- 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, 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 || \
- PACKETVER == 20181212 || \
- PACKETVER == 20181219 || \
- PACKETVER == 20181226 || \
- PACKETVER == 20190116 || \
- PACKETVER == 20190117 || \
- PACKETVER == 20190130 || \
- PACKETVER == 20190213 || \
- PACKETVER == 20190220 || \
- PACKETVER == 20190227 || \
- PACKETVER == 20190313 || \
- PACKETVER == 20190327 || \
- PACKETVER == 20190403 || \
- PACKETVER == 20190410 || \
- PACKETVER == 20190424 || \
- PACKETVER == 20190502 || \
- PACKETVER == 20190508 || \
- PACKETVER == 20190515 || \
- PACKETVER == 20190529 || \
- 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
- 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 // 90
- 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
-
-// 2019-08-28_2aRagexe_zero, 2019-08-28_3aRagexe_zero, 2019-09-11aRagexe_zero, 2019-09-18_2aRagexe_zero, 2019-09-18aRagexe_zero, 2019-09-25_3aRagexe_zero, 2019-09-25_5aRagexe_zero, 2019-10-08_2aRagexe_zero, 2019-10-23_2aRagexe_zero, 2019-11-06aRagexe_zero, 2019-11-13aRagexe_zero, 2019-11-27_2aRagexe_zero, 2019-11-27aRagexe_zero, 2019-12-04aRagexe_zero, 2019-12-11_2aRagexe_zero, 2019-12-24_4aRagexe_zero, 2019-12-24_5aRagexe_zero, 2020-01-15_2aRagexe_zero, 2020-01-15aRagexe_zero, 2020-01-29_2aRagexe_zero, 2020-01-29aRagexe_zero
-#if PACKETVER == 20190828 || \
- PACKETVER == 20190911 || \
- PACKETVER == 20190918 || \
- PACKETVER == 20190925 || \
- PACKETVER == 20191008 || \
- PACKETVER == 20191023 || \
- PACKETVER == 20191106 || \
- PACKETVER == 20191113 || \
- PACKETVER == 20191127 || \
- PACKETVER == 20191204 || \
- PACKETVER == 20191211 || \
- PACKETVER == 20191224 || \
- PACKETVER == 20200115 || \
- PACKETVER == 20200129
- 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
+ packet(0x0817,clif->pSolveCharName,2);
+ packet(0x085f,clif->pDropItem,2,4);
+ packet(0x0863,clif->pReqClickBuyingStore,2);
+ packet(0x086c,clif->pActionRequest,2,6);
+ packet(0x0877,clif->pMoveFromKafra,2,4);
+ packet(0x087e,clif->pSearchStoreInfo,2,4,5,9,13,14,15);
+ packet(0x0880,clif->pGetCharNameRequest,2);
+ packet(0x0889,clif->pMoveToKafra,2,4);
+ packet(0x0893,clif->pPartyBookingRegisterReq,2,4);
+ packet(0x0896,clif->pWantToConnection,2,6,10,14,18);
+ packet(0x0899,clif->pSearchStoreInfoListItemClick,2,6,10);
+ packet(0x08a2,clif->pTakeItem,2);
+ packet(0x08a4,clif->pReqCloseBuyingStore,0);
+ packet(0x08a5,clif->pTickSend,2);
+ packet(0x0919,clif->pWalkToXY,2);
+ packet(0x091a,clif->pItemListWindowSelected,2,4,8);
+ packet(0x091d,clif->pReqOpenBuyingStore,2,4,8,9,89);
+ packet(0x0920,clif->pDull/*,XXX*/);
+ packet(0x092c,clif->pUseSkillToId,2,4,6);
+ packet(0x092d,clif->pPartyInvite2,2);
+ packet(0x092e,clif->pReqTradeBuyingStore,2,4,8,12);
+ packet(0x0941,clif->pSearchStoreInfoNextPage,0);
+ packet(0x0942,clif->pChangeDir,2,4);
+ packet(0x094a,clif->pUseSkillToPosMoreInfo,2,4,6,8,10);
+ packet(0x0955,clif->pFriendsListAdd,2);
+ packet(0x0956,clif->pDull/*,XXX*/);
+ packet(0x095c,clif->pUseSkillToPos,2,4,6,8);
+ packet(0x0961,clif->pHomMenu,2,4);
+ packet(0x0968,clif->pStoragePassword,0);
#endif
diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h
index b604c77b8..031a23b6d 100644
--- a/src/map/packets_struct.h
+++ b/src/map/packets_struct.h
@@ -3779,7 +3779,7 @@ struct PACKET_ZC_SE_CASHSHOP_OPEN {
} __attribute__((packed));
DEFINE_PACKET_HEADER(ZC_SE_CASHSHOP_OPEN, 0x0b6e);
// for ragexeRE in some version this packet unused [4144]
-#elif PACKETVER_MAIN_NUM >= 20101123 || PACKETVER_RE_NUM >= 20120328 || PACKETVER_ZERO_NUM >= defined(PACKETVER_ZERO)
+#elif PACKETVER_MAIN_NUM >= 20101123 || PACKETVER_RE_NUM >= 20120328 || defined(PACKETVER_ZERO)
struct PACKET_ZC_SE_CASHSHOP_OPEN {
int16 packetType;
uint32 cashPoints;
@@ -3819,9 +3819,15 @@ struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub {
uint32 index;
uint32 zeny;
uint32 currency_count;
- struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub2 currencies[];
+ // Workaround for fix Visual Studio bug (error C2233). Here should be currencies[]
+ struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub2 currencies[1];
} __attribute__((packed));
+// Workaround check for Visual Studio bug (error C2233)
+STATIC_ASSERT(sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub2[1]) ==
+ sizeof(struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub2),
+ "Wrong PACKET_ZC_NPC_EXPANDED_BARTER_OPEN_sub size");
+
struct PACKET_ZC_NPC_EXPANDED_BARTER_OPEN {
int16 packetType;
int16 packetLength;
@@ -3885,6 +3891,60 @@ struct PACKET_ZC_AUTORUN_SKILL {
} __attribute__((packed));
DEFINE_PACKET_HEADER(ZC_AUTORUN_SKILL, 0x0147);
+#if PACKETVER_MAIN_NUM >= 20170726 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO)
+struct PACKET_ZC_LAPINEUPGRADE_OPEN {
+ int16 packetType;
+#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
+ uint32 itemId;
+#else
+ uint16 itemId;
+#endif
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_LAPINEUPGRADE_OPEN, 0x0ab4);
+
+struct PACKET_ZC_LAPINEUPGRADE_RESULT {
+ int16 packetType;
+ uint16 result;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_LAPINEUPGRADE_RESULT, 0x0ab7);
+#endif // PACKETVER_MAIN_NUM >= 20170726 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO)
+
+#if PACKETVER_MAIN_NUM >= 20170111 || PACKETVER_RE_NUM >= 20170111 || defined(PACKETVER_ZERO)
+struct PACKET_CZ_LAPINEUPGRADE_CLOSE {
+ int16 packetType;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_LAPINEUPGRADE_CLOSE, 0x0ab5);
+
+struct PACKET_CZ_LAPINEUPGRADE_MAKE_ITEM {
+ int16 packetType;
+#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
+ uint32 itemId;
+#else
+ uint16 itemId;
+#endif
+ uint16 index;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_LAPINEUPGRADE_MAKE_ITEM, 0x0ab6);
+#endif // PACKETVER_MAIN_NUM >= 20170111 || PACKETVER_RE_NUM >= 20170111 || defined(PACKETVER_ZERO)
+
+#if PACKETVER_MAIN_NUM >= 20120503 || PACKETVER_RE_NUM >= 20120502 || defined(PACKETVER_ZERO)
+struct PACKET_ZC_PERSONAL_INFOMATION_SUB {
+ int8 type;
+ int32 exp;
+ int32 death;
+ int32 drop;
+} __attribute__((packed));
+struct PACKET_ZC_PERSONAL_INFOMATION {
+ int16 packetType;
+ int16 length;
+ int32 total_exp;
+ int32 total_death;
+ int32 total_drop;
+ struct PACKET_ZC_PERSONAL_INFOMATION_SUB details[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_PERSONAL_INFOMATION, 0x097b);
+#endif // PACKETVER_MAIN_NUM >= 20120503 || PACKETVER_RE_NUM >= 20120502 || 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)
#endif // not NetBSD < 6 / Solaris
diff --git a/src/map/party.c b/src/map/party.c
index 7d7f69620..5eecd3fe6 100644
--- a/src/map/party.c
+++ b/src/map/party.c
@@ -330,6 +330,8 @@ static int party_recv_info(const struct party *sp, int char_id)
party->member_withdraw(sp->party_id, sd->status.account_id, sd->status.char_id);
}
+ int option_auto_changed = p->state.option_auto_changed; // Preserve state.
+
memcpy(&p->party, sp, sizeof(struct party));
memset(&p->state, 0, sizeof(p->state));
memset(&p->data, 0, sizeof(p->data));
@@ -342,6 +344,7 @@ static int party_recv_info(const struct party *sp, int char_id)
p->party.member[member_id].leader = 1;
}
party->check_state(p);
+ p->state.option_auto_changed = option_auto_changed;
while( added_count > 0 ) { // new in party
member_id = added[--added_count];
sd = p->data[member_id].sd;
@@ -349,12 +352,9 @@ static int party_recv_info(const struct party *sp, int char_id)
continue;// not online
clif->charnameupdate(sd); //Update other people's display. [Skotlex]
clif->party_member_info(p,sd);
- clif->party_option(p,sd,0x100);
clif->party_info(p,NULL);
for( j = 0; j < p->instances; j++ ) {
if( p->instance[j] >= 0 ) {
- if( instance->list[p->instance[j]].idle_timer == INVALID_TIMER && instance->list[p->instance[j]].progress_timer == INVALID_TIMER )
- continue;
clif->instance_join(sd->fd, p->instance[j]);
break;
}
@@ -488,14 +488,14 @@ static void party_member_joined(struct map_session_data *sd)
p->data[i].sd = sd;
for( j = 0; j < p->instances; j++ ) {
if( p->instance[j] >= 0 ) {
- if( instance->list[p->instance[j]].idle_timer == INVALID_TIMER && instance->list[p->instance[j]].progress_timer == INVALID_TIMER )
- continue;
clif->instance_join(sd->fd, p->instance[j]);
break;
}
}
} else
sd->status.party_id = 0; //He does not belongs to the party really?
+
+ party->send_movemap(sd);
}
/// Invoked (from char-server) when a new member is added to the party.
@@ -536,6 +536,11 @@ static int party_member_added(int party_id, int account_id, int char_id, int fla
clif->party_member_info(p,sd);
clif->party_info(p,sd);
+ if (p->state.option_auto_changed != 0)
+ clif->party_option(p, sd, 0x04);
+ else
+ clif->party_option(p, sd, 0x08);
+
if( sd2 != NULL )
clif->party_inviteack(sd2,sd->status.name,2);
@@ -551,8 +556,6 @@ static int party_member_added(int party_id, int account_id, int char_id, int fla
for( j = 0; j < p->instances; j++ ) {
if( p->instance[j] >= 0 ) {
- if( instance->list[p->instance[j]].idle_timer == INVALID_TIMER && instance->list[p->instance[j]].progress_timer == INVALID_TIMER )
- continue;
clif->instance_join(sd->fd, p->instance[j]);
break;
}
@@ -622,6 +625,7 @@ static int party_member_withdraw(int party_id, int account_id, int char_id)
prev_leader_accountId = p->party.member[i].account_id;
}
+ clif->party_option(p, sd, 0x10);
clif->party_withdraw(p,sd,account_id,p->party.member[i].name,0x0);
memset(&p->party.member[i], 0, sizeof(p->party.member[0]));
memset(&p->data[i], 0, sizeof(p->data[0]));
@@ -677,17 +681,18 @@ static int party_member_withdraw(int party_id, int account_id, int char_id)
/// Invoked (from char-server) when a party is disbanded.
static int party_broken(int party_id)
{
- struct party_data* p;
- int i, j;
+ int i;
- p = party->search(party_id);
- if( p == NULL )
+ struct party_data *p = party->search(party_id);
+ if (p == NULL)
return 0;
- for( j = 0; j < p->instances; j++ ) {
- if( p->instance[j] >= 0 ) {
- instance->destroy( p->instance[j] );
- instance->list[p->instance[j]].owner_id = 0;
+ for (int j = 0; j < p->instances; j++) {
+ const short instance_id = p->instance[j];
+ if (instance_id >= 0) {
+ instance->destroy(instance_id);
+ if (instance_id < instance->instances)
+ instance->list[instance_id].owner_id = 0;
}
}
@@ -728,8 +733,17 @@ static int party_optionchanged(int party_id, int account_id, int exp, int item,
//Flag&0x1: Exp change denied. Flag&0x10: Item change denied.
if(!(flag&0x01) && p->party.exp != exp)
p->party.exp=exp;
- if(!(flag&0x10) && p->party.item != item) {
+ if (p->party.item != item)
p->party.item=item;
+
+ if (account_id == 0) {
+ flag |= 0x04;
+ p->state.option_auto_changed = 1;
+
+ if (p->state.member_level_changed == 0)
+ return 0; // clif_party_option() is handled in clif_parse_LoadEndAck().
+ } else {
+ flag |= 0x02;
}
clif->party_option(p,sd,flag);
@@ -810,7 +824,8 @@ static int party_recv_movemap(int party_id, int account_id, int char_id, unsigne
ShowError("party_recv_movemap: char %d/%d not found in party %s (id:%d)",account_id,char_id,p->party.name,party_id);
return 0;
}
-
+
+ p->state.member_level_changed = 0;
m = &p->party.member[i];
m->map = mapid;
m->online = online;
@@ -859,7 +874,12 @@ static void party_send_movemap(struct map_session_data *sd)
static void party_send_levelup(struct map_session_data *sd)
{
- intif->party_changemap(sd,1);
+ struct party_data *p = party->search(sd->status.party_id);
+
+ if (p != NULL)
+ p->state.member_level_changed = 1;
+
+ intif->party_changemap(sd, 1);
}
static int party_send_logout(struct map_session_data *sd)
diff --git a/src/map/party.h b/src/map/party.h
index c2306b7a8..5f3458cd4 100644
--- a/src/map/party.h
+++ b/src/map/party.h
@@ -51,6 +51,8 @@ struct party_data {
unsigned sg : 1; ///< There's at least one Star Gladiator in party?
unsigned snovice :1; ///< There's a Super Novice
unsigned tk : 1; ///< There's a taekwon
+ unsigned option_auto_changed : 1; ///< Party options were changed automatically. (inter_party_check_lv())
+ unsigned member_level_changed : 1; ///< A party member's level has changed.
} state;
struct hplugin_data_store *hdata; ///< HPM Plugin Data Store
};
diff --git a/src/map/pc.c b/src/map/pc.c
index fc1552e62..04c3cd1cb 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -998,20 +998,23 @@ static bool pc_adoption(struct map_session_data *p1_sd, struct map_session_data
return false; // Job Change Fail
}
-/*=================================================
- * Checks if the player can equip the item at index n in inventory.
- * Returns 0 (no) or 1 (yes).
- *------------------------------------------------*/
+/**
+ * Checks if a character can equip an item.
+ *
+ * @param sd The related character.
+ * @param n The item's inventory index.
+ * @retval 0 Character can't equip the item.
+ * @retval 1 Character can equip the item.
+ *
+ **/
static int pc_isequip(struct map_session_data *sd, int n)
{
- struct item_data *item;
-
nullpo_ret(sd);
Assert_ret(n >= 0 && n < sd->status.inventorySize);
- item = sd->inventory_data[n];
+ struct item_data *item = sd->inventory_data[n];
- if(item == NULL)
+ if (item == NULL)
return 0;
#if PACKETVER <= 20100707
@@ -1019,31 +1022,34 @@ static int pc_isequip(struct map_session_data *sd, int n)
return 0;
#endif
- if(pc_has_permission(sd, PC_PERM_USE_ALL_EQUIPMENT))
+ if (pc_has_permission(sd, PC_PERM_USE_ALL_EQUIPMENT))
return 1;
- if (item->elv && sd->status.base_level < item->elv) {
+ if (item->elv != 0 && sd->status.base_level < item->elv) {
#if PACKETVER >= 20100525
clif->msgtable(sd, MSG_CANNOT_EQUIP_ITEM_LEVEL);
#endif
return 0;
}
- if (item->elvmax && sd->status.base_level > item->elvmax) {
+
+ if (item->elvmax != 0 && sd->status.base_level > item->elvmax) {
#if PACKETVER >= 20100525
clif->msgtable(sd, MSG_CANNOT_EQUIP_ITEM_LEVEL);
#endif
return 0;
}
- if(item->sex != 2 && sd->status.sex != item->sex)
+
+ if (item->sex != SEX_SERVER && sd->status.sex != item->sex)
return 0;
- if ( item->equip & EQP_AMMO ) {
- if (sd->state.active && !pc_iscarton(sd) && (sd->job & MAPID_THIRDMASK) == MAPID_GENETIC) { // check if sc data is already loaded.
+ if ((item->equip & EQP_AMMO) != 0) {
+ if (sd->state.active != 0 && !pc_iscarton(sd) && (sd->job & MAPID_THIRDMASK) == MAPID_GENETIC) { // Check if sc data is already loaded.
#if PACKETVER_RE_NUM >= 20090529 || PACKETVER_MAIN_NUM >= 20090603 || defined(PACKETVER_ZERO)
clif->msgtable(sd, MSG_USESKILL_FAIL_CART);
#endif
return 0;
}
+
if (!pc_ismadogear(sd) && (sd->job & MAPID_THIRDMASK) == MAPID_MECHANIC) {
#if PACKETVER_RE_NUM >= 20090226 || PACKETVER_MAIN_NUM >= 20090304 || defined(PACKETVER_ZERO)
clif->msgtable(sd, MSG_USESKILL_FAIL_MADOGEAR);
@@ -1051,76 +1057,85 @@ static int pc_isequip(struct map_session_data *sd, int n)
return 0;
}
}
- if (sd->sc.count) {
- if(item->equip & EQP_ARMS && item->type == IT_WEAPON && sd->sc.data[SC_NOEQUIPWEAPON]) // Also works with left-hand weapons [DracoRPG]
+ if ((battle_config.unequip_restricted_equipment & 1) != 0) {
+ for (int i = 0; i < map->list[sd->bl.m].zone->disabled_items_count; i++)
+ if (map->list[sd->bl.m].zone->disabled_items[i] == item->nameid)
+ return 0;
+ }
+
+ if ((battle_config.unequip_restricted_equipment & 2) != 0 && !itemdb_isspecial(sd->status.inventory[n].card[0])) {
+ for (int slot = 0; slot < item->slot; slot++)
+ for (int i = 0; i < map->list[sd->bl.m].zone->disabled_items_count; i++)
+ if (map->list[sd->bl.m].zone->disabled_items[i] == sd->status.inventory[n].card[slot])
+ return 0;
+ }
+
+ if (sd->sc.count != 0) {
+ if ((item->equip & EQP_ARMS) != 0 && item->type == IT_WEAPON && sd->sc.data[SC_NOEQUIPWEAPON] != NULL) // Also works with left-hand weapons. [DracoRPG]
return 0;
- if(item->equip & EQP_SHIELD && item->type == IT_ARMOR && sd->sc.data[SC_NOEQUIPSHIELD])
+
+ if ((item->equip & EQP_SHIELD) != 0 && item->type == IT_ARMOR && sd->sc.data[SC_NOEQUIPSHIELD] != NULL)
return 0;
- if(item->equip & EQP_ARMOR && sd->sc.data[SC_NOEQUIPARMOR])
+
+ if ((item->equip & EQP_ARMOR) != 0 && sd->sc.data[SC_NOEQUIPARMOR] != NULL)
return 0;
- if(item->equip & EQP_HEAD_TOP && sd->sc.data[SC_NOEQUIPHELM])
+
+ if ((item->equip & EQP_HEAD_TOP) != 0 && sd->sc.data[SC_NOEQUIPHELM] != NULL)
return 0;
- if(item->equip & EQP_ACC && sd->sc.data[SC__STRIPACCESSARY])
+
+ if ((item->equip & EQP_ACC) != 0 && sd->sc.data[SC__STRIPACCESSARY] != NULL)
return 0;
- if(item->equip && sd->sc.data[SC_KYOUGAKU])
+
+ if (item->equip != 0 && sd->sc.data[SC_KYOUGAKU] != NULL)
return 0;
- if (sd->sc.data[SC_SOULLINK] && sd->sc.data[SC_SOULLINK]->val2 == SL_SUPERNOVICE) {
- //Spirit of Super Novice equip bonuses. [Skotlex]
- if (sd->status.base_level > 90 && item->equip & EQP_HELM)
- return 1; //Can equip all helms
-
- if (sd->status.base_level > 96 && item->equip & EQP_ARMS && item->type == IT_WEAPON)
- switch (item->subtype) { //In weapons, the look determines type of weapon.
- case W_DAGGER: //Level 4 Knives are equippable.. this means all knives, I'd guess?
- case W_1HSWORD: //All 1H swords
- case W_1HAXE: //All 1H Axes
- case W_MACE: //All 1H Maces
- case W_STAFF: //All 1H Staves
+ if (sd->sc.data[SC_SOULLINK] != NULL && sd->sc.data[SC_SOULLINK]->val2 == SL_SUPERNOVICE) { // Spirit of Super Novice equip bonuses. [Skotlex]
+ if (sd->status.base_level > 90 && (item->equip & EQP_HELM) != 0)
+ return 1; // Can equip all helms.
+
+ if (sd->status.base_level > 96 && (item->equip & EQP_ARMS) != 0 && item->type == IT_WEAPON) {
+ switch (item->subtype) { // In weapons, the look determines type of weapon.
+ case W_DAGGER: // Level 4 Knives are equippable.. this means all knives, I'd guess?
+ case W_1HSWORD: // All 1H swords.
+ case W_1HAXE: // All 1H axes.
+ case W_MACE: // All 1H maces.
+ case W_STAFF: // All 1H staffs.
return 1;
}
+ }
}
}
- //Not equipable by class. [Skotlex]
- if (((1ULL<<(sd->job & MAPID_BASEMASK)) & item->class_base[(sd->job & JOBL_2_1) != 0 ? 1 : ((sd->job & JOBL_2_2) != 0 ? 2 : 0)]) == 0)
+
+ uint64 mask_job = 1ULL << (sd->job & MAPID_BASEMASK);
+ uint64 mask_item = item->class_base[((sd->job & JOBL_2_1) != 0) ? 1 : (((sd->job & JOBL_2_2) != 0) ? 2 : 0)];
+
+ if ((mask_job & mask_item) == 0) // Not equipable by class. [Skotlex]
return 0;
- //Not usable by upper class. [Inkfish]
- while( 1 ) {
+
+ // Not usable by upper class. [Inkfish]
+ while (1) {
if ((item->class_upper & ITEMUPPER_NORMAL) != 0) {
- if ((sd->job & (JOBL_UPPER|JOBL_THIRD|JOBL_BABY)) == 0)
+ if ((sd->job & (JOBL_UPPER | JOBL_THIRD | JOBL_BABY)) == 0)
break;
}
+
if ((item->class_upper & ITEMUPPER_UPPER) != 0) {
- if ((sd->job & (JOBL_UPPER|JOBL_THIRD)) != 0)
+ if ((sd->job & (JOBL_UPPER | JOBL_THIRD)) != 0)
break;
}
+
if ((item->class_upper & ITEMUPPER_BABY) != 0) {
if ((sd->job & JOBL_BABY) != 0)
break;
}
+
if ((item->class_upper & ITEMUPPER_THIRD) != 0) {
if ((sd->job & JOBL_THIRD) != 0)
break;
}
- return 0;
- }
-
- if ( battle_config.unequip_restricted_equipment & 1 ) {
- int i;
- for ( i = 0; i < map->list[sd->bl.m].zone->disabled_items_count; i++ )
- if ( map->list[sd->bl.m].zone->disabled_items[i] == sd->status.inventory[n].nameid )
- return 0;
- }
- if ( battle_config.unequip_restricted_equipment & 2 ) {
- if ( !itemdb_isspecial( sd->status.inventory[n].card[0] ) ) {
- int i, slot;
- for ( slot = 0; slot < MAX_SLOTS; slot++ )
- for ( i = 0; i < map->list[sd->bl.m].zone->disabled_items_count; i++ )
- if ( map->list[sd->bl.m].zone->disabled_items[i] == sd->status.inventory[n].card[slot] )
- return 0;
- }
+ return 0;
}
return 1;
@@ -1264,6 +1279,7 @@ static bool pc_authok(struct map_session_data *sd, int login_id2, time_t expirat
sd->bg_queue.client_has_bg_data = 0;
sd->bg_queue.type = 0;
+ VECTOR_INIT(sd->auto_cast); // Initialize auto-cast vector.
VECTOR_INIT(sd->channels);
VECTOR_INIT(sd->script_queues);
VECTOR_INIT(sd->achievement); // Achievements [Smokexyz/Hercules]
@@ -1590,58 +1606,56 @@ static void pc_calc_skilltree_clear(struct map_session_data *sd)
*------------------------------------------*/
static int pc_calc_skilltree(struct map_session_data *sd)
{
- int i,id=0,flag;
- int class = 0, classidx = 0;
-
nullpo_ret(sd);
- i = pc->calc_skilltree_normalize_job(sd);
- class = pc->mapid2jobid(i, sd->status.sex);
+ uint32 job = pc->calc_skilltree_normalize_job(sd);
+ int class = pc->mapid2jobid(job, sd->status.sex);
if (class == -1) {
//Unable to normalize job??
- ShowError("pc_calc_skilltree: Unable to normalize job %d for character %s (%d:%d)\n", i, sd->status.name, sd->status.account_id, sd->status.char_id);
+ ShowError("pc_calc_skilltree: Unable to normalize job %u for character %s (%d:%d)\n", job, sd->status.name, sd->status.account_id, sd->status.char_id);
return 1;
}
- classidx = pc->class2idx(class);
+ int classidx = pc->class2idx(class);
pc->calc_skilltree_clear(sd);
- for (i = 0; i < MAX_SKILL_DB; i++) {
- if( sd->status.skill[i].flag != SKILL_FLAG_PERMANENT && sd->status.skill[i].flag != SKILL_FLAG_PERM_GRANTED && sd->status.skill[i].flag != SKILL_FLAG_PLAGIARIZED )
- { // Restore original level of skills after deleting earned skills.
+ for (int i = 0; i < MAX_SKILL_DB; i++) {
+ if (sd->status.skill[i].flag == SKILL_FLAG_TEMPORARY || sd->status.skill[i].flag >= SKILL_FLAG_REPLACED_LV_0) {
+ // Restore original level of skills after deleting earned skills.
sd->status.skill[i].lv = (sd->status.skill[i].flag == SKILL_FLAG_TEMPORARY) ? 0 : sd->status.skill[i].flag - SKILL_FLAG_REPLACED_LV_0;
sd->status.skill[i].flag = SKILL_FLAG_PERMANENT;
}
- if( sd->sc.count && sd->sc.data[SC_SOULLINK] && sd->sc.data[SC_SOULLINK]->val2 == SL_BARDDANCER && skill->dbs->db[i].nameid >= DC_HUMMING && skill->dbs->db[i].nameid <= DC_SERVICEFORYOU )
- { //Enable Bard/Dancer spirit linked skills.
- if (sd->status.sex) {
- // Link dancer skills to bard.
- if (i < 8) {
- Assert_report(i >= 8);
- continue;
- }
- if (sd->status.skill[i-8].lv < 10)
- continue;
- sd->status.skill[i].id = skill->dbs->db[i].nameid;
- sd->status.skill[i].lv = sd->status.skill[i-8].lv; // Set the level to the same as the linking skill
- sd->status.skill[i].flag = SKILL_FLAG_TEMPORARY; // Tag it as a non-savable, non-uppable, bonus skill
+ if (sd->sc.count && sd->sc.data[SC_SOULLINK] && sd->sc.data[SC_SOULLINK]->val2 == SL_BARDDANCER
+ && ((skill->dbs->db[i].nameid >= BA_WHISTLE && skill->dbs->db[i].nameid <= BA_APPLEIDUN)
+ || (skill->dbs->db[i].nameid >= DC_HUMMING && skill->dbs->db[i].nameid <= DC_SERVICEFORYOU))
+ ) {
+ //Enable Bard/Dancer spirit linked skills.
+ int linked_nameid = skill->get_linked_song_dance_id(skill->dbs->db[i].nameid);
+ if (linked_nameid == 0) {
+ Assert_report("Linked bard/dance skill not found");
+ continue;
+ }
+ int copy_from_index;
+ int copy_to_index;
+ if (sd->status.sex == SEX_MALE && skill->dbs->db[i].nameid >= BA_WHISTLE && skill->dbs->db[i].nameid <= BA_APPLEIDUN) {
+ copy_from_index = i;
+ copy_to_index = skill->get_index(linked_nameid);
} else {
- // Link bard skills to dancer.
- if (i < 8) {
- Assert_report(i >= 8);
- continue;
- }
- if (sd->status.skill[i].lv < 10)
- continue;
- sd->status.skill[i-8].id = skill->dbs->db[i-8].nameid;
- sd->status.skill[i-8].lv = sd->status.skill[i].lv; // Set the level to the same as the linking skill
- sd->status.skill[i-8].flag = SKILL_FLAG_TEMPORARY; // Tag it as a non-savable, non-uppable, bonus skill
+ copy_from_index = skill->get_index(linked_nameid);
+ copy_to_index = i;
}
+ if (copy_from_index < copy_to_index)
+ continue; // Copy only after the source skill has been filled into the tree
+ if (sd->status.skill[copy_from_index].lv < 10)
+ continue; // Copy only if the linked skill has been mastered
+ sd->status.skill[copy_to_index].id = skill->dbs->db[copy_to_index].nameid;
+ sd->status.skill[copy_to_index].lv = sd->status.skill[copy_from_index].lv; // Set the level to the same as the linking skill
+ sd->status.skill[copy_to_index].flag = SKILL_FLAG_TEMPORARY; // Tag it as a non-savable, non-uppable, bonus skill
}
}
if( pc_has_permission(sd, PC_PERM_ALL_SKILL) ) {
- for (i = 0; i < MAX_SKILL_DB; i++) {
+ for (int i = 0; i < MAX_SKILL_DB; i++) {
switch(skill->dbs->db[i].nameid) {
/**
* Dummy skills must be added here otherwise they'll be displayed in the,
@@ -1673,9 +1687,11 @@ static int pc_calc_skilltree(struct map_session_data *sd)
return 0;
}
+ bool changed = false;
do {
- flag = 0;
- for (i = 0; i < MAX_SKILL_TREE && (id = pc->skill_tree[classidx][i].id) > 0; i++) {
+ changed = false;
+ int id;
+ for (int i = 0; i < MAX_SKILL_TREE && (id = pc->skill_tree[classidx][i].id) > 0; i++) {
int idx = pc->skill_tree[classidx][i].idx;
bool satisfied = true;
if (sd->status.skill[idx].id > 0)
@@ -1725,10 +1741,10 @@ static int pc_calc_skilltree(struct map_session_data *sd)
sd->status.skill[idx].lv = 1; // need to manually specify a skill level
sd->status.skill[idx].flag = SKILL_FLAG_TEMPORARY; //So it is not saved, and tagged as a "bonus" skill.
}
- flag = 1; // skill list has changed, perform another pass
+ changed = true; // skill list has changed, perform another pass
}
}
- } while(flag);
+ } while (changed);
pc->calc_skilltree_bonus(sd, classidx);
@@ -4191,7 +4207,7 @@ static int pc_skill(struct map_session_data *sd, int id, int level, int flag)
if( sd->status.skill[index].id == id ) {
if( sd->status.skill[index].lv >= level )
return 0;
- if( sd->status.skill[index].flag == SKILL_FLAG_PERMANENT ) //Non-granted skill, store it's level.
+ if (sd->status.skill[index].flag == SKILL_FLAG_PERMANENT) // Non-granted skill, store its level.
sd->status.skill[index].flag = SKILL_FLAG_REPLACED_LV_0 + sd->status.skill[index].lv;
} else {
sd->status.skill[index].id = id;
@@ -5147,7 +5163,8 @@ static int pc_useitem(struct map_session_data *sd, int n)
nullpo_ret(sd);
Assert_ret(n >= 0 && n < sd->status.inventorySize);
- if (sd->npc_id || sd->state.workinprogress & 1) {
+ if ((sd->npc_id != 0 && sd->state.using_megaphone == 0 && (sd->npc_item_flag & ITEMENABLEDNPC_CONSUME) == 0)
+ || (sd->state.workinprogress & 1) != 0) {
#if PACKETVER >= 20110308
clif->msgtable(sd, MSG_BUSY);
#else
@@ -5156,7 +5173,7 @@ static int pc_useitem(struct map_session_data *sd, int n)
return 0;
}
- if (battle_config.storage_use_item == 1 && sd->state.storage_flag != STORAGE_FLAG_CLOSED) {
+ if (battle_config.storage_use_item == 0 && sd->state.storage_flag != STORAGE_FLAG_CLOSED) {
clif->messagecolor_self(sd->fd, COLOR_RED, msg_sd(sd, 1475));
return 0; // You cannot use this item while storage is open.
}
@@ -5173,6 +5190,16 @@ static int pc_useitem(struct map_session_data *sd, int n)
// Store information for later use before it is lost (via pc->delitem) [Paradox924X]
nameid = sd->inventory_data[n]->nameid;
+ if (nameid == ITEMID_MEGAPHONE && ((sd->state.workinprogress & 2) != 0 || sd->state.using_megaphone != 0
+ || sd->npc_id != 0)) {
+#if PACKETVER >= 20110308
+ clif->msgtable(sd, MSG_BUSY);
+#else
+ clif->messagecolor_self(sd->fd, COLOR_WHITE, msg_sd(sd, 48));
+#endif
+ return 0;
+ }
+
if (nameid != ITEMID_NAUTHIZ && sd->sc.opt1 > 0 && sd->sc.opt1 != OPT1_STONEWAIT && sd->sc.opt1 != OPT1_BURNING)
return 0;
@@ -5280,10 +5307,6 @@ static int pc_useitem(struct map_session_data *sd, int n)
if(sd->catch_target_class != -1) //Abort pet catching.
sd->catch_target_class = -1;
- // Removes abracadabra/randomize spell flag for delayed consume items or item doesn't get consumed
- if (sd->inventory_data[n]->flag.delay_consume)
- sd->state.abra_flag = 0;
-
amount = sd->status.inventory[n].amount;
//Check if the item is to be consumed immediately [Skotlex]
if (sd->inventory_data[n]->flag.delay_consume || sd->inventory_data[n]->flag.keepafteruse)
@@ -5307,6 +5330,9 @@ static int pc_useitem(struct map_session_data *sd, int n)
// Update item use time.
sd->canuseitem_tick = tick + battle_config.item_use_interval;
+ if (nameid == ITEMID_MEGAPHONE)
+ sd->state.using_megaphone = 1;
+
script->run_use_script(sd, sd->inventory_data[n], npc->fake_nd->bl.id);
script->potion_flag = 0;
@@ -5322,23 +5348,79 @@ static int pc_useitem(struct map_session_data *sd, int n)
}
/**
- * Sets state flags and helper variables, used by itemskill() script command, to 0.
+ * Unsets a character's currently processed auto-cast skill data.
*
- * @param sd The character's session data.
- * @return 0 if parameter sd is NULL, otherwise 1.
- */
-static int pc_itemskill_clear(struct map_session_data *sd)
+ * @param sd The character.
+ *
+ **/
+static void pc_autocast_clear_current(struct map_session_data *sd)
{
- nullpo_ret(sd);
+ nullpo_retv(sd);
- sd->itemskill_id = 0;
- sd->itemskill_lv = 0;
- sd->state.itemskill_conditions_checked = 0;
- sd->state.itemskill_no_conditions = 0;
- sd->state.itemskill_no_casttime = 0;
- sd->state.itemskill_castonself = 0;
+ sd->auto_cast_current.type = AUTOCAST_NONE;
+ sd->auto_cast_current.skill_id = 0;
+ sd->auto_cast_current.skill_lv = 0;
+ sd->auto_cast_current.itemskill_conditions_checked = false;
+ sd->auto_cast_current.itemskill_check_conditions = true;
+ sd->auto_cast_current.itemskill_instant_cast = false;
+ sd->auto_cast_current.itemskill_cast_on_self = false;
+}
- return 1;
+/**
+ * Unsets a character's auto-cast related data.
+ *
+ * @param sd The character.
+ *
+ **/
+static void pc_autocast_clear(struct map_session_data *sd)
+{
+ nullpo_retv(sd);
+
+ pc->autocast_clear_current(sd);
+ VECTOR_TRUNCATE(sd->auto_cast); // Truncate auto-cast vector.
+}
+
+/**
+ * Sets a character's currently processed auto-cast skill data by comparing the skill ID.
+ *
+ * @param sd The character.
+ * @param skill_id The skill ID to compare.
+ *
+ **/
+static void pc_autocast_set_current(struct map_session_data *sd, int skill_id)
+{
+ nullpo_retv(sd);
+
+ pc->autocast_clear_current(sd);
+
+ for (int i = 0; i < VECTOR_LENGTH(sd->auto_cast); i++) {
+ if (VECTOR_INDEX(sd->auto_cast, i).skill_id == skill_id) {
+ sd->auto_cast_current = VECTOR_INDEX(sd->auto_cast, i);
+ break;
+ }
+ }
+}
+
+/**
+ * Removes a specific entry from a character's auto-cast vector.
+ *
+ * @param sd The character.
+ * @param type The entry's auto-cast type.
+ * @param skill_id The entry's skill ID.
+ * @param skill_lv The entry's skill level.
+ *
+ **/
+static void pc_autocast_remove(struct map_session_data *sd, enum autocast_type type, int skill_id, int skill_lv)
+{
+ nullpo_retv(sd);
+
+ for (int i = 0; i < VECTOR_LENGTH(sd->auto_cast); i++) {
+ if (VECTOR_INDEX(sd->auto_cast, i).type == type && VECTOR_INDEX(sd->auto_cast, i).skill_id == skill_id
+ && VECTOR_INDEX(sd->auto_cast, i).skill_lv == skill_lv) {
+ VECTOR_ERASE(sd->auto_cast, i);
+ break;
+ }
+ }
}
/*==========================================
@@ -5688,242 +5770,290 @@ static int pc_steal_coin(struct map_session_data *sd, struct block_list *target,
return 0;
}
-/*==========================================
- * Set's a player position.
- * Return values:
- * 0 - Success.
- * 1 - Invalid map index.
- * 2 - Map not in this map-server, and failed to locate alternate map-server.
- *------------------------------------------*/
+/**
+ * Sets a character's position.
+ *
+ * @param sd The related character.
+ * @param map_index The target map's index.
+ * @param x The target x-coordinate.
+ * @param y The target y-coordinate.
+ * @param clrtype The unit clear type, which should be used.
+ * @retval 0 Success.
+ * @retval 1 Invalid map index.
+ * @retval 2 Map not in this map-server, and failed to locate alternative map-server.
+ * @retval 3 No character data. (Parameter sd is a NULL pointer.)
+ * @retval 4 Character is jailed.
+ *
+ **/
static int pc_setpos(struct map_session_data *sd, unsigned short map_index, int x, int y, enum clr_type clrtype)
{
- int16 m;
+ nullpo_retr(3, sd);
- nullpo_ret(sd);
+ int map_id = map->mapindex2mapid(map_index);
- if( !map_index || !mapindex_id2name(map_index) || ( m = map->mapindex2mapid(map_index) ) == -1 ) {
- ShowDebug("pc_setpos: Passed mapindex(%d) is invalid!\n", map_index);
+ if (map_index == 0 || !mapindex_id2name(map_index) || map_id == INDEX_NOT_FOUND) {
+ ShowDebug("pc_setpos: Passed mapindex %d is invalid!\n", map_index);
return 1;
}
- if( pc_isdead(sd) ) { //Revive dead people before warping them
+ if (pc_isdead(sd)) { // Revive dead character before warping.
pc->setstand(sd);
- pc->setrestartvalue(sd,1);
+ pc->setrestartvalue(sd, 1);
}
- if( map->list[m].flag.src4instance ) {
- struct party_data *p;
+ if (map->list[map_id].flag.src4instance != 0) {
bool stop = false;
- int i = 0, j = 0;
- if( sd->instances ) {
- for( i = 0; i < sd->instances; i++ ) {
- if( sd->instance[i] >= 0 ) {
- ARR_FIND(0, instance->list[sd->instance[i]].num_map, j, map->list[instance->list[sd->instance[i]].map[j]].instance_src_map == m && !map->list[instance->list[sd->instance[i]].map[j]].custom_name);
- if( j != instance->list[sd->instance[i]].num_map )
+ if (sd->instances != 0) {
+ int i, j = 0;
+
+ for (i = 0; i < sd->instances; i++) {
+ if (sd->instance[i] >= 0) {
+ ARR_FIND(0, instance->list[sd->instance[i]].num_map, j,
+ map->list[instance->list[sd->instance[i]].map[j]].instance_src_map == map_id
+ && !map->list[instance->list[sd->instance[i]].map[j]].custom_name);
+
+ if (j != instance->list[sd->instance[i]].num_map)
break;
}
}
- if( i != sd->instances ) {
- m = instance->list[sd->instance[i]].map[j];
- map_index = map_id2index(m);
+
+ if (i != sd->instances) {
+ map_id = instance->list[sd->instance[i]].map[j];
+ map_index = map_id2index(map_id);
stop = true;
}
}
- if ( !stop && sd->status.party_id && (p = party->search(sd->status.party_id)) != NULL && p->instances ) {
- for( i = 0; i < p->instances; i++ ) {
- if( p->instance[i] >= 0 ) {
- ARR_FIND(0, instance->list[p->instance[i]].num_map, j, map->list[instance->list[p->instance[i]].map[j]].instance_src_map == m && !map->list[instance->list[p->instance[i]].map[j]].custom_name);
- if( j != instance->list[p->instance[i]].num_map )
+
+ struct party_data *p = party->search(sd->status.party_id);
+
+ if (!stop && sd->status.party_id != 0 && p != NULL && p->instances != 0) {
+ int i, j = 0;
+
+ for (i = 0; i < p->instances; i++) {
+ if (p->instance[i] >= 0) {
+ ARR_FIND(0, instance->list[p->instance[i]].num_map, j,
+ map->list[instance->list[p->instance[i]].map[j]].instance_src_map == map_id
+ && !map->list[instance->list[p->instance[i]].map[j]].custom_name);
+
+ if (j != instance->list[p->instance[i]].num_map)
break;
}
}
- if( i != p->instances ) {
- m = instance->list[p->instance[i]].map[j];
- map_index = map_id2index(m);
+
+ if (i != p->instances) {
+ map_id = instance->list[p->instance[i]].map[j];
+ map_index = map_id2index(map_id);
stop = true;
}
}
- if ( !stop && sd->status.guild_id && sd->guild && sd->guild->instances ) {
- for( i = 0; i < sd->guild->instances; i++ ) {
- if( sd->guild->instance[i] >= 0 ) {
- ARR_FIND(0, instance->list[sd->guild->instance[i]].num_map, j, map->list[instance->list[sd->guild->instance[i]].map[j]].instance_src_map == m && !map->list[instance->list[sd->guild->instance[i]].map[j]].custom_name);
- if( j != instance->list[sd->guild->instance[i]].num_map )
+
+ if (!stop && sd->status.guild_id != 0 && sd->guild != NULL && sd->guild->instances != 0) {
+ int i, j = 0;
+
+ for (i = 0; i < sd->guild->instances; i++) {
+ if (sd->guild->instance[i] >= 0) {
+ ARR_FIND(0, instance->list[sd->guild->instance[i]].num_map, j,
+ map->list[instance->list[sd->guild->instance[i]].map[j]].instance_src_map == map_id
+ && !map->list[instance->list[sd->guild->instance[i]].map[j]].custom_name);
+
+ if (j != instance->list[sd->guild->instance[i]].num_map)
break;
}
}
- if( i != sd->guild->instances ) {
- m = instance->list[sd->guild->instance[i]].map[j];
- map_index = map_id2index(m);
- //stop = true; Uncomment if adding new checks
+
+ if (i != sd->guild->instances) {
+ map_id = instance->list[sd->guild->instance[i]].map[j];
+ map_index = map_id2index(map_id);
+ //stop = true; Uncomment when adding new checks.
}
}
- /* we hit a instance, if empty we populate the spawn data */
- if( map->list[m].instance_id >= 0 && instance->list[map->list[m].instance_id].respawn.map == 0 &&
- instance->list[map->list[m].instance_id].respawn.x == 0 &&
- instance->list[map->list[m].instance_id].respawn.y == 0) {
- instance->list[map->list[m].instance_id].respawn.map = map_index;
- instance->list[map->list[m].instance_id].respawn.x = x;
- instance->list[map->list[m].instance_id].respawn.y = y;
+ // We hit an instance. If empty we populate the spawn data.
+ if (map->list[map_id].instance_id >= 0 && instance->list[map->list[map_id].instance_id].respawn.map == 0
+ && instance->list[map->list[map_id].instance_id].respawn.x == 0
+ && instance->list[map->list[map_id].instance_id].respawn.y == 0) {
+ instance->list[map->list[map_id].instance_id].respawn.map = map_index;
+ instance->list[map->list[map_id].instance_id].respawn.x = x;
+ instance->list[map->list[map_id].instance_id].respawn.y = y;
}
}
- sd->state.changemap = (sd->mapindex != map_index);
+ sd->state.changemap = (sd->mapindex != map_index) ? 1 : 0;
sd->state.warping = 1;
sd->state.workinprogress = 0;
- if( sd->state.changemap ) { // Misc map-changing settings
- int i;
+
+ if (sd->state.changemap != 0) { // Miscellaneous map-changing settings.
sd->state.pmap = sd->bl.m;
- for (i = 0; i < VECTOR_LENGTH(sd->script_queues); i++) {
+ for (int i = 0; i < VECTOR_LENGTH(sd->script_queues); i++) {
struct script_queue *queue = script->queue(VECTOR_INDEX(sd->script_queues, i));
- if (queue && queue->event_mapchange[0] != '\0') {
- pc->setregstr(sd, script->add_variable("@Queue_Destination_Map$"), map->list[m].name);
+
+ if (queue != NULL && queue->event_mapchange[0] != '\0') {
+ pc->setregstr(sd, script->add_variable("@Queue_Destination_Map$"), map->list[map_id].name);
npc->event(sd, queue->event_mapchange, 0);
}
}
- if( map->list[m].cell == (struct mapcell *)0xdeadbeaf )
- map->cellfromcache(&map->list[m]);
- if (sd->sc.count) { // Cancel some map related stuff.
- if (sd->sc.data[SC_JAILED])
- return 1; //You may not get out!
+ if (map->list[map_id].cell == (struct mapcell *)0xdeadbeaf)
+ map->cellfromcache(&map->list[map_id]);
+
+ if (sd->sc.count != 0) { // Cancel some map related stuff.
+ if (sd->sc.data[SC_JAILED] != NULL)
+ return 4; // You may not get out!
+
status_change_end(&sd->bl, SC_CASH_BOSS_ALARM, INVALID_TIMER);
status_change_end(&sd->bl, SC_WARM, INVALID_TIMER);
status_change_end(&sd->bl, SC_SUN_COMFORT, INVALID_TIMER);
status_change_end(&sd->bl, SC_MOON_COMFORT, INVALID_TIMER);
status_change_end(&sd->bl, SC_STAR_COMFORT, INVALID_TIMER);
status_change_end(&sd->bl, SC_MIRACLE, INVALID_TIMER);
- status_change_end(&sd->bl, SC_NEUTRALBARRIER_MASTER, INVALID_TIMER);//Will later check if this is needed. [Rytech]
+ status_change_end(&sd->bl, SC_NEUTRALBARRIER_MASTER, INVALID_TIMER); // Will later check if this is needed. [Rytech]
status_change_end(&sd->bl, SC_NEUTRALBARRIER, INVALID_TIMER);
status_change_end(&sd->bl, SC_STEALTHFIELD_MASTER, INVALID_TIMER);
status_change_end(&sd->bl, SC_STEALTHFIELD, INVALID_TIMER);
- if (sd->sc.data[SC_KNOWLEDGE]) {
+
+ if (sd->sc.data[SC_KNOWLEDGE] != NULL) {
struct status_change_entry *sce = sd->sc.data[SC_KNOWLEDGE];
+
if (sce->timer != INVALID_TIMER)
timer->delete(sce->timer, status->change_timer);
- sce->timer = timer->add(timer->gettick() + skill->get_time(SG_KNOWLEDGE, sce->val1), status->change_timer, sd->bl.id, SC_KNOWLEDGE);
+
+ sce->timer = timer->add(timer->gettick() + skill->get_time(SG_KNOWLEDGE, sce->val1),
+ status->change_timer, sd->bl.id, SC_KNOWLEDGE);
}
+
status_change_end(&sd->bl, SC_PROPERTYWALK, INVALID_TIMER);
status_change_end(&sd->bl, SC_CLOAKING, INVALID_TIMER);
status_change_end(&sd->bl, SC_CLOAKINGEXCEED, INVALID_TIMER);
}
- for( i = 0; i < EQI_MAX; i++ ) {
- if( sd->equip_index[ i ] >= 0 )
- if( !pc->isequip( sd , sd->equip_index[ i ] ) )
- pc->unequipitem(sd, sd->equip_index[i], PCUNEQUIPITEM_FORCE);
- }
- if (battle_config.clear_unit_onwarp&BL_PC)
+
+ if ((battle_config.clear_unit_onwarp & BL_PC) != 0)
skill->clear_unitgroup(&sd->bl);
- party->send_dot_remove(sd); //minimap dot fix [Kevin]
+
+ party->send_dot_remove(sd); // Minimap dot fix. [Kevin]
guild->send_dot_remove(sd);
bg->send_dot_remove(sd);
- if (sd->regen.state.gc)
+
+ if (sd->regen.state.gc != 0)
sd->regen.state.gc = 0;
- // make sure vending is allowed here
- if (sd->state.vending && map->list[m].flag.novending) {
- clif->message (sd->fd, msg_sd(sd,276)); // "You can't open a shop on this map"
+
+ // Make sure that vending is allowed here.
+ if (sd->state.vending != 0 && map->list[map_id].flag.novending != 0) {
+ clif->message(sd->fd, msg_sd(sd, 276)); // "You can't open a shop on this map"
vending->close(sd);
}
- if (sd->mapindex != 0) {
- // Only if the character is already on a map
- if (map->list[sd->bl.m].channel) {
- channel->leave(map->list[sd->bl.m].channel,sd);
- }
- }
+ if (sd->mapindex != 0 && map->list[sd->bl.m].channel != NULL) // Only if the character is already on a map.
+ channel->leave(map->list[sd->bl.m].channel, sd);
}
- if( m < 0 ) {
+ if (map_id < 0) {
uint32 ip;
uint16 port;
- //if can't find any map-servers, just abort setting position.
- if(!sd->mapindex || map->mapname2ipport(map_index,&ip,&port))
+
+ // If can't find any map-servers, just abort setting position.
+ if (sd->mapindex == 0 || map->mapname2ipport(map_index, &ip, &port) != 0)
return 2;
- if (sd->npc_id)
+ if (sd->npc_id != 0)
npc->event_dequeue(sd);
+
npc->script_event(sd, NPCE_LOGOUT);
- //remove from map, THEN change x/y coordinates
- unit->remove_map_pc(sd,clrtype);
+
+ // Remove from map, THEN change x/y coordinates.
+ unit->remove_map_pc(sd, clrtype);
+
if (battle_config.player_warp_keep_direction == 0)
- sd->ud.dir = 0; // makes character face north
+ sd->ud.dir = 0; /// Make character facing north.
+
sd->mapindex = map_index;
- sd->bl.x=x;
- sd->bl.y=y;
+ sd->bl.x= x;
+ sd->bl.y= y;
pc->clean_skilltree(sd);
- chrif->save(sd,2);
- chrif->changemapserver(sd, ip, (short)port);
+ chrif->save(sd, 2);
+ chrif->changemapserver(sd, ip, port);
- //Free session data from this map server [Kevin]
+ // Free session data from this map server. [Kevin]
unit->free_pc(sd);
return 0;
}
- if( x < 0 || x >= map->list[m].xs || y < 0 || y >= map->list[m].ys ) {
- ShowError("pc_setpos: attempt to place player %s (%d:%d) on invalid coordinates (%s-%d,%d)\n", sd->status.name, sd->status.account_id, sd->status.char_id, mapindex_id2name(map_index),x,y);
- x = y = 0; // make it random
+ if (x < 0 || x >= map->list[map_id].xs || y < 0 || y >= map->list[map_id].ys) { // Invalid coordinates. Randomize them.
+ ShowError("pc_setpos: Attempt to place player %s (%d:%d) on invalid coordinates (%s-%d,%d)!\n",
+ sd->status.name, sd->status.account_id, sd->status.char_id,
+ mapindex_id2name(map_index), x, y);
+ x = 0;
+ y = 0;
}
- if( x == 0 && y == 0 ) {// pick a random walkable cell
+ if (x == 0 && y == 0) { // Pick a random walkable cell.
do {
- x=rnd()%(map->list[m].xs-2)+1;
- y=rnd()%(map->list[m].ys-2)+1;
- } while(map->getcell(m, &sd->bl, x, y, CELL_CHKNOPASS));
+ x = rnd() % (map->list[map_id].xs - 2) + 1;
+ y = rnd() % (map->list[map_id].ys - 2) + 1;
+ } while(map->getcell(map_id, &sd->bl, x, y, CELL_CHKNOPASS) != 0);
}
- if (sd->state.vending && map->getcell(m, &sd->bl, x, y, CELL_CHKNOVENDING)) {
- clif->message (sd->fd, msg_sd(sd,204)); // "You can't open a shop on this cell."
+ if (sd->state.vending != 0 && map->getcell(map_id, &sd->bl, x, y, CELL_CHKNOVENDING) != 0) {
+ clif->message(sd->fd, msg_sd(sd, 204)); // "You can't open a shop on this cell."
vending->close(sd);
}
if (battle_config.player_warp_keep_direction == 0)
- sd->ud.dir = 0; // makes character face north
+ sd->ud.dir = 0; // Make character facing north.
- if(sd->bl.prev != NULL){
- unit->remove_map_pc(sd,clrtype);
- clif->changemap(sd,m,x,y); // [MouseJstr]
- } else if(sd->state.active)
- //Tag player for rewarping after map-loading is done. [Skotlex]
- sd->state.rewarp = 1;
+ if (sd->bl.prev != NULL) {
+ unit->remove_map_pc(sd, clrtype);
+ clif->changemap(sd, map_id, x, y); // [MouseJstr]
+ } else if (sd->state.active != 0) {
+ sd->state.rewarp = 1; // Tag character for re-warping after map-loading is done. [Skotlex]
+ }
sd->mapindex = map_index;
- sd->bl.m = m;
- sd->bl.x = sd->ud.to_x = x;
- sd->bl.y = sd->ud.to_y = y;
+ sd->bl.m = map_id;
+ sd->bl.x = x;
+ sd->bl.y = y;
+ sd->ud.to_x = x;
+ sd->ud.to_y = y;
- if( sd->status.guild_id > 0 && map->list[m].flag.gvg_castle ) { // Increased guild castle regen [Valaris]
+ if (sd->status.guild_id > 0 && map->list[map_id].flag.gvg_castle != 0) { // Double regeneration in guild castle. [Valaris]
struct guild_castle *gc = guild->mapindex2gc(sd->mapindex);
- if(gc && gc->guild_id == sd->status.guild_id)
+
+ if (gc != NULL && gc->guild_id == sd->status.guild_id)
sd->regen.state.gc = 1;
}
- if( sd->status.pet_id > 0 && sd->pd && sd->pd->pet.intimate > 0 ) {
- sd->pd->bl.m = m;
- sd->pd->bl.x = sd->pd->ud.to_x = x;
- sd->pd->bl.y = sd->pd->ud.to_y = y;
+ if (sd->status.pet_id > 0 && sd->pd != NULL && sd->pd->pet.intimate > PET_INTIMACY_NONE) {
+ sd->pd->bl.m = map_id;
+ sd->pd->bl.x = x;
+ sd->pd->bl.y = y;
+ sd->pd->ud.to_x = x;
+ sd->pd->ud.to_y = y;
sd->pd->ud.dir = sd->ud.dir;
}
- if( homun_alive(sd->hd) ) {
- sd->hd->bl.m = m;
- sd->hd->bl.x = sd->hd->ud.to_x = x;
- sd->hd->bl.y = sd->hd->ud.to_y = y;
+ if (homun_alive(sd->hd)) {
+ sd->hd->bl.m = map_id;
+ sd->hd->bl.x = x;
+ sd->hd->bl.y = y;
+ sd->hd->ud.to_x = x;
+ sd->hd->ud.to_y = y;
sd->hd->ud.dir = sd->ud.dir;
}
- if( sd->md ) {
- sd->md->bl.m = m;
- sd->md->bl.x = sd->md->ud.to_x = x;
- sd->md->bl.y = sd->md->ud.to_y = y;
+ if (sd->md != NULL) {
+ sd->md->bl.m = map_id;
+ sd->md->bl.x = x;
+ sd->md->bl.y = y;
+ sd->md->ud.to_x = x;
+ sd->md->ud.to_y = y;
sd->md->ud.dir = sd->ud.dir;
}
- /* given autotrades have no clients you have to trigger this manually otherwise they get stuck in memory limbo bugreport:7495 */
- if( sd->state.autotrade )
- clif->pLoadEndAck(0,sd);
+ // Given autotrades have no clients. You have to trigger this manually, otherwise they get stuck in memory limbo. (bugreport:7495)
+ if (sd->state.autotrade != 0)
+ clif->pLoadEndAck(0, sd);
return 0;
}
@@ -7503,7 +7633,7 @@ static int pc_allskillup(struct map_session_data *sd)
nullpo_ret(sd);
for (i = 0; i < MAX_SKILL_DB; i++) {
- if (sd->status.skill[i].flag != SKILL_FLAG_PERMANENT && sd->status.skill[i].flag != SKILL_FLAG_PERM_GRANTED && sd->status.skill[i].flag != SKILL_FLAG_PLAGIARIZED) {
+ if (sd->status.skill[i].flag == SKILL_FLAG_TEMPORARY || sd->status.skill[i].flag >= SKILL_FLAG_REPLACED_LV_0) {
sd->status.skill[i].lv = (sd->status.skill[i].flag == SKILL_FLAG_TEMPORARY) ? 0 : sd->status.skill[i].flag - SKILL_FLAG_REPLACED_LV_0;
sd->status.skill[i].flag = SKILL_FLAG_PERMANENT;
if (sd->status.skill[i].lv == 0)
@@ -8003,163 +8133,175 @@ static void pc_damage(struct map_session_data *sd, struct block_list *src, unsig
}
}
-/*==========================================
- * Invoked when a player has negative current hp
- *------------------------------------------*/
+/**
+ * Invoked when a character died.
+ *
+ * @param sd The died character.
+ * @param src The unit which caused the death.
+ * @retval 0 Death canceled.
+ * @retval 1 Standard death.
+ * @retval 9 Died in PVP/GVG/BG.
+ *
+ **/
static int pc_dead(struct map_session_data *sd, struct block_list *src)
{
- int i=0,j=0;
- int64 tick = timer->gettick();
+ nullpo_ret(sd);
- nullpo_retr(0, sd);
+ for (int i = 0; i < MAX_PC_DEVOTION; i++) {
+ if (sd->devotion[i] != 0) {
+ struct map_session_data *devsd = map->id2sd(sd->devotion[i]);
- for (j = 0; j < MAX_PC_DEVOTION; j++) {
- if (sd->devotion[j]) {
- struct map_session_data *devsd = map->id2sd(sd->devotion[j]);
- if (devsd)
+ if (devsd != NULL)
status_change_end(&devsd->bl, SC_DEVOTION, INVALID_TIMER);
- sd->devotion[j] = 0;
+
+ sd->devotion[i] = 0;
}
}
- if(sd->status.pet_id > 0 && sd->pd) {
+ if (sd->status.pet_id > 0 && sd->pd != NULL) {
struct pet_data *pd = sd->pd;
- if( !map->list[sd->bl.m].flag.noexppenalty ) {
+
+ if (map->list[sd->bl.m].flag.noexppenalty == 0)
pet->set_intimate(pd, pd->pet.intimate - pd->petDB->die);
- if( pd->pet.intimate < 0 )
- pd->pet.intimate = 0;
- clif->send_petdata(sd,sd->pd,1,pd->pet.intimate);
- }
- if( sd->pd->target_id ) // Unlock all targets...
+
+ if (sd->pd != NULL && sd->pd->target_id != 0) // Unlock all targets.
pet->unlocktarget(sd->pd);
}
- if (sd->status.hom_id > 0){
- if(battle_config.homunculus_auto_vapor && sd->hd)
- homun->vaporize(sd, HOM_ST_REST, true);
- }
+ if (sd->status.hom_id > 0 && sd->hd != NULL && battle_config.homunculus_auto_vapor != 0)
+ homun->vaporize(sd, HOM_ST_REST, true);
- if( sd->md )
- mercenary->delete(sd->md, 3); // Your mercenary soldier has ran away.
+ if (sd->md != NULL)
+ mercenary->delete(sd->md, 3); // Your mercenary soldier ran away.
- if( sd->ed )
+ if (sd->ed != NULL)
elemental->delete(sd->ed, 0);
- // Leave duel if you die [LuzZza]
- if(battle_config.duel_autoleave_when_die) {
- if(sd->duel_group > 0)
+ if (battle_config.duel_autoleave_when_die != 0) { // Leave duel if character died. [LuzZza]
+ if (sd->duel_group > 0)
duel->leave(sd->duel_group, sd);
- if(sd->duel_invite > 0)
+ if (sd->duel_invite > 0)
duel->reject(sd->duel_invite, sd);
}
- if (sd->npc_id && sd->st && sd->st->state != RUN)
+ if (sd->npc_id != 0 && sd->state.using_megaphone == 0 && sd->st != NULL && sd->st->state != RUN)
npc->event_dequeue(sd);
- pc_setglobalreg(sd,script->add_variable("PC_DIE_COUNTER"),sd->die_counter+1);
- pc->setparam(sd, SP_KILLERRID, src?src->id:0);
+ pc_setglobalreg(sd, script->add_variable("PC_DIE_COUNTER"), sd->die_counter + 1);
+ pc->setparam(sd, SP_KILLERRID, (src != NULL) ? src->id : 0);
+
+ if (sd->bg_id != 0) { //TODO: Purge when bgqueue is deemed ok.
+ struct battleground_data *bgd = bg->team_search(sd->bg_id);
- if( sd->bg_id ) {/* TODO: purge when bgqueue is deemed ok */
- struct battleground_data *bgd;
- if( (bgd = bg->team_search(sd->bg_id)) != NULL && bgd->die_event[0] )
+ if (bgd != NULL && bgd->die_event[0] != '\0')
npc->event(sd, bgd->die_event, 0);
}
- for (i = 0; i < VECTOR_LENGTH(sd->script_queues); i++ ) {
+ for (int i = 0; i < VECTOR_LENGTH(sd->script_queues); i++) {
struct script_queue *queue = script->queue(VECTOR_INDEX(sd->script_queues, i));
- if (queue && queue->event_death[0] != '\0')
+
+ if (queue != NULL && queue->event_death[0] != '\0')
npc->event(sd, queue->event_death, 0);
}
- npc->script_event(sd,NPCE_DIE);
+ npc->script_event(sd, NPCE_DIE);
- // Clear anything NPC-related when you die and was interacting with one.
- if ( (sd->npc_id || sd->npc_shopid) && sd->state.dialog) {
- if (sd->state.using_fake_npc) {
+ // Clear anything NPC-related if character died while interacting with one.
+ if (((sd->npc_id != 0 && sd->state.using_megaphone == 0) || sd->npc_shopid != 0) && sd->state.dialog != 0) {
+ if (sd->state.using_fake_npc != 0) {
clif->clearunit_single(sd->npc_id, CLR_OUTSIGHT, sd->fd);
sd->state.using_fake_npc = 0;
}
- if (sd->state.menu_or_input)
+
+ if (sd->state.menu_or_input != 0)
sd->state.menu_or_input = 0;
- if (sd->npc_menu)
+
+ if (sd->npc_menu != 0)
sd->npc_menu = 0;
sd->npc_id = 0;
sd->npc_shopid = 0;
- if (sd->st && sd->st->state != END)
+
+ if (sd->st != NULL && sd->st->state != END)
sd->st->state = END;
}
- /* e.g. not killed through pc->damage */
- if( pc_issit(sd) ) {
+ // E.g. not killed through pc->damage().
+ if (pc_issit(sd))
clif->sc_end(&sd->bl, sd->bl.id, SELF, status->get_sc_icon(SC_SIT));
- }
pc_setdead(sd);
-
clif->party_dead_notification(sd);
- //Reset menu skills/item skills
- if (sd->skillitem)
- sd->skillitem = sd->skillitemlv = 0;
- if (sd->menuskill_id)
- sd->menuskill_id = sd->menuskill_val = 0;
- //Reset ticks.
- sd->hp_loss.tick = sd->sp_loss.tick = sd->hp_regen.tick = sd->sp_regen.tick = 0;
+ pc->autocast_clear(sd); // Unset auto-cast data.
+
+ if (sd->menuskill_id != 0) { // Reset menu skills.
+ sd->menuskill_id = 0;
+ sd->menuskill_val = 0;
+ }
- if ( sd->spiritball )
+ // Reset ticks.
+ sd->hp_loss.tick = 0;
+ sd->sp_loss.tick = 0;
+ sd->hp_regen.tick = 0;
+ sd->sp_regen.tick = 0;
+
+ if (sd->spiritball != 0)
pc->delspiritball(sd, sd->spiritball, 0);
+
if (sd->charm_type != CHARM_TYPE_NONE && sd->charm_count > 0)
pc->del_charm(sd, sd->charm_count, sd->charm_type);
+ int64 tick = timer->gettick();
+
if (src != NULL) {
switch (src->type) {
- case BL_MOB:
- {
- struct mob_data *md = BL_UCAST(BL_MOB, src);
- if (md->target_id==sd->bl.id)
- mob->unlocktarget(md,tick);
- if (battle_config.mobs_level_up && md->status.hp
- && md->level < pc->maxbaselv(sd)
- && !md->guardian_data && md->special_state.ai == AI_NONE// Guardians/summons should not level. [Skotlex]
- ) {
- // monster level up [Valaris]
- clif->misceffect(&md->bl,0);
- md->level++;
- status_calc_mob(md, SCO_NONE);
- status_percent_heal(src,10,0);
-
- if( battle_config.show_mob_info&4 )
- {// update name with new level
- clif->blname_ack(0, &md->bl);
- }
- }
- src = battle->get_master(src); // Maybe Player Summon
+ case BL_MOB: {
+ struct mob_data *md = BL_UCAST(BL_MOB, src);
+
+ if (md->target_id == sd->bl.id)
+ mob->unlocktarget(md, tick);
+
+ if (battle_config.mobs_level_up != 0 && md->status.hp != 0 && md->level < pc->maxbaselv(sd)
+ && md->guardian_data == NULL && md->special_state.ai == AI_NONE) { // Guardians/summons should not level up. [Skotlex]
+ /// Monster level up. [Valaris]
+ clif->misceffect(&md->bl, 0);
+ md->level++;
+ status_calc_mob(md, SCO_NONE);
+ status_percent_heal(src, 10, 0);
+
+ if ((battle_config.show_mob_info & 4) != 0)
+ clif->blname_ack(0, &md->bl); // Update name with new level.
}
+
+ src = battle->get_master(src); // Maybe character summon.
break;
- case BL_PET: //Pass on to master...
- src = &BL_UCAST(BL_PET, src)->msd->bl;
+ }
+ case BL_PET:
+ src = &BL_UCAST(BL_PET, src)->msd->bl; // Pass on to master.
break;
- case BL_HOM:
- src = &BL_UCAST(BL_HOM, src)->master->bl;
+ case BL_HOM:
+ src = &BL_UCAST(BL_HOM, src)->master->bl; // Pass on to master.
break;
- case BL_MER:
- src = &BL_UCAST(BL_MER, src)->master->bl;
+ case BL_MER:
+ src = &BL_UCAST(BL_MER, src)->master->bl; // Pass on to master.
break;
}
}
if (src != NULL && src->type == BL_PC) {
struct map_session_data *ssd = BL_UCAST(BL_PC, src);
+
pc->setparam(ssd, SP_KILLEDRID, sd->bl.id);
npc->script_event(ssd, NPCE_KILLPC);
+ achievement->validate_pc_kill(ssd, sd);
- achievement->validate_pc_kill(ssd, sd); // Achievements [Smokexyz/Hercules]
-
- if (battle_config.pk_mode&2) {
+ if ((battle_config.pk_mode & 2) != 0) {
ssd->status.manner -= 5;
- if(ssd->status.manner < 0)
- sc_start(NULL,src,SC_NOCHAT,100,0,0);
+
+ if (ssd->status.manner < 0)
+ sc_start(NULL, src, SC_NOCHAT, 100, 0, 0);
+
#if 0
// PK/Karma system code (not enabled yet) [celest]
// originally from Kade Online, so i don't know if any of these is correct ^^;
@@ -8171,14 +8313,15 @@ static int pc_dead(struct map_session_data *sd, struct block_list *src)
// If player killed was more evil
sd->status.karma--;
ssd->status.karma--;
- }
- else if (sd->status.karma < ssd->status.karma) // If player killed was more good
+ } else if (sd->status.karma < ssd->status.karma) { // If player killed was more good
ssd->status.karma++;
+ }
// or the PK System way...
if (sd->status.karma > 0) // player killed is dishonourable?
ssd->status.karma--; // honour points earned
+
sd->status.karma++; // honour points lost
// To-do: Receive exp on certain occasions
@@ -8186,137 +8329,156 @@ static int pc_dead(struct map_session_data *sd, struct block_list *src)
}
}
- if( battle_config.bone_drop==2
- || (battle_config.bone_drop==1 && map->list[sd->bl.m].flag.pvp)
- ) {
+ if (battle_config.bone_drop == 2 || (battle_config.bone_drop == 1 && map->list[sd->bl.m].flag.pvp != 0)) {
struct item item_tmp;
- memset(&item_tmp,0,sizeof(item_tmp));
- item_tmp.nameid=ITEMID_SKULL_;
- item_tmp.identify=1;
- item_tmp.card[0]=CARD0_CREATE;
- item_tmp.card[1]=0;
- item_tmp.card[2]=GetWord(sd->status.char_id,0); // CharId
- item_tmp.card[3]=GetWord(sd->status.char_id,1);
+
+ memset(&item_tmp, 0, sizeof(item_tmp));
+ item_tmp.nameid = ITEMID_SKULL_;
+ item_tmp.identify = 1;
+ item_tmp.card[0] = CARD0_CREATE;
+ item_tmp.card[1] = 0;
+ item_tmp.card[2] = GetWord(sd->status.char_id, 0);
+ item_tmp.card[3] = GetWord(sd->status.char_id, 1);
map->addflooritem(&sd->bl, &item_tmp, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
- // activate Steel body if a super novice dies at 99+% exp [celest]
- if ((sd->job & MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && !sd->state.snovice_dead_flag) {
+ // Activate Steel Body if a Super Novice dies at 99+% EXP. [celest]
+ if ((sd->job & MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->state.snovice_dead_flag == 0) {
uint64 next = pc->nextbaseexp(sd);
- if( next == 0 ) next = pc->thisbaseexp(sd);
+
+ if (next == 0)
+ next = pc->thisbaseexp(sd);
+
if (get_percentage64(sd->status.base_exp, next) >= 99) {
sd->state.snovice_dead_flag = 1;
pc->setstand(sd);
status_percent_heal(&sd->bl, 100, 100);
clif->resurrection(&sd->bl, 1);
- if(battle_config.pc_invincible_time)
+
+ if (battle_config.pc_invincible_time != 0)
pc->setinvincibletimer(sd, battle_config.pc_invincible_time);
- sc_start(NULL,&sd->bl,status->skill2sc(MO_STEELBODY),100,1,skill->get_time(MO_STEELBODY,1));
- if(map_flag_gvg2(sd->bl.m))
+
+ sc_start(NULL, &sd->bl, status->skill2sc(MO_STEELBODY), 100, 1, skill->get_time(MO_STEELBODY, 1));
+
+ if (map_flag_gvg2(sd->bl.m))
pc->respawn_timer(INVALID_TIMER, timer->gettick(), sd->bl.id, 0);
+
return 0;
}
}
- // changed penalty options, added death by player if pk_mode [Valaris]
- if (battle_config.death_penalty_type
- && pc->isDeathPenaltyJob(sd->job)
- && !map->list[sd->bl.m].flag.noexppenalty && !map_flag_gvg2(sd->bl.m)
- && !sd->sc.data[SC_BABY] && !sd->sc.data[SC_CASH_DEATHPENALTY]
- && !pc->auto_exp_insurance(sd)
- ) {
+ if (battle_config.death_penalty_type != 0 && pc->isDeathPenaltyJob(sd->job) && !map_flag_gvg2(sd->bl.m)
+ && map->list[sd->bl.m].flag.noexppenalty == 0 && sd->sc.data[SC_BABY] == NULL
+ && sd->sc.data[SC_CASH_DEATHPENALTY] == NULL && !pc->auto_exp_insurance(sd)) {
if (battle_config.death_penalty_base > 0) {
unsigned int base_penalty = 0;
+ int rate = battle_config.death_penalty_base;
+
switch (battle_config.death_penalty_type) {
- case 1:
- base_penalty = (unsigned int) apply_percentrate64(pc->nextbaseexp(sd), battle_config.death_penalty_base, 10000);
- break;
- case 2:
- base_penalty = (unsigned int) apply_percentrate64(sd->status.base_exp, battle_config.death_penalty_base, 10000);
- break;
+ case 1:
+ base_penalty = (unsigned int)apply_percentrate64(pc->nextbaseexp(sd), rate, 10000);
+ break;
+ case 2:
+ base_penalty = (unsigned int)apply_percentrate64(sd->status.base_exp, rate, 10000);
+ break;
}
if (base_penalty != 0) {
- if (battle_config.pk_mode && src && src->type==BL_PC)
- base_penalty*=2;
- if( sd->status.mod_death != 100 )
+ if (battle_config.pk_mode != 0 && src != NULL && src->type == BL_PC)
+ base_penalty *= 2;
+
+ if (sd->status.mod_death != 100)
base_penalty = base_penalty * sd->status.mod_death / 100;
+
sd->status.base_exp -= min(sd->status.base_exp, base_penalty);
- clif->updatestatus(sd,SP_BASEEXP);
+ clif->updatestatus(sd, SP_BASEEXP);
}
}
- if(battle_config.death_penalty_job > 0) {
+ if (battle_config.death_penalty_job > 0) {
unsigned int job_penalty = 0;
+ int rate = battle_config.death_penalty_job;
switch (battle_config.death_penalty_type) {
- case 1:
- job_penalty = (unsigned int) apply_percentrate64(pc->nextjobexp(sd), battle_config.death_penalty_job, 10000);
- break;
- case 2:
- job_penalty = (unsigned int) apply_percentrate64(sd->status.job_exp, battle_config.death_penalty_job, 10000);
- break;
+ case 1:
+ job_penalty = (unsigned int)apply_percentrate64(pc->nextjobexp(sd), rate, 10000);
+ break;
+ case 2:
+ job_penalty = (unsigned int)apply_percentrate64(sd->status.job_exp, rate, 10000);
+ break;
}
if (job_penalty != 0) {
- if (battle_config.pk_mode && src && src->type==BL_PC)
- job_penalty*=2;
- if( sd->status.mod_death != 100 )
+ if (battle_config.pk_mode != 0 && src != NULL && src->type == BL_PC)
+ job_penalty *= 2;
+
+ if (sd->status.mod_death != 100)
job_penalty = job_penalty * sd->status.mod_death / 100;
+
sd->status.job_exp -= min(sd->status.job_exp, job_penalty);
- clif->updatestatus(sd,SP_JOBEXP);
+ clif->updatestatus(sd, SP_JOBEXP);
}
}
- if (battle_config.zeny_penalty > 0 && !map->list[sd->bl.m].flag.nozenypenalty) {
+ if (battle_config.zeny_penalty > 0 && map->list[sd->bl.m].flag.nozenypenalty == 0) {
int zeny_penalty = apply_percentrate(sd->status.zeny, battle_config.zeny_penalty, 10000);
+
if (zeny_penalty != 0)
pc->payzeny(sd, zeny_penalty, LOG_TYPE_PICKDROP_PLAYER, NULL);
}
}
- if(map->list[sd->bl.m].flag.pvp_nightmaredrop) {
- // Moved this outside so it works when PVP isn't enabled and during pk mode [Ancyker]
- for(j=0;j<map->list[sd->bl.m].drop_list_count;j++){
- int id = map->list[sd->bl.m].drop_list[j].drop_id;
- int type = map->list[sd->bl.m].drop_list[j].drop_type;
- int per = map->list[sd->bl.m].drop_list[j].drop_per;
- if(id == 0)
+ if (map->list[sd->bl.m].flag.pvp_nightmaredrop != 0) {
+ // Moved this outside so it works when PVP isn't enabled and during pk mode. [Ancyker]
+ for (int i = 0; i < map->list[sd->bl.m].drop_list_count; i++) {
+ int id = map->list[sd->bl.m].drop_list[i].drop_id;
+ int type = map->list[sd->bl.m].drop_list[i].drop_type;
+ int per = map->list[sd->bl.m].drop_list[i].drop_per;
+
+ if (id == 0)
continue;
- if(id == -1){
- int eq_num = 0, eq_n[MAX_INVENTORY], k;
- memset(eq_n,0,sizeof(eq_n));
- for(i = 0; i < sd->status.inventorySize; i++) {
- if( (type == 1 && !sd->status.inventory[i].equip)
- || (type == 2 && sd->status.inventory[i].equip)
- || type == 3)
- {
+
+ if (id == -1) {
+ int eq_num = 0;
+ int eq_n[MAX_INVENTORY];
+
+ memset(eq_n, 0, sizeof(eq_n));
+
+ for (int j = 0; j < sd->status.inventorySize; j++) {
+ bool is_equipped = (sd->status.inventory[j].equip != 0);
+
+ if ((type == 1 && !is_equipped) || (type == 2 && is_equipped) || type == 3) {
+ int k;
+
ARR_FIND(0, sd->status.inventorySize, k, eq_n[k] <= 0);
+
if (k < sd->status.inventorySize)
- eq_n[k] = i;
+ eq_n[k] = j;
eq_num++;
}
}
- if(eq_num > 0){
- int n = eq_n[rnd()%eq_num];
- if(rnd()%10000 < per){
- if(sd->status.inventory[n].equip)
+
+ if (eq_num > 0) {
+ int n = eq_n[rnd() % eq_num];
+
+ if (rnd() % 10000 < per) {
+ if (sd->status.inventory[n].equip != 0)
pc->unequipitem(sd, n, PCUNEQUIPITEM_RECALC|PCUNEQUIPITEM_FORCE);
- pc->dropitem(sd,n,1);
+
+ pc->dropitem(sd, n, 1);
}
}
- }
- else if(id > 0){
- for( i = 0; i < sd->status.inventorySize; i++) {
- if(sd->status.inventory[i].nameid == id
- && rnd()%10000 < per
- && ((type == 1 && !sd->status.inventory[i].equip)
- || (type == 2 && sd->status.inventory[i].equip)
- || type == 3) ){
- if(sd->status.inventory[i].equip)
- pc->unequipitem(sd, i, PCUNEQUIPITEM_RECALC|PCUNEQUIPITEM_FORCE);
- pc->dropitem(sd,i,1);
+ } else if (id > 0) {
+ for (int j = 0; j < sd->status.inventorySize; j++) {
+ bool is_equipped = (sd->status.inventory[j].equip != 0);
+
+ if (((type == 1 && !is_equipped) || (type == 2 && is_equipped) || type == 3)
+ && sd->status.inventory[j].nameid == id && rnd() % 10000 < per) {
+ if (is_equipped)
+ pc->unequipitem(sd, j, PCUNEQUIPITEM_RECALC|PCUNEQUIPITEM_FORCE);
+
+ pc->dropitem(sd, j, 1);
break;
}
}
@@ -8324,46 +8486,51 @@ static int pc_dead(struct map_session_data *sd, struct block_list *src)
}
}
- // Remove autotrade to prevent autotrading from save point
- if( (sd->state.standalone || sd->state.autotrade)
- && (map->list[sd->bl.m].flag.pvp || map->list[sd->bl.m].flag.gvg)
- ) {
+ // Remove autotrade to prevent autotrading from save point.
+ if ((map->list[sd->bl.m].flag.pvp != 0 || map->list[sd->bl.m].flag.gvg != 0)
+ && (sd->state.standalone != 0 || sd->state.autotrade != 0)) {
sd->state.autotrade = 0;
sd->state.standalone = 0;
- pc->autotrade_update(sd,PAUC_REMOVE);
+ pc->autotrade_update(sd, PAUC_REMOVE);
map->quit(sd);
}
- // pvp
- // disable certain pvp functions on pk_mode [Valaris]
- if( map->list[sd->bl.m].flag.pvp && !battle_config.pk_mode && !map->list[sd->bl.m].flag.pvp_nocalcrank ) {
+ // Disable certain PVP functions on pk_mode. [Valaris]
+ if (map->list[sd->bl.m].flag.pvp != 0 && battle_config.pk_mode == 0
+ && map->list[sd->bl.m].flag.pvp_nocalcrank == 0) {
sd->pvp_point -= 5;
sd->pvp_lost++;
+
if (src != NULL && src->type == BL_PC) {
struct map_session_data *ssd = BL_UCAST(BL_PC, src);
+
ssd->pvp_point++;
ssd->pvp_won++;
}
- if( sd->pvp_point < 0 )
- {
- timer->add(tick+1, pc->respawn_timer,sd->bl.id,0);
+
+ if (sd->pvp_point < 0) {
+ timer->add(tick + 1, pc->respawn_timer, sd->bl.id, 0);
return 1|8;
}
}
- //GvG
- if( map_flag_gvg2(sd->bl.m) ) {
- timer->add(tick+1, pc->respawn_timer, sd->bl.id, 0);
+
+ // GVG
+ if (map_flag_gvg2(sd->bl.m)) {
+ timer->add(tick + 1, pc->respawn_timer, sd->bl.id, 0);
return 1|8;
- } else if( sd->bg_id ) {
+ }
+
+ if (sd->bg_id != 0) {
struct battleground_data *bgd = bg->team_search(sd->bg_id);
- if( bgd && bgd->mapindex > 0 ) { // Respawn by BG
- timer->add(tick+1000, pc->respawn_timer, sd->bl.id, 0);
+
+ if (bgd != NULL && bgd->mapindex > 0) { // Respawn by BG.
+ timer->add(tick + 1000, pc->respawn_timer, sd->bl.id, 0);
return 1|8;
}
}
- //Reset "can log out" tick.
- if( battle_config.prevent_logout )
+ // Reset "can log out" tick.
+ if (battle_config.prevent_logout != 0)
sd->canlog_tick = timer->gettick() - battle_config.prevent_logout;
return 1;
@@ -8786,6 +8953,10 @@ static int pc_itemheal(struct map_session_data *sd, int itemid, int hp, int sp)
// 2014 Halloween Event : Pumpkin Bonus
if ( sd->sc.data[SC_MTF_PUMPKIN] && itemid == ITEMID_PUMPKIN )
hp += (int)(hp * sd->sc.data[SC_MTF_PUMPKIN]->val1/100);
+
+ // Activation Potion
+ if (sd->sc.data[SC_VITALIZE_POTION] != NULL)
+ hp += hp * sd->sc.data[SC_VITALIZE_POTION]->val3 / 100;
}
if(sp) {
bonus = 100 + (sd->battle_status.int_<<1)
@@ -9180,6 +9351,72 @@ static int pc_changelook(struct map_session_data *sd, int type, int val)
return 0;
}
+/**
+ * Hides a character.
+ *
+ * @param sd The character to hide.
+ * @param show_msg Whether to show message to the character or not.
+ *
+ **/
+static void pc_hide(struct map_session_data *sd, bool show_msg)
+{
+ nullpo_retv(sd);
+
+ clif->clearunit_area(&sd->bl, CLR_OUTSIGHT);
+ sd->sc.option |= OPTION_INVISIBLE;
+ sd->vd.class = INVISIBLE_CLASS;
+
+ if (show_msg)
+ clif->message(sd->fd, atcommand->msgsd(sd, 11)); // Invisible: On
+
+ // Decrement the number of pvp players on the map.
+ map->list[sd->bl.m].users_pvp--;
+
+ if (map->list[sd->bl.m].flag.pvp != 0 && map->list[sd->bl.m].flag.pvp_nocalcrank == 0
+ && sd->pvp_timer != INVALID_TIMER) { // Unregister the player for ranking.
+ timer->delete(sd->pvp_timer, pc->calc_pvprank_timer);
+ sd->pvp_timer = INVALID_TIMER;
+ }
+
+ clif->changeoption(&sd->bl);
+}
+
+/**
+ * Unhides a character.
+ *
+ * @param sd The character to unhide.
+ * @param show_msg Whether to show message to the character or not.
+ *
+ **/
+static void pc_unhide(struct map_session_data *sd, bool show_msg)
+{
+ nullpo_retv(sd);
+
+ sd->sc.option &= ~OPTION_INVISIBLE;
+
+ if (sd->disguise != -1)
+ status->set_viewdata(&sd->bl, sd->disguise);
+ else
+ status->set_viewdata(&sd->bl, sd->status.class);
+
+ if (show_msg)
+ clif->message(sd->fd, atcommand->msgsd(sd, 10)); // Invisible: Off
+
+ // Increment the number of pvp players on the map.
+ map->list[sd->bl.m].users_pvp++;
+
+ if (map->list[sd->bl.m].flag.pvp != 0 && map->list[sd->bl.m].flag.pvp_nocalcrank == 0) // Register the player for ranking.
+ sd->pvp_timer = timer->add(timer->gettick() + 200, pc->calc_pvprank_timer, sd->bl.id, 0);
+
+ // bugreport:2266
+ map->foreachinmovearea(clif->insight, &sd->bl, AREA_SIZE, sd->bl.x, sd->bl.y, BL_ALL, &sd->bl);
+
+ if (sd->disguise != -1)
+ clif->spawn_unit(&sd->bl, AREA_WOS);
+
+ clif->changeoption(&sd->bl);
+}
+
/*==========================================
* Give an option (type) to player (sd) and display it to client
*------------------------------------------*/
@@ -9191,7 +9428,13 @@ static int pc_setoption(struct map_session_data *sd, int type)
//Option has to be changed client-side before the class sprite or it won't always work (eg: Wedding sprite) [Skotlex]
sd->sc.option=type;
- clif->changeoption(&sd->bl);
+
+ if ((p_type & OPTION_INVISIBLE) != 0 && (type & OPTION_INVISIBLE) == 0) // Unhide character.
+ pc->unhide(sd, false);
+ else if ((p_type & OPTION_INVISIBLE) == 0 && (type & OPTION_INVISIBLE) != 0) // Hide character.
+ pc->hide(sd, false);
+ else
+ clif->changeoption(&sd->bl);
if( (type&OPTION_RIDING && !(p_type&OPTION_RIDING)) || (type&OPTION_DRAGON && !(p_type&OPTION_DRAGON) && pc->checkskill(sd,RK_DRAGONTRAINING) > 0) ) {
// Mounting
@@ -10144,141 +10387,163 @@ static void pc_equipitem_pos(struct map_session_data *sd, struct item_data *id,
}
}
-/*==========================================
- * Equip item on player sd at req_pos from inventory index n
- * Return:
- * 0 = fail
- * 1 = success
- *------------------------------------------*/
+/**
+ * Attempts to equip an item.
+ *
+ * @param sd The related character.
+ * @param n The item's inventory index.
+ * @param req_pos The equipment slot, where the item should be equipped. (See enum equip_pos.)
+ * @return 0 on failure, 1 on success.
+ *
+ **/
static int pc_equipitem(struct map_session_data *sd, int n, int req_pos)
{
- int i,pos,flag=0,iflag;
- struct item_data *id;
-
nullpo_ret(sd);
if (n < 0 || n >= sd->status.inventorySize) {
- clif->equipitemack(sd,0,0,EIA_FAIL);
+ clif->equipitemack(sd, 0, 0, EIA_FAIL);
return 0;
}
- if( DIFF_TICK(sd->canequip_tick,timer->gettick()) > 0 )
- {
- clif->equipitemack(sd,n,0,EIA_FAIL);
+ // If the character is in berserk mode, the item can't be equipped.
+ if (sd->sc.count != 0 && (sd->sc.data[SC_BERSERK] != NULL || sd->sc.data[SC_NO_SWITCH_EQUIP] != NULL)) {
+ clif->equipitemack(sd, n, 0, EIA_FAIL);
return 0;
}
- id = sd->inventory_data[n];
- pos = pc->equippoint(sd,n); //With a few exceptions, item should go in all specified slots.
+ if (battle_config.battle_log != 0)
+ ShowInfo("equip %d(%d) %x:%x\n", sd->status.inventory[n].nameid, n, sd->status.inventory[n].equip,
+ (unsigned int)req_pos);
- if(battle_config.battle_log)
- ShowInfo("equip %d(%d) %x:%x\n", sd->status.inventory[n].nameid, n, (unsigned int)(id ? id->equip : 0), (unsigned int)req_pos);
- if(!pc->isequip(sd,n) || !(pos&req_pos) || sd->status.inventory[n].equip != 0 || (sd->status.inventory[n].attribute & ATTR_BROKEN) != 0 ) { // [Valaris]
- // FIXME: pc->isequip: equip level failure uses 2 instead of 0
- clif->equipitemack(sd,n,0,EIA_FAIL); // fail
+ if (DIFF_TICK(sd->canequip_tick, timer->gettick()) > 0) {
+ clif->equipitemack(sd, n, 0, EIA_FAIL);
return 0;
}
- if (sd->sc.data[SC_BERSERK] || sd->sc.data[SC_NO_SWITCH_EQUIP])
- {
- clif->equipitemack(sd,n,0,EIA_FAIL); // fail
+ int pos = pc->equippoint(sd, n); // With a few exceptions, item should go in all specified slots.
+
+ if (pc->isequip(sd,n) == 0 || (pos & req_pos) == 0 || sd->status.inventory[n].equip != 0
+ || (sd->status.inventory[n].attribute & ATTR_BROKEN) != 0) {
+ clif->equipitemack(sd, n, 0, EIA_FAIL);
return 0;
+ }
+
+ if (sd->inventory_data[n]->flag.bindonequip != 0 && sd->status.inventory[n].bound == 0) {
+ sd->status.inventory[n].bound = IBT_CHARACTER;
+ clif->notify_bounditem(sd, n);
}
- /* won't fail from this point onwards */
- if( id->flag.bindonequip && !sd->status.inventory[n].bound ) {
- sd->status.inventory[n].bound = (unsigned char)IBT_CHARACTER;
- clif->notify_bounditem(sd,n);
- }
-
- if(pos == EQP_ACC) { //Accesories should only go in one of the two,
- pos = req_pos&EQP_ACC;
- if (pos == EQP_ACC) //User specified both slots..
- pos = sd->equip_index[EQI_ACC_R] >= 0 ? EQP_ACC_L : EQP_ACC_R;
- } else if(pos == EQP_ARMS && id->equip == EQP_HAND_R) { //Dual wield capable weapon.
- pos = (req_pos&EQP_ARMS);
- if (pos == EQP_ARMS) //User specified both slots, pick one for them.
- pos = sd->equip_index[EQI_HAND_R] >= 0 ? EQP_HAND_L : EQP_HAND_R;
- } else if(pos == EQP_SHADOW_ACC) { //Accesories should only go in one of the two,
- pos = req_pos&EQP_SHADOW_ACC;
- if (pos == EQP_SHADOW_ACC) //User specified both slots..
- pos = sd->equip_index[EQI_SHADOW_ACC_R] >= 0 ? EQP_SHADOW_ACC_L : EQP_SHADOW_ACC_R;
- } else if( pos == EQP_SHADOW_ARMS && id->equip == EQP_SHADOW_WEAPON) { //Dual wield capable weapon.
- pos = (req_pos&EQP_SHADOW_ARMS);
- if (pos == EQP_SHADOW_ARMS) //User specified both slots, pick one for them.
- pos = sd->equip_index[EQI_SHADOW_WEAPON] >= 0 ? EQP_SHADOW_SHIELD : EQP_SHADOW_WEAPON;
- }
-
- if (pos&EQP_HAND_R && battle_config.use_weapon_skill_range&BL_PC) {
- //Update skill-block range database when weapon range changes. [Skotlex]
- i = sd->equip_index[EQI_HAND_R];
- if (i < 0 || !sd->inventory_data[i]) //No data, or no weapon equipped
+ if (pos == EQP_ACC) { // Accesories should only go in one of the two.
+ pos = req_pos & EQP_ACC;
+
+ if (pos == EQP_ACC) // User specified both slots.
+ pos = (sd->equip_index[EQI_ACC_R] >= 0) ? EQP_ACC_L : EQP_ACC_R;
+ } else if (pos == EQP_ARMS && sd->inventory_data[n]->equip == EQP_HAND_R) { // Dual wield capable weapon.
+ pos = req_pos & EQP_ARMS;
+
+ if (pos == EQP_ARMS) // User specified both slots, pick one for them.
+ pos = (sd->equip_index[EQI_HAND_R] >= 0) ? EQP_HAND_L : EQP_HAND_R;
+ } else if (pos == EQP_SHADOW_ACC) { // Accesories should only go in one of the two,
+ pos = req_pos & EQP_SHADOW_ACC;
+
+ if (pos == EQP_SHADOW_ACC) // User specified both slots.
+ pos = (sd->equip_index[EQI_SHADOW_ACC_R] >= 0) ? EQP_SHADOW_ACC_L : EQP_SHADOW_ACC_R;
+ } else if (pos == EQP_SHADOW_ARMS && sd->inventory_data[n]->equip == EQP_SHADOW_WEAPON) { // Dual wield capable weapon.
+ pos = req_pos & EQP_SHADOW_ARMS;
+
+ if (pos == EQP_SHADOW_ARMS) // User specified both slots, pick one for them.
+ pos = (sd->equip_index[EQI_SHADOW_WEAPON] >= 0) ? EQP_SHADOW_SHIELD : EQP_SHADOW_WEAPON;
+ }
+
+ int flag = 0;
+
+ // Update skill-block range database when weapon range changes. [Skotlex]
+ if ((pos & EQP_HAND_R) != 0 && (battle_config.use_weapon_skill_range & BL_PC) != 0) {
+ int idx = sd->equip_index[EQI_HAND_R];
+
+ if (idx < 0 || sd->inventory_data[idx] == NULL) // No data, or no weapon equipped.
flag = 1;
else
- flag = id->range != sd->inventory_data[i]->range;
+ flag = (sd->inventory_data[n]->range != sd->inventory_data[idx]->range) ? 1 : 0;
}
- for(i=0;i<EQI_MAX;i++) {
- if(pos & pc->equip_pos[i]) {
- if(sd->equip_index[i] >= 0) //Slot taken, remove item from there.
+ for (int i = 0; i < EQI_MAX; i++) {
+ if ((pos & pc->equip_pos[i]) != 0) {
+ if (sd->equip_index[i] >= 0) // Slot taken, remove item from there.
pc->unequipitem(sd, sd->equip_index[i], PCUNEQUIPITEM_FORCE);
sd->equip_index[i] = n;
}
}
- if(pos==EQP_AMMO){
- clif->arrowequip(sd,n);
- clif->arrow_fail(sd,3);
+ if (pos == EQP_AMMO) {
+ clif->arrowequip(sd, n);
+ clif->arrow_fail(sd, 3);
+ } else {
+ clif->equipitemack(sd, n, pos, EIA_SUCCESS);
}
- else
- clif->equipitemack(sd,n,pos,EIA_SUCCESS);
- sd->status.inventory[n].equip=pos;
+ sd->status.inventory[n].equip = pos;
+ pc->equipitem_pos(sd, sd->inventory_data[n], n, pos);
+ pc->checkallowskill(sd); // Check if status changes should be halted.
- pc->equipitem_pos(sd, id, n, pos);
+ int iflag = sd->npc_item_flag;
- pc->checkallowskill(sd); //Check if status changes should be halted.
- iflag = sd->npc_item_flag;
+ // Check for combos. (MUST be done before status->calc_pc()!)
+ if (sd->inventory_data[n]->combos_count != 0)
+ pc->checkcombo(sd, sd->inventory_data[n]);
- /* check for combos (MUST be before status_calc_pc) */
- if( id->combos_count )
- pc->checkcombo(sd,id);
- if(itemdb_isspecial(sd->status.inventory[n].card[0]))
- ; //No cards
- else {
- for( i = 0; i < id->slot; i++ ) {
- struct item_data *data;
- if (!sd->status.inventory[n].card[i])
+ if (!itemdb_isspecial(sd->status.inventory[n].card[0])) {
+ for (int i = 0; i < sd->inventory_data[n]->slot; i++) {
+ if (sd->status.inventory[n].card[i] == 0)
continue;
- if ( ( data = itemdb->exists(sd->status.inventory[n].card[i]) ) != NULL ) {
- if( data->combos_count )
- pc->checkcombo(sd,data);
- }
+
+ struct item_data *data = itemdb->exists(sd->status.inventory[n].card[i]);
+
+ if (data != NULL && data->combos_count != 0)
+ pc->checkcombo(sd, data);
}
}
- status_calc_pc(sd,SCO_NONE);
- if (flag) //Update skill data
+ status_calc_pc(sd, SCO_NONE);
+
+ if (flag != 0) // Update skill data.
clif->skillinfoblock(sd);
+
+ // Execute equip script. [Skotlex]
+ struct item_data *equip_data = sd->inventory_data[n];
+ struct map_zone_data *zone = map->list[sd->bl.m].zone;
+ int dis_items_cnt = zone->disabled_items_count;
- //OnEquip script [Skotlex]
- if (id->equip_script)
- script->run_item_equip_script(sd, id, npc->fake_nd->bl.id);
+ if (equip_data->equip_script != NULL) {
+ int idx;
- if(itemdb_isspecial(sd->status.inventory[n].card[0]))
- ; //No cards
- else {
- for( i = 0; i < id->slot; i++ ) {
- struct item_data *data;
- if (!sd->status.inventory[n].card[i])
+ ARR_FIND(0, dis_items_cnt, idx, zone->disabled_items[idx] == equip_data->nameid);
+
+ if (idx == dis_items_cnt)
+ script->run_item_equip_script(sd, equip_data, npc->fake_nd->bl.id);
+ }
+
+ struct item *equip = &sd->status.inventory[n];
+
+ if (!itemdb_isspecial(equip->card[0])) {
+ for (int slot = 0; slot < equip_data->slot; slot++) {
+ if (equip->card[slot] == 0)
continue;
- if ( ( data = itemdb->exists(sd->status.inventory[n].card[i]) ) != NULL ) {
- if (data->equip_script)
- script->run_item_equip_script(sd, data, npc->fake_nd->bl.id);
+
+ struct item_data *card_data = itemdb->exists(equip->card[slot]);
+
+ if (card_data != NULL && card_data->equip_script != NULL) {
+ int idx;
+
+ ARR_FIND(0, dis_items_cnt, idx, zone->disabled_items[idx] == card_data->nameid);
+
+ if (idx == dis_items_cnt)
+ script->run_item_equip_script(sd, card_data, npc->fake_nd->bl.id);
}
}
}
+
sd->npc_item_flag = iflag;
return 1;
@@ -10350,19 +10615,17 @@ static void pc_unequipitem_pos(struct map_session_data *sd, int n, int pos)
}
}
-/*==========================================
- * Called when attemting to unequip an item from player
- * type: @see enum pc_unequipitem_flag
- * Return:
- * 0 = fail
- * 1 = success
- *------------------------------------------*/
+/**
+ * Attempts to unequip an item.
+ *
+ * @param sd The related character.
+ * @param n The item's inventory index.
+ * @param flag Modifier for additional actions. (See enum pc_unequipitem_flag.)
+ * @return 0 on failure, 1 on success.
+ *
+ **/
static int pc_unequipitem(struct map_session_data *sd, int n, int flag)
{
- int i, iflag;
- bool status_calc = false;
- int pos;
-
nullpo_ret(sd);
if (n < 0 || n >= sd->status.inventorySize) {
@@ -10370,127 +10633,128 @@ static int pc_unequipitem(struct map_session_data *sd, int n, int flag)
return 0;
}
- // if player is berserk then cannot unequip
- if (!(flag & PCUNEQUIPITEM_FORCE) && sd->sc.count && (sd->sc.data[SC_BERSERK] || sd->sc.data[SC_NO_SWITCH_EQUIP])) {
+ // If the character is in berserk mode, the item can't be unequipped.
+ if (sd->sc.count != 0 && (sd->sc.data[SC_BERSERK] != NULL || sd->sc.data[SC_NO_SWITCH_EQUIP] != NULL)
+ && (flag & PCUNEQUIPITEM_FORCE) == 0) {
clif->unequipitemack(sd, n, 0, UIA_FAIL);
return 0;
}
- if (!(flag & PCUNEQUIPITEM_FORCE) && sd->sc.count && sd->sc.data[SC_KYOUGAKU]) {
+ if ((flag & PCUNEQUIPITEM_FORCE) == 0 && sd->sc.count != 0 && sd->sc.data[SC_KYOUGAKU] != NULL) {
clif->unequipitemack(sd, n, 0, UIA_FAIL);
return 0;
}
- if (battle_config.battle_log)
+ if (battle_config.battle_log != 0)
ShowInfo("unequip %d %x:%x\n", n, (unsigned int)(pc->equippoint(sd, n)), sd->status.inventory[n].equip);
- if (sd->status.inventory[n].equip == 0) { //Nothing to unequip
+ if (sd->status.inventory[n].equip == 0) { // Nothing to unequip.
clif->unequipitemack(sd, n, 0, UIA_FAIL);
return 0;
}
- for (i = 0; i < EQI_MAX; i++) {
- if (sd->status.inventory[n].equip & pc->equip_pos[i])
+ for (int i = 0; i < EQI_MAX; i++) {
+ if ((sd->status.inventory[n].equip & pc->equip_pos[i]) != 0)
sd->equip_index[i] = -1;
}
- pos = sd->status.inventory[n].equip;
- pc->unequipitem_pos(sd, n, pos);
+ int pos = sd->status.inventory[n].equip;
+ pc->unequipitem_pos(sd, n, pos);
clif->unequipitemack(sd, n, pos, UIA_SUCCESS);
- if ((pos & EQP_ARMS) &&
- sd->weapontype1 == W_FIST && sd->weapontype2 == W_FIST && (sd->sc.data[SC_TK_SEVENWIND] == NULL || sd->sc.data[SC_ASPERSIO] != NULL)) //Check for seven wind (but not level seven!)
+ if ((pos & EQP_ARMS) != 0 && sd->weapontype1 == W_FIST && sd->weapontype2 == W_FIST
+ && (sd->sc.data[SC_TK_SEVENWIND] == NULL || sd->sc.data[SC_ASPERSIO] != NULL)) { // Check for Seven Wind. (But not level seven!)
skill->enchant_elemental_end(&sd->bl, -1);
+ }
- if (pos & EQP_ARMOR) {
- // On Armor Change...
+ if ((pos & EQP_ARMOR) != 0) {
status_change_end(&sd->bl, SC_BENEDICTIO, INVALID_TIMER);
status_change_end(&sd->bl, SC_ARMOR_RESIST, INVALID_TIMER);
}
#ifdef RENEWAL
- if (battle->bc->bow_unequip_arrow && pos&EQP_ARMS && sd->equip_index[EQI_AMMO] > 0)
+ if (battle->bc->bow_unequip_arrow != 0 && (pos & EQP_ARMS) != 0 && sd->equip_index[EQI_AMMO] > 0)
pc->unequipitem(sd, sd->equip_index[EQI_AMMO], PCUNEQUIPITEM_FORCE);
#endif
- if( sd->state.autobonus&pos )
- sd->state.autobonus &= ~sd->status.inventory[n].equip; //Check for activated autobonus [Inkfish]
+ if ((sd->state.autobonus & pos) != 0) // Check for activated autobonus. [Inkfish]
+ sd->state.autobonus &= ~sd->status.inventory[n].equip;
sd->status.inventory[n].equip = 0;
- iflag = sd->npc_item_flag;
- /* check for combos (MUST be before status_calc_pc) */
+ bool status_calc = false;
+ int iflag = sd->npc_item_flag;
+
+ // Check for combos. (MUST be done before status->calc_pc()!)
if (sd->inventory_data[n] != NULL) {
- if (sd->inventory_data[n]->combos_count) {
- if (pc->removecombo(sd, sd->inventory_data[n]))
- status_calc = true;
- }
- if (itemdb_isspecial(sd->status.inventory[n].card[0]) == false) {
- for (i = 0; i < sd->inventory_data[n]->slot; i++) {
- struct item_data *data;
+ if (sd->inventory_data[n]->combos_count != 0 && pc->removecombo(sd, sd->inventory_data[n]) != 0)
+ status_calc = true;
+
+ if (!itemdb_isspecial(sd->status.inventory[n].card[0])) {
+ for (int i = 0; i < sd->inventory_data[n]->slot; i++) {
if (sd->status.inventory[n].card[i] == 0)
continue;
- if ((data = itemdb->exists(sd->status.inventory[n].card[i])) != NULL) {
- if (data->combos_count) {
- if (pc->removecombo(sd, data))
- status_calc = true;
- }
- }
+
+ struct item_data *data = itemdb->exists(sd->status.inventory[n].card[i]);
+
+ if (data != NULL && data->combos_count != 0 && pc->removecombo(sd, data) != 0)
+ status_calc = true;
}
}
- /* Item Options checking */
- for (i = 0; i < MAX_ITEM_OPTIONS; i++) {
- struct itemdb_option *ito = NULL;
- int16 item_option = sd->status.inventory[n].option[i].index;
- if (item_option <= 0)
+ // Check item options.
+ for (int i = 0; i < MAX_ITEM_OPTIONS; i++) {
+ if (sd->status.inventory[n].option[i].index <= 0)
continue;
- if ((ito = itemdb->option_exists(sd->status.inventory[n].option[i].index)) == NULL)
+
+ if (itemdb->option_exists(sd->status.inventory[n].option[i].index) == NULL)
continue;
status_calc = true;
}
}
- if (flag & PCUNEQUIPITEM_RECALC || status_calc) {
+ if ((flag & PCUNEQUIPITEM_RECALC) != 0 || status_calc) {
pc->checkallowskill(sd);
status_calc_pc(sd, SCO_NONE);
}
- if (sd->sc.data[SC_CRUCIS] && battle->check_undead(sd->battle_status.race, sd->battle_status.def_ele) == false)
+ if (sd->sc.data[SC_CRUCIS] != NULL && !battle->check_undead(sd->battle_status.race, sd->battle_status.def_ele))
status_change_end(&sd->bl, SC_CRUCIS, INVALID_TIMER);
- //OnUnEquip script [Skotlex]
+ // Execute unequip script. [Skotlex]
if (sd->inventory_data[n] != NULL) {
- if (sd->inventory_data[n]->unequip_script != NULL) {
- if (battle_config.unequip_restricted_equipment & 1) {
- ARR_FIND(0, map->list[sd->bl.m].zone->disabled_items_count, i, map->list[sd->bl.m].zone->disabled_items[i] == sd->status.inventory[n].nameid);
- if (i == map->list[sd->bl.m].zone->disabled_items_count)
- script->run_item_unequip_script(sd, sd->inventory_data[n], npc->fake_nd->bl.id);
- }
- else
- script->run_item_unequip_script(sd, sd->inventory_data[n], npc->fake_nd->bl.id);
+ struct item_data *equip_data = sd->inventory_data[n];
+ struct map_zone_data *zone = map->list[sd->bl.m].zone;
+ int dis_items_cnt = zone->disabled_items_count;
+
+ if (equip_data->unequip_script != NULL) {
+ int idx;
+
+ ARR_FIND(0, dis_items_cnt, idx, zone->disabled_items[idx] == equip_data->nameid);
+
+ if (idx == dis_items_cnt)
+ script->run_item_unequip_script(sd, equip_data, npc->fake_nd->bl.id);
}
- if (itemdb_isspecial(sd->status.inventory[n].card[0]) == false) {
- for (i = 0; i < sd->inventory_data[n]->slot; i++) {
- struct item_data *data = NULL;
- if (sd->status.inventory[n].card[i] == 0)
+
+ struct item *equip = &sd->status.inventory[n];
+
+ if (!itemdb_isspecial(equip->card[0])) {
+ for (int slot = 0; slot < equip_data->slot; slot++) {
+ if (equip->card[slot] == 0)
continue;
- if ((data = itemdb->exists(sd->status.inventory[n].card[i])) != NULL) {
- if (data->unequip_script) {
- if (battle_config.unequip_restricted_equipment & 2) {
- int j;
- ARR_FIND(0, map->list[sd->bl.m].zone->disabled_items_count, j, map->list[sd->bl.m].zone->disabled_items[j] == sd->status.inventory[n].card[i]);
- if (j == map->list[sd->bl.m].zone->disabled_items_count)
- script->run_item_unequip_script(sd, data, npc->fake_nd->bl.id);
- } else {
- script->run_item_unequip_script(sd, data, npc->fake_nd->bl.id);
- }
- }
- }
+ struct item_data *card_data = itemdb->exists(equip->card[slot]);
+
+ if (card_data != NULL && card_data->unequip_script != NULL) {
+ int idx;
+ ARR_FIND(0, dis_items_cnt, idx, zone->disabled_items[idx] == card_data->nameid);
+
+ if (idx == dis_items_cnt)
+ script->run_item_unequip_script(sd, card_data, npc->fake_nd->bl.id);
+ }
}
}
}
@@ -11127,7 +11391,7 @@ static int pc_charm_timer(int tid, int64 tick, int id, intptr_t data)
* @param max Maximum amount of charms to add.
* @param type Charm type (@see spirit_charm_types)
*/
-static void pc_add_charm(struct map_session_data *sd, int interval, int max, int type)
+static void pc_add_charm(struct map_session_data *sd, int interval, int max, enum spirit_charm_types type)
{
int tid, i;
@@ -11169,7 +11433,7 @@ static void pc_add_charm(struct map_session_data *sd, int interval, int max, int
* @param count Amount of charms to remove.
* @param type Type of charm to remove.
*/
-static void pc_del_charm(struct map_session_data *sd, int count, int type)
+static void pc_del_charm(struct map_session_data *sd, int count, enum spirit_charm_types type)
{
int i;
@@ -11864,7 +12128,6 @@ static void pc_scdata_received(struct map_session_data *sd)
{
nullpo_retv(sd);
pc->inventory_rentals(sd);
- clif->show_modifiers(sd);
if (sd->expiration_time != 0) { // don't display if it's unlimited or unknow value
time_t exp_time = sd->expiration_time;
@@ -12682,7 +12945,10 @@ void pc_defaults(void)
pc->unequipitem_pos = pc_unequipitem_pos;
pc->checkitem = pc_checkitem;
pc->useitem = pc_useitem;
- pc->itemskill_clear = pc_itemskill_clear;
+ pc->autocast_clear_current = pc_autocast_clear_current;
+ pc->autocast_clear = pc_autocast_clear;
+ pc->autocast_set_current = pc_autocast_set_current;
+ pc->autocast_remove = pc_autocast_remove;
pc->skillatk_bonus = pc_skillatk_bonus;
pc->skillheal_bonus = pc_skillheal_bonus;
@@ -12695,6 +12961,8 @@ void pc_defaults(void)
pc->itemheal = pc_itemheal;
pc->percentheal = pc_percentheal;
pc->jobchange = pc_jobchange;
+ pc->hide = pc_hide;
+ pc->unhide = pc_unhide;
pc->setoption = pc_setoption;
pc->setcart = pc_setcart;
pc->setfalcon = pc_setfalcon;
diff --git a/src/map/pc.h b/src/map/pc.h
index e940c3310..e8e591b09 100644
--- a/src/map/pc.h
+++ b/src/map/pc.h
@@ -103,6 +103,13 @@ enum pc_checkitem_types {
PCCHECKITEM_GSTORAGE = 0x8
};
+/** Bit flags for allowed item actions while interacting with NPC. **/
+enum item_enabled_npc_flags {
+ ITEMENABLEDNPC_NONE = 0x0, //!< Don't allow any item actions while interacting with NPC.
+ ITEMENABLEDNPC_EQUIP = 0x1, //!< Allow changing equipment while interacting with NPC.
+ ITEMENABLEDNPC_CONSUME = 0x2, //!< Allow consuming usable items while interacting with NPC.
+};
+
struct weapon_data {
int atkmods[3];
BEGIN_ZEROED_BLOCK; // all the variables within this block get zero'ed in each call of status_calc_pc
@@ -173,6 +180,17 @@ struct pc_combos {
int id; /* this combo id */
};
+/** Auto-cast related data. **/
+struct autocast_data {
+ enum autocast_type type; // The auto-cast type.
+ int skill_id; // The auto-cast skill ID.
+ int skill_lv; // The auto-cast skill level.
+ bool itemskill_conditions_checked; // Used by itemskill() script command, to prevent second check of conditions after target was selected.
+ bool itemskill_check_conditions; // Used by itemskill() script command, to check skill conditions and consume them.
+ bool itemskill_instant_cast; // Used by itemskill() script command, to cast skill instantaneously.
+ bool itemskill_cast_on_self; // Used by itemskill() script command, to forcefully cast skill on invoking character.
+};
+
struct map_session_data {
struct block_list bl;
struct unit_data ud;
@@ -181,6 +199,8 @@ struct map_session_data {
struct status_change sc;
struct regen_data regen;
struct regen_data_sub sregen, ssregen;
+ struct autocast_data auto_cast_current; // Currently processed auto-cast skill.
+ VECTOR_DECL(struct autocast_data) auto_cast; // Auto-cast vector.
//NOTE: When deciding to add a flag to state or special_state, take into consideration that state is preserved in
//status_calc_pc, while special_state is recalculated in each call. [Skotlex]
struct {
@@ -194,8 +214,6 @@ struct map_session_data {
unsigned int rest : 1;
unsigned int storage_flag : 2; // @see enum storage_flag
unsigned int snovice_dead_flag : 1; //Explosion spirits on death: 0 off, 1 used.
- unsigned int abra_flag : 2; // Abracadabra bugfix by Aru
- unsigned int autocast : 1; // Autospell flag [Inkfish]
unsigned int autotrade : 2; //By Fantik
unsigned int showdelay :1;
unsigned int showexp :1;
@@ -206,6 +224,7 @@ struct map_session_data {
unsigned int size :2; // for tiny/large types
unsigned int night :1; //Holds whether or not the player currently has the SI_NIGHT effect on. [Skotlex]
unsigned int using_fake_npc :1;
+ unsigned int using_megaphone : 1; //!< Whether the character is currently using a Megephone (ID=12221).
unsigned int rewarp :1; //Signals that a player should warp as soon as he is done loading a map. [Skotlex]
unsigned int killer : 1;
unsigned int killable : 1;
@@ -240,10 +259,6 @@ struct map_session_data {
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;
- unsigned int itemskill_conditions_checked : 1; // Used by itemskill() script command, to prevent second check of conditions after target was selected.
- unsigned int itemskill_no_conditions : 1; // Used by itemskill() script command, to ignore skill conditions and don't consume them.
- unsigned int itemskill_no_casttime : 1; // Used by itemskill() script command, to cast skill instantaneously.
- unsigned int itemskill_castonself : 1; // Used by itemskill() script command, to forcefully cast skill on invoking character.
} state;
struct {
unsigned char no_weapon_damage, no_magic_damage, no_misc_damage;
@@ -298,7 +313,6 @@ struct map_session_data {
int followtimer; // [MouseJstr]
int followtarget;
time_t emotionlasttime; // to limit flood with emotion packets
- int skillitem,skillitemlv;
uint16 skill_id_old,skill_lv_old;
uint16 skill_id_dance,skill_lv_dance;
short cook_mastery; // range: [0,1999] [Inkfish]
@@ -434,7 +448,7 @@ END_ZEROED_BLOCK;
int spiritball, spiritball_old;
int spirit_timer[MAX_SPIRITBALL];
int charm_count;
- int charm_type;
+ enum spirit_charm_types charm_type;
int charm_timer[MAX_SPIRITCHARM];
unsigned char potion_success_counter; //Potion successes in row counter
unsigned char mission_count; //Stores the bounty kill count for TK_MISSION
@@ -492,6 +506,7 @@ END_ZEROED_BLOCK;
int change_level_3rd; // job level when changing from 2nd to 3rd class [jobchange_level_3rd in global_reg_value]
char fakename[NAME_LENGTH]; // fake names [Valaris]
+ int fakename_options; // Fake name display options.
int duel_group; // duel vars [LuzZza]
int duel_invite;
@@ -623,10 +638,6 @@ END_ZEROED_BLOCK;
uint8 lang_id;
- // temporary debugging of bug #3504
- const char* delunit_prevfile;
- int delunit_prevline;
-
// HatEffect
VECTOR_DECL(int) hatEffectId;
@@ -647,15 +658,6 @@ END_ZEROED_BLOCK;
bool achievements_received;
// Title
VECTOR_DECL(int) title_ids;
-
- /*
- * itemskill_conditions_checked/itemskill_no_conditions/itemskill_no_casttime/itemskill_castonself abuse prevention.
- * If a skill, casted by itemskill() script command, is aborted while target selection,
- * the map server gets no notification where these states could be unset.
- * Thus we need this helper variables to prevent abusing these states for next skill cast.
- */
- int itemskill_id;
- int itemskill_lv;
};
#define EQP_WEAPON EQP_HAND_R
@@ -680,7 +682,11 @@ 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_istrading_except_npc(sd) ( (sd)->state.vending != 0 || (sd)->state.buyingstore != 0 || (sd)->state.trading != 0 )
#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)
+#define pc_cant_act_except_lapine(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_except_npc(sd) ( (sd)->state.vending != 0 || (sd)->state.buyingstore != 0 || (sd)->chat_id != 0 || ((sd)->sc.opt1 != 0 && (sd)->sc.opt1 != OPT1_BURNING) || (sd)->state.trading != 0 || (sd)->state.storage_flag != 0 || (sd)->state.prevend != 0 || (sd)->state.refine_ui == 1 || (sd)->state.lapine_ui == 1)
+#define pc_cant_act_except_npc_chat(sd) ( (sd)->state.vending != 0 || (sd)->state.buyingstore != 0 || ((sd)->sc.opt1 != 0 && (sd)->sc.opt1 != OPT1_BURNING) || (sd)->state.trading != 0 || (sd)->state.storage_flag != 0 || (sd)->state.prevend != 0 || (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 || (sd)->state.lapine_ui == 1)
@@ -690,7 +696,7 @@ END_ZEROED_BLOCK;
#define pc_ishiding(sd) ( (sd)->sc.option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) )
#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_ismuted(sc, type) ( (sc)->data[SC_NOCHAT] != NULL && (battle_config.manner_system & (type)) != 0 )
#define pc_isvending(sd) ((sd)->state.vending || (sd)->state.prevend || (sd)->state.buyingstore)
#ifdef NEW_CARTS
@@ -724,6 +730,9 @@ END_ZEROED_BLOCK;
/// Rune Knight Dragon
#define pc_isridingdragon(sd) ( (sd)->sc.option&OPTION_DRAGON )
+// Check if character has a pet.
+#define pc_has_pet(sd) ( (sd)->status.pet_id != 0 && (sd)->pd != NULL && (sd)->pd->pet.intimate > PET_INTIMACY_NONE )
+
#define pc_stop_walking(sd, type) (unit->stop_walking(&(sd)->bl, (type)))
#define pc_stop_attack(sd) (unit->stop_attack(&(sd)->bl))
@@ -870,6 +879,12 @@ struct class_exp_tables {
struct class_exp_group *class_exp_table[CLASS_COUNT][2];
};
+enum player_actions_when_dead_flags {
+ PCALLOWACTION_NONE = 0x0, // Don't allow trading and open chat rooms.
+ PCALLOWACTION_TRADE = 0x1, // Allow trading when dead.
+ PCALLOWACTION_CHAT = 0x2, // Allow open chat room when dead.
+};
+
/*=====================================
* Interface : pc.h
* Generated by HerculesInterfaceMaker
@@ -1034,7 +1049,10 @@ END_ZEROED_BLOCK; /* End */
void (*unequipitem_pos) (struct map_session_data *sd, int n, int pos);
int (*checkitem) (struct map_session_data *sd);
int (*useitem) (struct map_session_data *sd,int n);
- int (*itemskill_clear) (struct map_session_data *sd);
+ void (*autocast_clear_current) (struct map_session_data *sd);
+ void (*autocast_clear) (struct map_session_data *sd);
+ void (*autocast_set_current) (struct map_session_data *sd, int skill_id);
+ void (*autocast_remove) (struct map_session_data *sd, enum autocast_type type, int skill_id, int skill_lv);
int (*skillatk_bonus) (struct map_session_data *sd, uint16 skill_id);
int (*skillheal_bonus) (struct map_session_data *sd, uint16 skill_id);
@@ -1047,6 +1065,8 @@ END_ZEROED_BLOCK; /* End */
int (*itemheal) (struct map_session_data *sd,int itemid, int hp,int sp);
int (*percentheal) (struct map_session_data *sd,int hp,int sp);
int (*jobchange) (struct map_session_data *sd, int class, int upper);
+ void (*hide) (struct map_session_data *sd, bool show_msg);
+ void (*unhide) (struct map_session_data *sd, bool show_msg);
int (*setoption) (struct map_session_data *sd,int type);
int (*setcart) (struct map_session_data* sd, int type);
void (*setfalcon) (struct map_session_data *sd, bool flag);
@@ -1130,8 +1150,8 @@ END_ZEROED_BLOCK; /* End */
int (*load_combo) (struct map_session_data *sd);
- void (*add_charm) (struct map_session_data *sd, int interval, int max, int type);
- void (*del_charm) (struct map_session_data *sd, int count, int type);
+ void (*add_charm) (struct map_session_data *sd, int interval, int max, enum spirit_charm_types type);
+ void (*del_charm) (struct map_session_data *sd, int count, enum spirit_charm_types type);
void (*baselevelchanged) (struct map_session_data *sd);
int (*level_penalty_mod) (int diff, unsigned char race, uint32 mode, int type);
diff --git a/src/map/pet.c b/src/map/pet.c
index f20de2650..f10c55f57 100644
--- a/src/map/pet.c
+++ b/src/map/pet.c
@@ -60,62 +60,140 @@ struct pet_interface *pet;
#define MIN_PETTHINKTIME 100
+/**
+ * Gets a pet's hunger value, depending it's hunger level.
+ * This value is only used in clif_parse_LoadEndAck() when calling clif_pet_emotion().
+ *
+ * @param pd The pet.
+ * @return The pet's hunger value.
+ *
+ **/
static int pet_hungry_val(struct pet_data *pd)
{
nullpo_ret(pd);
- if(pd->pet.hungry > 90)
+ if (pd->pet.hungry > PET_HUNGER_SATISFIED)
return 4;
- else if(pd->pet.hungry > 75)
+ else if (pd->pet.hungry > PET_HUNGER_NEUTRAL)
return 3;
- else if(pd->pet.hungry > 25)
+ else if (pd->pet.hungry > PET_HUNGER_HUNGRY)
return 2;
- else if(pd->pet.hungry > 10)
+ else if (pd->pet.hungry > PET_HUNGER_VERY_HUNGRY)
return 1;
else
return 0;
}
-static void pet_set_intimate(struct pet_data *pd, int value)
+/**
+ * Sets a pet's hunger value.
+ *
+ * @param pd The pet.
+ * @param value The pet's new hunger value.
+ *
+ **/
+static void pet_set_hunger(struct pet_data *pd, int value)
{
- int intimate;
- struct map_session_data *sd;
+ nullpo_retv(pd);
+ nullpo_retv(pd->msd);
+
+ pd->pet.hungry = cap_value(value, PET_HUNGER_STARVING, PET_HUNGER_STUFFED);
+
+ clif->send_petdata(pd->msd, pd, 2, pd->pet.hungry);
+}
+
+/**
+ * Calculates the value to store in a pet egg's 4th card slot
+ * based on the passed rename flag and intimacy value.
+ *
+ * @param rename_flag The pet's rename flag.
+ * @param intimacy The pet's intimacy value.
+ * @return The value to store in the pet egg's 4th card slot. (Defaults to 0 in case of error.)
+ *
+ **/
+static int pet_get_card4_value(int rename_flag, int intimacy)
+{
+ Assert_ret(rename_flag == 0 || rename_flag == 1);
+ Assert_ret(intimacy >= PET_INTIMACY_NONE && intimacy <= PET_INTIMACY_MAX);
+
+ int card4 = rename_flag;
+
+ if (intimacy <= PET_INTIMACY_SHY)
+ card4 |= (1 << 1);
+ else if (intimacy <= PET_INTIMACY_NEUTRAL)
+ card4 |= (2 << 1);
+ else if (intimacy <= PET_INTIMACY_CORDIAL)
+ card4 |= (3 << 1);
+ else if (intimacy <= PET_INTIMACY_LOYAL)
+ card4 |= (4 << 1);
+ else
+ card4 |= (5 << 1);
+
+ return card4;
+}
+/**
+ * Sets a pet's intimacy value.
+ * Deletes the pet if its intimacy value reaches PET_INTIMACY_NONE (0).
+ *
+ * @param pd The pet.
+ * @param value The pet's new intimacy value.
+ *
+ **/
+static void pet_set_intimate(struct pet_data *pd, int value)
+{
nullpo_retv(pd);
- intimate = pd->pet.intimate;
- sd = pd->msd;
+ nullpo_retv(pd->msd);
- pd->pet.intimate = value;
+ pd->pet.intimate = cap_value(value, PET_INTIMACY_NONE, PET_INTIMACY_MAX);
- if( (intimate >= battle_config.pet_equip_min_friendly && pd->pet.intimate < battle_config.pet_equip_min_friendly) || (intimate < battle_config.pet_equip_min_friendly && pd->pet.intimate >= battle_config.pet_equip_min_friendly) )
- status_calc_pc(sd,SCO_NONE);
+ struct map_session_data *sd = pd->msd;
- /* Pet is lost, delete the egg */
- if (value <= 0) {
+ if (pd->pet.intimate == PET_INTIMACY_NONE) { // Pet is lost, delete it.
int i;
- ARR_FIND(0, sd->status.inventorySize, i, sd->status.inventory[i].card[0] == CARD0_PET &&
- pd->pet.pet_id == MakeDWord(sd->status.inventory[i].card[1], sd->status.inventory[i].card[2]));
+ ARR_FIND(0, sd->status.inventorySize, i, sd->status.inventory[i].card[0] == CARD0_PET
+ && pd->pet.pet_id == MakeDWord(sd->status.inventory[i].card[1], sd->status.inventory[i].card[2]));
- if (i != sd->status.inventorySize) {
+ if (i != sd->status.inventorySize)
pc->delitem(sd, i, 1, 0, DELITEM_NORMAL, LOG_TYPE_EGG);
+
+ if (battle_config.pet_remove_immediately != 0) {
+ pet_stop_attack(pd);
+ unit->remove_map(&pd->bl, CLR_OUTSIGHT, ALC_MARK);
}
+ } else {
+ clif->send_petdata(sd, pd, 1, pd->pet.intimate);
}
+
+ status_calc_pc(sd, SCO_NONE);
}
+/**
+ * Creates a pet egg.
+ *
+ * @param sd The character who tries to create the pet egg.
+ * @param item_id The pet egg's item ID.
+ * @return 0 on failure, 1 on success.
+ *
+ **/
static int pet_create_egg(struct map_session_data *sd, int item_id)
{
- int pet_id = pet->search_petDB_index(item_id, PET_EGG);
nullpo_ret(sd);
- if (pet_id < 0) return 0; //No pet egg here.
- if (!pc->inventoryblank(sd)) return 0; // Inventory full
+
+ int pet_id = pet->search_petDB_index(item_id, PET_EGG);
+
+ if (pet_id == INDEX_NOT_FOUND) // No pet egg here.
+ return 0;
+
+ if (pc->inventoryblank(sd) == 0) // Inventory full.
+ return 0;
+
sd->catch_target_class = pet->db[pet_id].class_;
- intif->create_pet(sd->status.account_id, sd->status.char_id,
- pet->db[pet_id].class_,
- mob->db(pet->db[pet_id].class_)->lv,
- pet->db[pet_id].EggID, 0,
- (short)pet->db[pet_id].intimate,
- 100, 0, 1, pet->db[pet_id].jname);
+ intif->create_pet(sd->status.account_id, sd->status.char_id, pet->db[pet_id].class_,
+ mob->db(pet->db[pet_id].class_)->lv, pet->db[pet_id].EggID, 0,
+ (short)pet->db[pet_id].intimate, PET_HUNGER_STUFFED,
+ 0, 1, pet->db[pet_id].jname);
+
return 1;
}
@@ -162,48 +240,42 @@ static int pet_attackskill(struct pet_data *pd, int target_id)
return 0;
}
+/**
+ * Checks if a pet can attack a target.
+ *
+ * @param sd The pet's master.
+ * @param bl The pet's target.
+ * @param type 0 - Support master when attacking. Not 0 - Support master when being attacked.
+ * @return 0 on failure, 1 on success.
+ *
+ **/
static int pet_target_check(struct map_session_data *sd, struct block_list *bl, int type)
{
- struct pet_data *pd;
- int rate;
-
nullpo_ret(sd);
- pd = sd->pd;
+ nullpo_ret(sd->pd);
+ nullpo_ret(bl);
+ Assert_ret(sd->pd->msd == NULL || sd->pd->msd->pd == sd->pd);
- Assert_ret(pd->msd == 0 || pd->msd->pd == pd);
+ struct pet_data *pd = sd->pd;
- if( bl == NULL || bl->type != BL_MOB || bl->prev == NULL
- || pd->pet.intimate < battle_config.pet_support_min_friendly
- || pd->pet.hungry < 1
- || pd->pet.class_ == status->get_class(bl))
- return 0;
+ if ((type == 0 && pd->petDB->attack_rate == 0) || (type != 0 && pd->petDB->defence_attack_rate == 0))
+ return 0; // If base rate is 0, there's nothing to do.
- if( pd->bl.m != bl->m
- || !check_distance_bl(&pd->bl, bl, pd->db->range2))
+ if (bl->type != BL_MOB || bl->prev == NULL || pd->pet.intimate < battle_config.pet_support_min_friendly
+ || pd->pet.hungry <= PET_HUNGER_STARVING || pd->pet.class_ == status->get_class(bl)
+ || pd->bl.m != bl->m || !check_distance_bl(&pd->bl, bl, pd->db->range2)
+ || status->check_skilluse(&pd->bl, bl, 0, 0) == 0) {
return 0;
+ }
- if (!status->check_skilluse(&pd->bl, bl, 0, 0))
- return 0;
+ int rate = ((type == 0) ? pd->petDB->attack_rate : pd->petDB->defence_attack_rate) * pd->rate_fix / 1000;
- if(!type) {
- rate = pd->petDB->attack_rate;
- rate = rate * pd->rate_fix/1000;
- if(pd->petDB->attack_rate > 0 && rate <= 0)
- rate = 1;
- } else {
- rate = pd->petDB->defence_attack_rate;
- rate = rate * pd->rate_fix/1000;
- if(pd->petDB->defence_attack_rate > 0 && rate <= 0)
- rate = 1;
- }
- if(rnd()%10000 < rate)
- {
- if(pd->target_id == 0 || rnd()%10000 < pd->petDB->change_target_rate)
- pd->target_id = bl->id;
- }
+ if (rnd() % 10000 < max(rate, 1) && (pd->target_id == 0 || rnd() % 10000 < pd->petDB->change_target_rate))
+ pd->target_id = bl->id;
return 0;
}
+
/*==========================================
* Pet SC Check [Skotlex]
*------------------------------------------*/
@@ -226,59 +298,70 @@ static int pet_sc_check(struct map_session_data *sd, int type)
return 0;
}
+/**
+ * Updates a pet's hunger value and timer and updates the pet's intimacy value if starving.
+ *
+ * @param tid The timer ID.
+ * @param tick The base amount of ticks to add to the pet's hunger timer. (The timer's current ticks when calling this fuction.)
+ * @param id The pet master's account ID.
+ * @param data Unused.
+ * @return 1 on failure, 0 on success.
+ *
+ **/
static int pet_hungry(int tid, int64 tick, int id, intptr_t data)
{
- struct map_session_data *sd;
- struct pet_data *pd;
- int interval;
+ struct map_session_data *sd = map->id2sd(id);
- sd=map->id2sd(id);
- if(!sd)
+ if (sd == NULL || sd->status.pet_id == 0 || sd->pd == NULL)
return 1;
- if(!sd->status.pet_id || !sd->pd)
- return 1;
+ struct pet_data *pd = sd->pd;
- pd = sd->pd;
- if(pd->pet_hungry_timer != tid){
- ShowError("pet_hungry_timer %d != %d\n",pd->pet_hungry_timer,tid);
+ /**
+ * If HungerDelay is 0, there's nothing to do.
+ * Actually this shouldn't happen, since the timer wasn't added in pet_data_init(), but just to be sure...
+ *
+ **/
+ if (pd->petDB->hungry_delay == 0) {
+ pet->hungry_timer_delete(pd);
return 0;
}
+
+ if (pd->pet_hungry_timer != tid) {
+ ShowError("pet_hungry: pet_hungry_timer %d != %d\n", pd->pet_hungry_timer, tid);
+ return 1;
+ }
+
pd->pet_hungry_timer = INVALID_TIMER;
- if (pd->pet.intimate <= 0)
- return 1; //You lost the pet already, the rest is irrelevant.
+ if (pd->pet.intimate <= PET_INTIMACY_NONE)
+ return 1; // You lost the pet already, the rest is irrelevant.
+
+ pet->set_hunger(pd, pd->pet.hungry - pd->petDB->hunger_decrement);
- pd->pet.hungry--;
- /* Pet Autofeed */
- if (battle_config.feature_enable_pet_autofeed != 0) {
- if (pd->petDB->autofeed == 1 && pd->pet.autofeed == 1 && pd->pet.hungry <= 25) {
+ // Pet auto-feed.
+ if (battle_config.feature_enable_pet_autofeed == 1) {
+ if (pd->petDB->autofeed == 1 && pd->pet.autofeed == 1 && pd->pet.hungry <= PET_HUNGER_HUNGRY)
pet->food(sd, pd);
- }
}
- if( pd->pet.hungry < 0 )
- {
+ int interval = pd->petDB->hungry_delay;
+
+ if (pd->pet.hungry == PET_HUNGER_STARVING) {
pet_stop_attack(pd);
- pd->pet.hungry = 0;
- pet->set_intimate(pd, pd->pet.intimate - battle_config.pet_hungry_friendly_decrease);
- if( pd->pet.intimate <= 0 )
- {
- pd->pet.intimate = 0;
- pd->status.speed = pd->db->status.speed;
- }
+ pet->set_intimate(pd, pd->pet.intimate - pd->petDB->starving_decrement);
+
+ if (sd->pd == NULL)
+ return 0;
+
status_calc_pet(pd, SCO_NONE);
- clif->send_petdata(sd,pd,1,pd->pet.intimate);
+
+ if (pd->petDB->starving_delay > 0)
+ interval = pd->petDB->starving_delay;
}
- clif->send_petdata(sd,pd,2,pd->pet.hungry);
- if(battle_config.pet_hungry_delay_rate != 100)
- interval = (pd->petDB->hungry_delay*battle_config.pet_hungry_delay_rate)/100;
- else
- interval = pd->petDB->hungry_delay;
- if(interval <= 0)
- interval = 1;
- pd->pet_hungry_timer = timer->add(tick+interval,pet->hungry,sd->bl.id,0);
+ interval = interval * battle_config.pet_hungry_delay_rate / 100;
+ pd->pet_hungry_timer = timer->add(tick + max(interval, 1), pet->hungry, sd->bl.id, 0);
return 0;
}
@@ -315,21 +398,31 @@ static int pet_hungry_timer_delete(struct pet_data *pd)
return 1;
}
+/**
+ * Makes a pet start performing/dancing.
+ *
+ * @param sd Unused.
+ * @param pd The pet.
+ * @return 0 on failure, 1 on success.
+ *
+ **/
static int pet_performance(struct map_session_data *sd, struct pet_data *pd)
{
+ nullpo_ret(pd);
+
int val;
- nullpo_retr(1, pd);
- if (pd->pet.intimate > 900)
- val = (pd->petDB->s_perfor > 0)? 4:3;
- else if(pd->pet.intimate > 750) //TODO: this is way too high
+ if (pd->pet.intimate > PET_INTIMACY_LOYAL)
+ val = (pd->petDB->s_perfor > 0) ? 4 : 3;
+ else if (pd->pet.intimate > PET_INTIMACY_CORDIAL) //TODO: This is way too high.
val = 2;
else
val = 1;
- pet_stop_walking(pd,STOPWALKING_FLAG_NONE | (2000<<8)); // Stop walking for 2000ms
- clif->send_petdata(NULL, pd, 4, rnd()%val + 1);
- pet->lootitem_drop(pd,NULL);
+ pet_stop_walking(pd, STOPWALKING_FLAG_NONE | (2000 << 8)); // Stop walking for 2 seconds.
+ clif->send_petdata(NULL, pd, 4, rnd() % val + 1);
+ pet->lootitem_drop(pd, NULL);
+
return 1;
}
@@ -348,6 +441,8 @@ static int pet_return_egg(struct map_session_data *sd, struct pet_data *pd)
if (i != sd->status.inventorySize) {
sd->status.inventory[i].attribute &= ~ATTR_BROKEN;
sd->status.inventory[i].bound = IBT_NONE;
+ sd->status.inventory[i].card[3] = pet->get_card4_value(pd->pet.rename_flag, pd->pet.intimate);
+ clif->inventoryList(sd);
} else {
// The pet egg wasn't found: it was probably hatched with the old system that deleted the egg.
struct item tmp_item = {0};
@@ -358,14 +453,13 @@ static int pet_return_egg(struct map_session_data *sd, struct pet_data *pd)
tmp_item.card[0] = CARD0_PET;
tmp_item.card[1] = GetWord(pd->pet.pet_id, 0);
tmp_item.card[2] = GetWord(pd->pet.pet_id, 1);
- tmp_item.card[3] = pd->pet.rename_flag;
+ tmp_item.card[3] = pet->get_card4_value(pd->pet.rename_flag, pd->pet.intimate);
if ((flag = pc->additem(sd, &tmp_item, 1, LOG_TYPE_EGG)) != 0) {
clif->additem(sd, 0, 0, flag);
map->addflooritem(&sd->bl, &tmp_item, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
}
}
#if PACKETVER >= 20180704
- clif->inventoryList(sd);
clif->send_petdata(sd, pd, 6, 0);
#endif
pd->pet.incubate = 1;
@@ -377,78 +471,109 @@ static int pet_return_egg(struct map_session_data *sd, struct pet_data *pd)
return 1;
}
+/**
+ * Initializes a pet.
+ *
+ * @param sd The pet's master.
+ * @param petinfo The pet's status data.
+ * @return 1 on failure, 0 on success.
+ *
+ **/
static int pet_data_init(struct map_session_data *sd, struct s_pet *petinfo)
{
- struct pet_data *pd;
- int i=0,interval=0;
-
nullpo_retr(1, sd);
nullpo_retr(1, petinfo);
- Assert_retr(1, sd->status.pet_id == 0 || sd->pd == 0 || sd->pd->msd == sd);
+ Assert_retr(1, sd->status.pet_id == 0 || sd->pd == NULL || sd->pd->msd == sd);
- if(sd->status.account_id != petinfo->account_id || sd->status.char_id != petinfo->char_id) {
+ if (sd->status.account_id != petinfo->account_id || sd->status.char_id != petinfo->char_id) {
sd->status.pet_id = 0;
return 1;
}
+
if (sd->status.pet_id != petinfo->pet_id) {
- if (sd->status.pet_id) {
- //Wrong pet?? Set incubate to no and send it back for saving.
+ if (sd->status.pet_id != 0) { // Wrong pet? Set incubate to no and send it back for saving.
petinfo->incubate = 1;
- intif->save_petdata(sd->status.account_id,petinfo);
+ intif->save_petdata(sd->status.account_id, petinfo);
sd->status.pet_id = 0;
return 1;
}
- //The pet_id value was lost? odd... restore it.
- sd->status.pet_id = petinfo->pet_id;
+
+ sd->status.pet_id = petinfo->pet_id; // The pet_id value was lost? Odd... Restore it.
}
- i = pet->search_petDB_index(petinfo->class_,PET_CLASS);
- if(i < 0) {
+ int i = pet->search_petDB_index(petinfo->class_, PET_CLASS);
+
+ if (i == INDEX_NOT_FOUND) {
sd->status.pet_id = 0;
return 1;
}
+
+ struct pet_data *pd;
+
CREATE(pd, struct pet_data, 1);
- pd->bl.type = BL_PET;
- pd->bl.id = npc->get_new_npc_id();
+ memcpy(&pd->pet, petinfo, sizeof(struct s_pet));
sd->pd = pd;
-
pd->msd = sd;
pd->petDB = &pet->db[i];
- pd->db = mob->db(petinfo->class_);
- memcpy(&pd->pet, petinfo, sizeof(struct s_pet));
- status->set_viewdata(&pd->bl, petinfo->class_);
+ pd->db = mob->db(pd->petDB->class_);
+ pd->bl.type = BL_PET;
+ pd->bl.id = npc->get_new_npc_id();
+ status->set_viewdata(&pd->bl, pd->petDB->class_);
unit->dataset(&pd->bl);
pd->ud.dir = sd->ud.dir;
-
pd->bl.m = sd->bl.m;
pd->bl.x = sd->bl.x;
pd->bl.y = sd->bl.y;
unit->calc_pos(&pd->bl, sd->bl.x, sd->bl.y, sd->ud.dir);
pd->bl.x = pd->ud.to_x;
pd->bl.y = pd->ud.to_y;
-
map->addiddb(&pd->bl);
- status_calc_pet(pd,SCO_FIRST);
-
+ status_calc_pet(pd, SCO_FIRST);
pd->last_thinktime = timer->gettick();
pd->state.skillbonus = 0;
- if( battle_config.pet_status_support )
- script->run_pet(pet->db[i].pet_script,0,sd->bl.id,0);
+ if (pd->petDB->pet_script != NULL && battle_config.pet_status_support == 1)
+ script->run_pet(pd->petDB->pet_script, 0, sd->bl.id, 0);
- if( pd->petDB ) {
- if( pd->petDB->equip_script )
- status_calc_pc(sd,SCO_NONE);
+ if (pd->petDB->equip_script != NULL)
+ status_calc_pc(sd, SCO_NONE);
- if( battle_config.pet_hungry_delay_rate != 100 )
- interval = (pd->petDB->hungry_delay*battle_config.pet_hungry_delay_rate)/100;
- else
- interval = pd->petDB->hungry_delay;
+ pd->pet_hungry_timer = INVALID_TIMER;
+
+ if (pd->petDB->hungry_delay > 0) {
+ int interval = pd->petDB->hungry_delay * battle_config.pet_hungry_delay_rate / 100;
+ pd->pet_hungry_timer = timer->add(timer->gettick() + max(interval, 1), pet->hungry, sd->bl.id, 0);
}
- if( interval <= 0 )
- interval = 1;
- pd->pet_hungry_timer = timer->add(timer->gettick() + interval, pet->hungry, sd->bl.id, 0);
+ return 0;
+}
+
+/**
+ * Spawns a pet.
+ *
+ * @param sd The pet's master.
+ * @param birth_process Whether the pet is spawned during birth process.
+ * @return 1 on failure, 0 on success.
+ *
+ **/
+static int pet_spawn(struct map_session_data *sd, bool birth_process)
+{
+ nullpo_retr(1, sd);
+ nullpo_retr(1, sd->pd);
+
+ if (map->addblock(&sd->pd->bl) != 0 || !clif->spawn(&sd->pd->bl))
+ return 1;
+
+ clif->send_petdata(sd, sd->pd, 0, 0);
+ clif->send_petdata(sd, sd->pd, 5, battle_config.pet_hair_style);
+
+#if PACKETVER >= 20180704
+ if (birth_process)
+ clif->send_petdata(sd, sd->pd, 6, 1);
+#endif
+
+ clif->send_petstatus(sd);
+
return 0;
}
@@ -476,17 +601,11 @@ static int pet_birth_process(struct map_session_data *sd, struct s_pet *petinfo)
if (map->save_settings&8)
chrif->save(sd,0); //is it REALLY Needed to save the char for hatching a pet? [Skotlex]
- if(sd->bl.prev != NULL) {
- map->addblock(&sd->pd->bl);
- clif->spawn(&sd->pd->bl);
- clif->send_petdata(sd,sd->pd, 0,0);
- clif->send_petdata(sd,sd->pd, 5,battle_config.pet_hair_style);
-#if PACKETVER >= 20180704
- clif->send_petdata(sd, sd->pd, 6, 1);
-#endif
- clif->send_petdata(NULL, sd->pd, 3, sd->pd->vd.head_bottom);
- clif->send_petstatus(sd);
+ if (sd->pd != NULL && sd->bl.prev != NULL) {
+ if (pet->spawn(sd, true) != 0)
+ return 1;
}
+
Assert_retr(1, sd->status.pet_id == 0 || sd->pd == 0 || sd->pd->msd == sd);
return 0;
@@ -525,13 +644,9 @@ static int pet_recv_petdata(int account_id, struct s_pet *p, int flag)
}
} else {
pet->data_init(sd,p);
- if(sd->pd && sd->bl.prev != NULL) {
- map->addblock(&sd->pd->bl);
- clif->spawn(&sd->pd->bl);
- clif->send_petdata(sd,sd->pd,0,0);
- clif->send_petdata(sd,sd->pd,5,battle_config.pet_hair_style);
- clif->send_petdata(NULL, sd->pd, 3, sd->pd->vd.head_bottom);
- clif->send_petstatus(sd);
+ if (sd->pd != NULL && sd->bl.prev != NULL) {
+ if (pet->spawn(sd, false) != 0)
+ return 1;
}
}
@@ -563,57 +678,64 @@ static int pet_catch_process1(struct map_session_data *sd, int target_class)
return 0;
}
+/**
+ * Begins the actual process of catching a monster.
+ *
+ * @param sd The character who tries to catch the monster.
+ * @param target_id The monster ID of the pet, which the character tries to catch.
+ * @return 1 on failure, 0 on success.
+ *
+ **/
static int pet_catch_process2(struct map_session_data *sd, int target_id)
{
- struct mob_data *md = NULL;
- struct block_list *bl = NULL;
- int i = 0, pet_catch_rate = 0;
-
nullpo_retr(1, sd);
- bl = map->id2bl(target_id); // TODO: Why does this not use map->id2md?
- md = BL_CAST(BL_MOB, bl);
- if (md == NULL || md->bl.prev == NULL) {
- // Invalid inputs/state, abort capture.
- clif->pet_roulette(sd,0);
+ struct mob_data *md = BL_CAST(BL_MOB, map->id2bl(target_id)); //TODO: Why does this not use map->id2md?
+
+ if (md == NULL || md->bl.prev == NULL) { // Invalid inputs/state, abort capture.
+ clif->pet_roulette(sd, 0);
sd->catch_target_class = -1;
sd->itemid = -1;
sd->itemindex = -1;
return 1;
}
- //FIXME: delete taming item here, if this was an item-invoked capture and the item was flagged as delay-consume [ultramage]
-
- i = pet->search_petDB_index(md->class_,PET_CLASS);
- //catch_target_class == 0 is used for universal lures (except bosses for now). [Skotlex]
- if (sd->catch_target_class == 0 && !(md->status.mode&MD_BOSS))
+ // catch_target_class == 0 is used for universal lures (except bosses for now). [Skotlex]
+ if (sd->catch_target_class == 0 && (md->status.mode & MD_BOSS) == 0)
sd->catch_target_class = md->class_;
- if(i < 0 || sd->catch_target_class != md->class_) {
- clif->emotion(&md->bl, E_AG); //mob will do /ag if wrong lure is used on them.
- clif->pet_roulette(sd,0);
+
+ int i = pet->search_petDB_index(md->class_, PET_CLASS);
+
+ if (i == INDEX_NOT_FOUND || sd->catch_target_class != md->class_) {
+ clif->emotion(&md->bl, E_AG); // Mob will do /ag if wrong lure is used on it.
+ clif->pet_roulette(sd, 0);
sd->catch_target_class = -1;
return 1;
}
- pet_catch_rate = (pet->db[i].capture + (sd->status.base_level - md->level)*30 + sd->battle_status.luk*20)*(200 - get_percentage(md->status.hp, md->status.max_hp))/100;
+ int pet_catch_rate;
+ int capture = pet->db[i].capture;
+ int mob_hp_perc = get_percentage(md->status.hp, md->status.max_hp);
- if(pet_catch_rate < 1) pet_catch_rate = 1;
- if(battle->bc->pet_catch_rate != 100)
- pet_catch_rate = (pet_catch_rate*battle->bc->pet_catch_rate)/100;
+ if (battle_config.pet_catch_rate_official_formula == 1) {
+ pet_catch_rate = capture * (100 - mob_hp_perc) / 100 + capture;
+ } else {
+ int lvl_diff_mod = (sd->status.base_level - md->level) * 30;
+ int char_luk_mod = sd->battle_status.luk * 20;
+ pet_catch_rate = (capture + lvl_diff_mod + char_luk_mod) * (200 - mob_hp_perc) / 100;
+ }
- if(rnd()%10000 < pet_catch_rate)
- {
- unit->remove_map(&md->bl,CLR_OUTSIGHT,ALC_MARK);
- status_kill(&md->bl);
- clif->pet_roulette(sd,1);
- intif->create_pet(sd->status.account_id,sd->status.char_id,pet->db[i].class_,mob->db(pet->db[i].class_)->lv,
- pet->db[i].EggID,0,pet->db[i].intimate,100,0,1,pet->db[i].jname);
+ pet_catch_rate = cap_value(pet_catch_rate, 1, 10000) * battle_config.pet_catch_rate / 100;
+ if (rnd() % 10000 < pet_catch_rate) {
+ unit->remove_map(&md->bl, CLR_OUTSIGHT, ALC_MARK);
+ status_kill(&md->bl);
+ clif->pet_roulette(sd, 1);
+ intif->create_pet(sd->status.account_id, sd->status.char_id, pet->db[i].class_, mob->db(pet->db[i].class_)->lv,
+ pet->db[i].EggID, 0, pet->db[i].intimate, PET_HUNGER_STUFFED, 0, 1, pet->db[i].jname);
achievement->validate_taming(sd, pet->db[i].class_);
- }
- else
- {
- clif->pet_roulette(sd,0);
+ } else {
+ clif->pet_roulette(sd, 0);
sd->catch_target_class = -1;
}
@@ -661,7 +783,7 @@ static bool pet_get_egg(int account_id, int pet_class, int pet_id)
tmp_item.card[0] = CARD0_PET;
tmp_item.card[1] = GetWord(pet_id,0);
tmp_item.card[2] = GetWord(pet_id,1);
- tmp_item.card[3] = 0; //New pets are not named.
+ tmp_item.card[3] = pet->get_card4_value(0, pet->db[i].intimate);
if((ret = pc->additem(sd,&tmp_item,1,LOG_TYPE_PICKDROP_PLAYER))) {
clif->additem(sd,0,0,ret);
map->addflooritem(&sd->bl, &tmp_item, 1, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, false);
@@ -670,42 +792,52 @@ static bool pet_get_egg(int account_id, int pet_class, int pet_id)
return true;
}
+/**
+ * Performs selected pet menu option.
+ *
+ * @param sd The pet's master.
+ * @param menunum The selected menu option.
+ * @return 1 on failure, 0 on success.
+ *
+ **/
static int pet_menu(struct map_session_data *sd, int menunum)
{
- struct item_data *egg_id;
- nullpo_ret(sd);
- if (sd->pd == NULL)
- return 1;
+ nullpo_retr(1, sd);
+ nullpo_retr(1, sd->pd);
- //You lost the pet already.
- if(!sd->status.pet_id || sd->pd->pet.intimate <= 0 || sd->pd->pet.incubate)
- return 1;
+ if (sd->status.pet_id == 0 || sd->pd->pet.intimate <= PET_INTIMACY_NONE || sd->pd->pet.incubate != 0)
+ return 1; // You lost the pet already.
- egg_id = itemdb->exists(sd->pd->petDB->EggID);
- if (egg_id) {
- if ((egg_id->flag.trade_restriction&ITR_NODROP) && !pc->inventoryblank(sd)) {
- clif->message(sd->fd, msg_sd(sd,451)); // You can't return your pet because your inventory is full.
+ struct item_data *egg_id = itemdb->exists(sd->pd->petDB->EggID);
+
+ if (egg_id != NULL) {
+ if ((egg_id->flag.trade_restriction & ITR_NODROP) != 0 && pc->inventoryblank(sd) == 0) {
+ clif->message(sd->fd, msg_sd(sd, 451)); // You can't return your pet because your inventory is full.
return 1;
}
}
- switch(menunum) {
- case 0:
- clif->send_petstatus(sd);
- break;
- case 1:
- pet->food(sd, sd->pd);
- break;
- case 2:
- pet->performance(sd, sd->pd);
- break;
- case 3:
- pet->return_egg(sd, sd->pd);
- break;
- case 4:
- pet->unequipitem(sd, sd->pd);
- break;
+ switch (menunum) {
+ case 0:
+ clif->send_petstatus(sd);
+ break;
+ case 1:
+ pet->food(sd, sd->pd);
+ break;
+ case 2:
+ pet->performance(sd, sd->pd);
+ break;
+ case 3:
+ pet->return_egg(sd, sd->pd);
+ break;
+ case 4:
+ pet->unequipitem(sd, sd->pd);
+ break;
+ default: ;
+ ShowError("pet_menu: Unexpected menu option: %d\n", menunum);
+ return 1;
}
+
return 0;
}
@@ -750,8 +882,6 @@ static int pet_change_name_ack(struct map_session_data *sd, const char *name, in
aFree(newname);
clif->blname_ack(0,&pd->bl);
pd->pet.rename_flag = 1;
- clif->send_petdata(NULL, sd->pd, 3, sd->pd->vd.head_bottom);
- clif->send_petstatus(sd);
return 1;
}
@@ -830,49 +960,53 @@ static int pet_unequipitem(struct map_session_data *sd, struct pet_data *pd)
return 0;
}
+/**
+ * Feeds a pet and updates its intimacy value.
+ *
+ * @param sd The pet's master.
+ * @param pd The pet.
+ * @return 1 on failure, 0 on success.
+ *
+ **/
static int pet_food(struct map_session_data *sd, struct pet_data *pd)
{
- int i, food_id;
-
+ nullpo_retr(1, sd);
nullpo_retr(1, pd);
- food_id = pd->petDB->FoodID;
- i = pc->search_inventory(sd, food_id);
- if(i == INDEX_NOT_FOUND) {
- clif->pet_food(sd, food_id, 0);
+ Assert_retr(1, sd->status.pet_id == pd->pet.pet_id);
+
+ int i = pc->search_inventory(sd, pd->petDB->FoodID);
+
+ if (i == INDEX_NOT_FOUND) {
+ clif->pet_food(sd, pd->petDB->FoodID, 0);
return 1;
}
+
pc->delitem(sd, i, 1, 0, DELITEM_NORMAL, LOG_TYPE_CONSUME);
- if (pd->pet.hungry > 90) {
- pet->set_intimate(pd, pd->pet.intimate - pd->petDB->r_full);
- } else {
- int add_intimate = 0;
- if (battle_config.pet_friendly_rate != 100)
- add_intimate = (pd->petDB->r_hungry * battle_config.pet_friendly_rate)/100;
- else
- add_intimate = pd->petDB->r_hungry;
- if (pd->pet.hungry > 75) {
- add_intimate = add_intimate >> 1;
- if (add_intimate <= 0)
- add_intimate = 1;
- }
- pet->set_intimate(pd, pd->pet.intimate + add_intimate);
- }
- if (pd->pet.intimate <= 0) {
- pd->pet.intimate = 0;
- pet_stop_attack(pd);
- pd->status.speed = pd->db->status.speed;
- } else if (pd->pet.intimate > 1000) {
- pd->pet.intimate = 1000;
- }
- status_calc_pet(pd, SCO_NONE);
- pd->pet.hungry += pd->petDB->fullness;
- if( pd->pet.hungry > 100 )
- pd->pet.hungry = 100;
+ int intimacy = 0;
+
+ if (pd->pet.hungry >= PET_HUNGER_STUFFED)
+ intimacy -= pd->petDB->r_full; // Decrease intimacy by OverFeedDecrement.
+ else if (pd->pet.hungry > PET_HUNGER_SATISFIED)
+ intimacy -= pd->petDB->r_full / 2; // Decrease intimacy by 50% of OverFeedDecrement.
+ else if (pd->pet.hungry > PET_HUNGER_NEUTRAL)
+ intimacy -= pd->petDB->r_full * 5 / 100; // Decrease intimacy by 5% of OverFeedDecrement.
+ else if (pd->pet.hungry > PET_HUNGER_HUNGRY)
+ intimacy += pd->petDB->r_hungry * 75 / 100; // Increase intimacy by 75% of FeedIncrement.
+ else if (pd->pet.hungry > PET_HUNGER_VERY_HUNGRY)
+ intimacy += pd->petDB->r_hungry; // Increase intimacy by FeedIncrement.
+ else
+ intimacy += pd->petDB->r_hungry / 2; // Increase intimacy by 50% of FeedIncrement.
+
+ intimacy = intimacy * battle_config.pet_friendly_rate / 100;
+ pet->set_intimate(pd, pd->pet.intimate + intimacy);
+
+ if (sd->pd == NULL)
+ return 0;
- clif->send_petdata(sd,pd,2,pd->pet.hungry);
- clif->send_petdata(sd,pd,1,pd->pet.intimate);
- clif->pet_food(sd,pd->petDB->FoodID,1);
+ status_calc_pet(pd, SCO_NONE);
+ pet->set_hunger(pd, pd->pet.hungry + pd->petDB->fullness);
+ clif->pet_food(sd, pd->petDB->FoodID, 1);
return 0;
}
@@ -891,7 +1025,8 @@ static int pet_randomwalk(struct pet_data *pd, int64 tick)
int r=rnd();
int x=pd->bl.x+r%(d*2+1)-d;
int y=pd->bl.y+r/(d*2+1)%(d*2+1)-d;
- if(map->getcell (pd->bl.m, &pd->bl, x, y, CELL_CHKPASS) && unit->walktoxy(&pd->bl, x, y, 0)) {
+ if (map->getcell(pd->bl.m, &pd->bl, x, y, CELL_CHKPASS) != 0
+ && unit->walk_toxy(&pd->bl, x, y, 0) == 0) {
pd->move_fail_count=0;
break;
}
@@ -918,126 +1053,147 @@ static int pet_randomwalk(struct pet_data *pd, int64 tick)
return 0;
}
+/**
+ * Performs pet's AI actions. (Moving, attacking, etc.)
+ *
+ * @param pd The pet.
+ * @param sd The pet's master.
+ * @param tick Timestamp of last support.
+ * @return Always 0.
+ *
+ **/
static int pet_ai_sub_hard(struct pet_data *pd, struct map_session_data *sd, int64 tick)
{
- struct block_list *target = NULL;
nullpo_ret(pd);
+ nullpo_ret(pd->bl.prev);
+ nullpo_ret(sd);
+ nullpo_ret(sd->bl.prev);
- if(pd->bl.prev == NULL || sd == NULL || sd->bl.prev == NULL)
+ if (DIFF_TICK(tick, pd->last_thinktime) < MIN_PETTHINKTIME)
return 0;
- if(DIFF_TICK(tick,pd->last_thinktime) < MIN_PETTHINKTIME)
- return 0;
- pd->last_thinktime=tick;
+ pd->last_thinktime = tick;
- if(pd->ud.attacktimer != INVALID_TIMER || pd->ud.skilltimer != INVALID_TIMER || pd->bl.m != sd->bl.m)
+ if (pd->ud.attacktimer != INVALID_TIMER || pd->ud.skilltimer != INVALID_TIMER || pd->bl.m != sd->bl.m)
return 0;
- if(pd->ud.walktimer != INVALID_TIMER && pd->ud.walkpath.path_pos <= 2)
- return 0; //No thinking when you just started to walk.
+ if (pd->ud.walktimer != INVALID_TIMER && pd->ud.walkpath.path_pos <= 2)
+ return 0; // No thinking when you just started to walk.
- if(pd->pet.intimate <= 0) {
- //Pet should just... well, random walk.
- pet->randomwalk(pd,tick);
+ if (pd->pet.intimate <= PET_INTIMACY_NONE) {
+ pet->randomwalk(pd, tick); // Pet should just... well, random walk.
return 0;
}
- if (!check_distance_bl(&sd->bl, &pd->bl, pd->db->range3)) {
- //Master too far, chase.
- if(pd->target_id)
+ if (!check_distance_bl(&sd->bl, &pd->bl, pd->db->range3)) { // Master too far away. Chase him.
+ if (pd->target_id != 0)
pet->unlocktarget(pd);
- if(pd->ud.walktimer != INVALID_TIMER && pd->ud.target == sd->bl.id)
- return 0; //Already walking to him
+
+ if (pd->ud.walktimer != INVALID_TIMER && pd->ud.target == sd->bl.id)
+ return 0; // Already walking to him.
+
if (DIFF_TICK(tick, pd->ud.canmove_tick) < 0)
- return 0; //Can't move yet.
- pd->status.speed = (sd->battle_status.speed>>1);
- if(pd->status.speed <= 0)
- pd->status.speed = 1;
- if (!unit->walktobl(&pd->bl, &sd->bl, 3, 0))
- pet->randomwalk(pd,tick);
+ return 0; // Can't move yet.
+
+ pd->status.speed = max(sd->battle_status.speed / 2, MIN_WALK_SPEED);
+
+ if (unit->walktobl(&pd->bl, &sd->bl, 3, 0) == 0)
+ pet->randomwalk(pd, tick);
+
return 0;
}
- //Return speed to normal.
- if (pd->status.speed != pd->petDB->speed) {
+ if (pd->status.speed != pd->petDB->speed) { // Reset speed to normal.
if (pd->ud.walktimer != INVALID_TIMER)
- return 0; //Wait until the pet finishes walking back to master.
+ return 0; // Wait until the pet finishes walking back to master.
+
pd->status.speed = pd->petDB->speed;
- pd->ud.state.change_walk_target = pd->ud.state.speed_changed = 1;
+ pd->ud.state.speed_changed = 1;
+ pd->ud.state.change_walk_target = 1;
}
- if (pd->target_id) {
- target= map->id2bl(pd->target_id);
- if (!target || pd->bl.m != target->m || status->isdead(target)
- || !check_distance_bl(&pd->bl, target, pd->db->range3)
- ) {
+ struct block_list *target = NULL;
+
+ if (pd->target_id != 0) {
+ target = map->id2bl(pd->target_id);
+
+ if (target == NULL || pd->bl.m != target->m || status->isdead(target) == 1
+ || !check_distance_bl(&pd->bl, target, pd->db->range3)) {
target = NULL;
pet->unlocktarget(pd);
}
}
- if(!target && pd->loot && pd->msd && pc_has_permission(pd->msd, PC_PERM_TRADE) && pd->loot->count < pd->loot->max && DIFF_TICK(tick,pd->ud.canact_tick)>0) {
- //Use half the pet's range of sight.
- map->foreachinrange(pet->ai_sub_hard_lootsearch,&pd->bl,
- pd->db->range2/2, BL_ITEM,pd,&target);
+ if (target == NULL && pd->loot != NULL && pd->msd != NULL && pc_has_permission(pd->msd, PC_PERM_TRADE)
+ && pd->loot->count < pd->loot->max && DIFF_TICK(tick, pd->ud.canact_tick) > 0) { // Use half the pet's range of sight.
+ map->foreachinrange(pet->ai_sub_hard_lootsearch, &pd->bl, pd->db->range2 / 2, BL_ITEM, pd, &target);
}
- if (!target) {
- //Just walk around.
+ if (target == NULL) { // Just walk around.
if (check_distance_bl(&sd->bl, &pd->bl, 3))
- return 0; //Already next to master.
+ return 0; // Already next to master.
- if(pd->ud.walktimer != INVALID_TIMER && check_distance_blxy(&sd->bl, pd->ud.to_x,pd->ud.to_y, 3))
- return 0; //Already walking to him
+ if (pd->ud.walktimer != INVALID_TIMER && check_distance_blxy(&sd->bl, pd->ud.to_x, pd->ud.to_y, 3))
+ return 0; // Already walking to him.
unit->calc_pos(&pd->bl, sd->bl.x, sd->bl.y, sd->ud.dir);
- if(!unit->walktoxy(&pd->bl,pd->ud.to_x,pd->ud.to_y,0))
- pet->randomwalk(pd,tick);
+
+ if (unit->walk_toxy(&pd->bl, pd->ud.to_x, pd->ud.to_y, 0) != 0)
+ pet->randomwalk(pd, tick);
return 0;
}
- if(pd->ud.target == target->id &&
- (pd->ud.attacktimer != INVALID_TIMER || pd->ud.walktimer != INVALID_TIMER))
- return 0; //Target already locked.
+ if (pd->ud.target == target->id && (pd->ud.attacktimer != INVALID_TIMER || pd->ud.walktimer != INVALID_TIMER))
+ return 0; // Target already locked.
+
+ if (target->type != BL_ITEM) { // Target is enemy. Chase or attack it.
+ if (!battle->check_range(&pd->bl, target, pd->status.rhw.range)) { // Chase enemy.
+ if (unit->walktobl(&pd->bl, target, pd->status.rhw.range, 2) == 0) // Enemy is unreachable.
+ pet->unlocktarget(pd);
- if (target->type != BL_ITEM)
- { //enemy targetted
- if(!battle->check_range(&pd->bl,target,pd->status.rhw.range)) {
- //Chase
- if(!unit->walktobl(&pd->bl, target, pd->status.rhw.range, 2))
- pet->unlocktarget(pd); //Unreachable target.
return 0;
}
- //Continuous attack.
- unit->attack(&pd->bl, pd->target_id, 1);
- } else {
- //Item Targeted, attempt loot
- if (!check_distance_bl(&pd->bl, target, 1)) {
- //Out of range
- if(!unit->walktobl(&pd->bl, target, 1, 1)) //Unreachable target.
+
+ unit->attack(&pd->bl, pd->target_id, 1); // Start/continue attacking.
+ } else { // Target is item. Attempt looting.
+ if (!check_distance_bl(&pd->bl, target, 1)) { // Item is out of range.
+ if (unit->walktobl(&pd->bl, target, 1, 1) == 0) // Item is unreachable.
pet->unlocktarget(pd);
+
return 0;
- } else{
+ }
+
+ if (pd->loot->count < pd->loot->max) {
struct flooritem_data *fitem = BL_UCAST(BL_ITEM, target);
- if(pd->loot->count < pd->loot->max){
- memcpy(&pd->loot->item[pd->loot->count++],&fitem->item_data,sizeof(pd->loot->item[0]));
- pd->loot->weight += itemdb_weight(fitem->item_data.nameid)*fitem->item_data.amount;
- map->clearflooritem(target);
- }
- //Target is unlocked regardless of whether it was picked or not.
- pet->unlocktarget(pd);
+
+ memcpy(&pd->loot->item[pd->loot->count++], &fitem->item_data, sizeof(pd->loot->item[0]));
+ pd->loot->weight += itemdb_weight(fitem->item_data.nameid) * fitem->item_data.amount;
+ map->clearflooritem(target);
}
+
+ pet->unlocktarget(pd); // Target is unlocked regardless of whether the item was picked or not.
}
+
return 0;
}
+/**
+ * Calls pet_ai_sub_hard() for a character's pet if conditions are fulfilled.
+ *
+ * @param sd The character.
+ * @param ap Additional arguments. In this case only the time stamp of pet AI timer execution.
+ * @return Always 0.
+ *
+ **/
static int pet_ai_sub_foreachclient(struct map_session_data *sd, va_list ap)
{
- int64 tick = va_arg(ap,int64);
nullpo_ret(sd);
- if(sd->status.pet_id && sd->pd)
- pet->ai_sub_hard(sd->pd,sd,tick);
+
+ int64 tick = va_arg(ap, int64);
+
+ if (sd->bl.prev != NULL && sd->status.pet_id != 0 && sd->pd != NULL && sd->pd->bl.prev != NULL)
+ pet->ai_sub_hard(sd->pd, sd, tick);
return 0;
}
@@ -1142,45 +1298,54 @@ static int pet_lootitem_drop(struct pet_data *pd, struct map_session_data *sd)
return 1;
}
-/*==========================================
- * pet bonus giving skills [Valaris] / Rewritten by [Skotlex]
- *------------------------------------------*/
+/**
+ * Applies pet's stat bonuses to its master. (See petskillbonus() script command.)
+ *
+ * @param tid The timer ID
+ * @param tick The base amount of ticks to add to the pet's bonus timer. (The timer's current ticks when calling this fuction.)
+ * @param id The pet's master's account ID.
+ * @param data Unused.
+ * @return 1 on failure, 0 on success.
+ *
+ **/
static int pet_skill_bonus_timer(int tid, int64 tick, int id, intptr_t data)
{
- struct map_session_data *sd=map->id2sd(id);
- struct pet_data *pd;
- int bonus;
- int duration = 0;
+ struct map_session_data *sd = map->id2sd(id);
- if(sd == NULL || sd->pd==NULL || sd->pd->bonus == NULL)
+ if (sd == NULL || sd->pd == NULL || sd->pd->bonus == NULL)
return 1;
- pd=sd->pd;
+ struct pet_data *pd = sd->pd;
- if(pd->bonus->timer != tid) {
- ShowError("pet_skill_bonus_timer %d != %d\n",pd->bonus->timer,tid);
+ if (pd->bonus->timer != tid) {
+ ShowError("pet_skill_bonus_timer %d != %d\n", pd->bonus->timer, tid);
pd->bonus->timer = INVALID_TIMER;
- return 0;
+ return 1;
}
- // determine the time for the next timer
- if (pd->state.skillbonus && pd->bonus->delay > 0) {
+ int bonus;
+ int duration;
+
+ // Determine the time for the next timer.
+ if (pd->state.skillbonus == 1 && pd->bonus->delay > 0) {
bonus = 0;
- duration = pd->bonus->delay*1000; // the duration until pet bonuses will be reactivated again
- } else if (pd->pet.intimate) {
+ duration = pd->bonus->delay * 1000; // The duration until pet bonuses will be reactivated again.
+ } else if (pd->pet.intimate > PET_INTIMACY_NONE) {
bonus = 1;
- duration = pd->bonus->duration*1000; // the duration for pet bonuses to be in effect
- } else { //Lost pet...
+ duration = pd->bonus->duration * 1000; // The duration for pet bonuses to be in effect.
+ } else { // Lost pet...
pd->bonus->timer = INVALID_TIMER;
- return 0;
+ return 1;
}
if (pd->state.skillbonus != bonus) {
pd->state.skillbonus = bonus;
status_calc_pc(sd, SCO_NONE);
}
- // wait for the next timer
- pd->bonus->timer=timer->add(tick+duration,pet->skill_bonus_timer,sd->bl.id,0);
+
+ // Wait for the next timer.
+ pd->bonus->timer = timer->add(tick + duration, pet->skill_bonus_timer, sd->bl.id, 0);
+
return 0;
}
@@ -1326,115 +1491,155 @@ static int pet_read_db_libconfig(const char *filename, bool ignore_missing)
return count;
}
+/**
+ * Reads a single pet from DB.
+ *
+ * @param it The libconfig settings block, which contains the pet's data.
+ * @param n The pet's index in pet->db[].
+ * @param source The pet DB's file name.
+ * @return 0 on failure, the pet's ID on success.
+ *
+ **/
static int pet_read_db_sub(struct config_setting_t *it, int n, const char *source)
{
- struct config_setting_t *t = NULL;
- struct item_data *data = NULL;
- const char *str = NULL;
- int i32 = 0;
-
nullpo_ret(it);
nullpo_ret(source);
Assert_ret(n >= 0 && n < MAX_PET_DB);
- if (!libconfig->setting_lookup_int(it, "Id", &i32)) {
+ int i32 = 0;
+
+ if (libconfig->setting_lookup_int(it, "Id", &i32) == CONFIG_FALSE) {
ShowWarning("pet_read_db_sub: Missing Id in \"%s\", entry #%d, skipping.\n", source, n);
return 0;
}
- pet->db[n].class_ = i32;
- if (!libconfig->setting_lookup_string(it, "SpriteName", &str) || !*str ) {
- ShowWarning("pet_read_db_sub: Missing SpriteName in pet %d of \"%s\", skipping.\n", pet->db[n].class_, source);
+ if (mob->db_checkid(i32) == 0) {
+ ShowWarning("pet_read_db_sub: Invalid Id in \"%s\", entry #%d, skipping.\n", source, n);
return 0;
}
- safestrncpy(pet->db[n].name, str, sizeof(pet->db[n].name));
- if (!libconfig->setting_lookup_string(it, "Name", &str) || !*str) {
- ShowWarning("pet_read_db_sub: Missing Name in pet %d of \"%s\", skipping.\n", pet->db[n].class_, source);
+ pet->db[n].class_ = i32;
+ safestrncpy(pet->db[n].name, mob->db(i32)->sprite, sizeof(pet->db[n].name));
+
+ const char *str;
+
+ if (libconfig->setting_lookup_string(it, "Name", &str) == CONFIG_FALSE || *str == '\0') {
+ ShowWarning("pet_read_db_sub: Missing Name in pet %d of \"%s\", skipping.\n",
+ pet->db[n].class_, source);
return 0;
}
+
safestrncpy(pet->db[n].jname, str, sizeof(pet->db[n].jname));
- if (libconfig->setting_lookup_string(it, "TamingItem", &str)) {
- if (!(data = itemdb->name2id(str))) {
- ShowWarning("pet_read_db_sub: Invalid item '%s' in pet %d of \"%s\", defaulting to 0.\n", str, pet->db[n].class_, source);
- } else {
- pet->db[n].itemID = data->nameid;
- }
+ if (libconfig->setting_lookup_string(it, "EggItem", &str) == CONFIG_FALSE || *str == '\0') {
+ ShowWarning("pet_read_db_sub: Missing EggItem in pet %d of \"%s\", skipping.\n",
+ pet->db[n].class_, source);
+ return 0;
}
- if (libconfig->setting_lookup_string(it, "EggItem", &str)) {
- if (!(data = itemdb->name2id(str))) {
- ShowWarning("pet_read_db_sub: Invalid item '%s' in pet %d of \"%s\", defaulting to 0.\n", str, pet->db[n].class_, source);
- } else {
- pet->db[n].EggID = data->nameid;
- }
+ struct item_data *data;
+
+ if ((data = itemdb->name2id(str)) == NULL) {
+ ShowWarning("pet_read_db_sub: Invalid EggItem '%s' in pet %d of \"%s\", skipping.\n",
+ str, pet->db[n].class_, source);
+ return 0;
}
- if (libconfig->setting_lookup_string(it, "AccessoryItem", &str)) {
- if (!(data = itemdb->name2id(str))) {
- ShowWarning("pet_read_db_sub: Invalid item '%s' in pet %d of \"%s\", defaulting to 0.\n", str, pet->db[n].class_, source);
- } else {
- pet->db[n].AcceID = data->nameid;
- }
+ pet->db[n].EggID = data->nameid;
+
+ if (libconfig->setting_lookup_string(it, "TamingItem", &str) == CONFIG_TRUE) {
+ if ((data = itemdb->name2id(str)) == NULL)
+ ShowWarning("pet_read_db_sub: Invalid TamingItem '%s' in pet %d of \"%s\", defaulting to 0.\n",
+ str, pet->db[n].class_, source);
+ else
+ pet->db[n].itemID = data->nameid;
}
- if (libconfig->setting_lookup_string(it, "FoodItem", &str)) {
- if (!(data = itemdb->name2id(str))) {
- ShowWarning("pet_read_db_sub: Invalid item '%s' in pet %d of \"%s\", defaulting to 0.\n", str, pet->db[n].class_, source);
- } else {
+ pet->db[n].FoodID = 537;
+
+ if (libconfig->setting_lookup_string(it, "FoodItem", &str) == CONFIG_TRUE) {
+ if ((data = itemdb->name2id(str)) == NULL)
+ ShowWarning("pet_read_db_sub: Invalid FoodItem '%s' in pet %d of \"%s\", defaulting to Pet_Food (ID=537).\n",
+ str, pet->db[n].class_, source);
+ else
pet->db[n].FoodID = data->nameid;
- }
}
- if (libconfig->setting_lookup_int(it, "FoodEffectiveness", &i32))
- pet->db[n].fullness = i32;
+ if (libconfig->setting_lookup_string(it, "AccessoryItem", &str) == CONFIG_TRUE) {
+ if ((data = itemdb->name2id(str)) == NULL)
+ ShowWarning("pet_read_db_sub: Invalid AccessoryItem '%s' in pet %d of \"%s\", defaulting to 0.\n",
+ str, pet->db[n].class_, source);
+ else
+ pet->db[n].AcceID = data->nameid;
+ }
- if (libconfig->setting_lookup_int(it, "HungerDelay", &i32))
- pet->db[n].hungry_delay = i32 * 1000;
+ int ret = libconfig->setting_lookup_int(it, "FoodEffectiveness", &i32);
+ pet->db[n].fullness = (ret == CONFIG_FALSE) ? 80 : cap_value(i32, 1, PET_HUNGER_STUFFED);
- if ((t = libconfig->setting_get_member(it, "Intimacy"))) {
- if (config_setting_is_group(t)) {
- pet->read_db_sub_intimacy(n, t);
- }
- }
- if (pet->db[n].r_hungry <= 0)
- pet->db[n].r_hungry = 1;
+ ret = libconfig->setting_lookup_int(it, "HungerDelay", &i32);
+ pet->db[n].hungry_delay = (ret == CONFIG_FALSE) ? 60000 : cap_value(1000 * i32, 0, INT_MAX);
- if (libconfig->setting_lookup_int(it, "CaptureRate", &i32))
- pet->db[n].capture = i32;
+ ret = libconfig->setting_lookup_int(it, "HungerDecrement", &i32);
+ pet->db[n].hunger_decrement = (ret == CONFIG_FALSE) ? 1 : cap_value(i32, PET_HUNGER_STARVING, PET_HUNGER_STUFFED - 1);
- if (libconfig->setting_lookup_int(it, "Speed", &i32))
- pet->db[n].speed = i32;
+ if (pet->db[n].hunger_decrement == PET_HUNGER_STARVING)
+ pet->db[n].hungry_delay = 0;
- if ((t = libconfig->setting_get_member(it, "SpecialPerformance")) && (i32 = libconfig->setting_get_bool(t)))
- pet->db[n].s_perfor = (char)i32;
+ /**
+ * Preventively set default intimacy values here, just in case that 'Intimacy' block is not defined,
+ * or pet_read_db_sub_intimacy() fails execution.
+ *
+ **/
+ pet->db[n].intimate = PET_INTIMACY_NEUTRAL;
+ pet->db[n].r_hungry = 10;
+ pet->db[n].r_full = 100;
+ pet->db[n].die = 20;
+ pet->db[n].starving_delay = min(20000, pet->db[n].hungry_delay);
+ pet->db[n].starving_decrement = 20;
- if ((t = libconfig->setting_get_member(it, "TalkWithEmotes")) && (i32 = libconfig->setting_get_bool(t)))
- pet->db[n].talk_convert_class = i32;
+ struct config_setting_t *t;
- if (libconfig->setting_lookup_int(it, "AttackRate", &i32))
- pet->db[n].attack_rate = i32;
+ if ((t = libconfig->setting_get_member(it, "Intimacy")) != NULL && config_setting_is_group(t))
+ pet->read_db_sub_intimacy(n, t);
- if (libconfig->setting_lookup_int(it, "DefendRate", &i32))
- pet->db[n].defence_attack_rate = i32;
+ ret = libconfig->setting_lookup_int(it, "CaptureRate", &i32);
+ pet->db[n].capture = (ret == CONFIG_FALSE) ? 1000 : cap_value(i32, 1, 10000);
- if (libconfig->setting_lookup_int(it, "ChangeTargetRate", &i32))
- pet->db[n].change_target_rate = i32;
+ ret = libconfig->setting_lookup_int(it, "Speed", &i32);
+ pet->db[n].speed = (ret == CONFIG_FALSE) ? DEFAULT_WALK_SPEED : cap_value(i32, MIN_WALK_SPEED, MAX_WALK_SPEED);
- // Pet Evolution
- if ((t = libconfig->setting_get_member(it, "Evolve")) && config_setting_is_group(t)) {
- pet->read_db_sub_evolution(t, n);
+ if ((t = libconfig->setting_get_member(it, "SpecialPerformance")) != NULL
+ && (i32 = libconfig->setting_get_bool(t)) != 0) {
+ pet->db[n].s_perfor = (char)i32;
+ }
+
+ if ((t = libconfig->setting_get_member(it, "TalkWithEmotes")) != NULL
+ && (i32 = libconfig->setting_get_bool(t)) != 0) {
+ pet->db[n].talk_convert_class = i32;
}
- if ((t = libconfig->setting_get_member(it, "AutoFeed")) && (i32 = libconfig->setting_get_bool(t)))
+ ret = libconfig->setting_lookup_int(it, "AttackRate", &i32);
+ pet->db[n].attack_rate = (ret == CONFIG_FALSE) ? 300 : cap_value(i32, 0, 10000);
+
+ ret = libconfig->setting_lookup_int(it, "DefendRate", &i32);
+ pet->db[n].defence_attack_rate = (ret == CONFIG_FALSE) ? 300 : cap_value(i32, 0, 10000);
+
+ ret = libconfig->setting_lookup_int(it, "ChangeTargetRate", &i32);
+ pet->db[n].change_target_rate = (ret == CONFIG_FALSE) ? 800 : cap_value(i32, 0, 10000);
+
+ if ((t = libconfig->setting_get_member(it, "AutoFeed")) != NULL && (i32 = libconfig->setting_get_bool(t)) != 0)
pet->db[n].autofeed = i32;
- if (libconfig->setting_lookup_string(it, "PetScript", &str))
- pet->db[n].pet_script = *str ? script->parse(str, source, -pet->db[n].class_, SCRIPT_IGNORE_EXTERNAL_BRACKETS, NULL) : NULL;
+ pet->db[n].pet_script = NULL;
+ if (libconfig->setting_lookup_string(it, "PetScript", &str) == CONFIG_TRUE && *str != '\0')
+ pet->db[n].pet_script = script->parse(str, source, -pet->db[n].class_, SCRIPT_IGNORE_EXTERNAL_BRACKETS, NULL);
- if (libconfig->setting_lookup_string(it, "EquipScript", &str))
- pet->db[n].equip_script = *str ? script->parse(str, source, -pet->db[n].class_, SCRIPT_IGNORE_EXTERNAL_BRACKETS, NULL) : NULL;
+ pet->db[n].equip_script = NULL;
+ if (libconfig->setting_lookup_string(it, "EquipScript", &str) == CONFIG_TRUE && *str != '\0')
+ pet->db[n].equip_script = script->parse(str, source, -pet->db[n].class_, SCRIPT_IGNORE_EXTERNAL_BRACKETS, NULL);
+
+ if ((t = libconfig->setting_get_member(it, "Evolve")) != NULL && config_setting_is_group(t))
+ pet->read_db_sub_evolution(t, n);
return pet->db[n].class_;
}
@@ -1514,24 +1719,41 @@ static void pet_read_db_sub_evolution(struct config_setting_t *t, int n)
}
}
+/**
+ * Reads a pet's intimacy data from DB.
+ *
+ * @param idx The pet's index in pet->db[].
+ * @param t The libconfig settings block, which contains the pet's intimacy data.
+ * @return false on failure, true on success.
+ *
+ **/
static bool pet_read_db_sub_intimacy(int idx, struct config_setting_t *t)
{
+ nullpo_retr(false, t);
+ Assert_retr(false, idx >= 0 && idx < MAX_PET_DB);
+
int i32 = 0;
- nullpo_retr(false, t);
- Assert_ret(idx >= 0 && idx < MAX_PET_DB);
+ if (libconfig->setting_lookup_int(t, "Initial", &i32) == CONFIG_TRUE)
+ pet->db[idx].intimate = cap_value(i32, PET_INTIMACY_AWKWARD, PET_INTIMACY_MAX);
+
+ if (libconfig->setting_lookup_int(t, "FeedIncrement", &i32) == CONFIG_TRUE)
+ pet->db[idx].r_hungry = cap_value(i32, PET_INTIMACY_AWKWARD, PET_INTIMACY_MAX);
+
+ if (libconfig->setting_lookup_int(t, "OverFeedDecrement", &i32) == CONFIG_TRUE)
+ pet->db[idx].r_full = cap_value(i32, PET_INTIMACY_NONE, PET_INTIMACY_MAX);
- if (libconfig->setting_lookup_int(t, "Initial", &i32))
- pet->db[idx].intimate = i32;
+ if (libconfig->setting_lookup_int(t, "OwnerDeathDecrement", &i32) == CONFIG_TRUE)
+ pet->db[idx].die = cap_value(i32, PET_INTIMACY_NONE, PET_INTIMACY_MAX);
- if (libconfig->setting_lookup_int(t, "FeedIncrement", &i32))
- pet->db[idx].r_hungry = i32;
+ if (libconfig->setting_lookup_int(t, "StarvingDelay", &i32) == CONFIG_TRUE)
+ pet->db[idx].starving_delay = cap_value(1000 * i32, 0, pet->db[idx].hungry_delay);
- if (libconfig->setting_lookup_int(t, "OverFeedDecrement", &i32))
- pet->db[idx].r_full = i32;
+ if (libconfig->setting_lookup_int(t, "StarvingDecrement", &i32) == CONFIG_TRUE)
+ pet->db[idx].starving_decrement = cap_value(i32, PET_INTIMACY_NONE, PET_INTIMACY_MAX);
- if (libconfig->setting_lookup_int(t, "OwnerDeathDecrement", &i32))
- pet->db[idx].die = i32;
+ if (pet->db[idx].starving_decrement == PET_INTIMACY_NONE)
+ pet->db[idx].starving_delay = 0;
return true;
}
@@ -1625,6 +1847,8 @@ void pet_defaults(void)
pet->final = do_final_pet;
pet->hungry_val = pet_hungry_val;
+ pet->set_hunger = pet_set_hunger;
+ pet->get_card4_value = pet_get_card4_value;
pet->set_intimate = pet_set_intimate;
pet->create_egg = pet_create_egg;
pet->unlocktarget = pet_unlocktarget;
@@ -1637,6 +1861,7 @@ void pet_defaults(void)
pet->performance = pet_performance;
pet->return_egg = pet_return_egg;
pet->data_init = pet_data_init;
+ pet->spawn = pet_spawn;
pet->birth_process = pet_birth_process;
pet->recv_petdata = pet_recv_petdata;
pet->select_egg = pet_select_egg;
diff --git a/src/map/pet.h b/src/map/pet.h
index e0a5529a6..c57df9de3 100644
--- a/src/map/pet.h
+++ b/src/map/pet.h
@@ -57,6 +57,9 @@ struct s_pet_db {
int defence_attack_rate;
int change_target_rate;
int autofeed;
+ int hunger_decrement;
+ int starving_delay;
+ int starving_decrement;
struct script_code *equip_script;
struct script_code *pet_script;
@@ -143,6 +146,8 @@ struct pet_interface {
int (*final) (void);
/* */
int (*hungry_val) (struct pet_data *pd);
+ void (*set_hunger) (struct pet_data *pd, int value);
+ int (*get_card4_value) (int rename_flag, int intimacy);
void (*set_intimate) (struct pet_data *pd, int value);
int (*create_egg) (struct map_session_data *sd, int item_id);
int (*unlocktarget) (struct pet_data *pd);
@@ -155,6 +160,7 @@ struct pet_interface {
int (*performance) (struct map_session_data *sd, struct pet_data *pd);
int (*return_egg) (struct map_session_data *sd, struct pet_data *pd);
int (*data_init) (struct map_session_data *sd, struct s_pet *petinfo);
+ int (*spawn) (struct map_session_data *sd, bool birth_process);
int (*birth_process) (struct map_session_data *sd, struct s_pet *petinfo);
int (*recv_petdata) (int account_id, struct s_pet *p, int flag);
int (*select_egg) (struct map_session_data *sd, int egg_index);
diff --git a/src/map/quest.c b/src/map/quest.c
index 10ea668a6..217acfa19 100644
--- a/src/map/quest.c
+++ b/src/map/quest.c
@@ -675,7 +675,7 @@ static void quest_questinfo_refresh(struct map_session_data *sd)
nullpo_retv(sd);
for (int i = 0; i < VECTOR_LENGTH(map->list[sd->bl.m].qi_list); i++) {
- struct npc_data *nd = &VECTOR_INDEX(map->list[sd->bl.m].qi_list, i);
+ struct npc_data *nd = VECTOR_INDEX(map->list[sd->bl.m].qi_list, i);
int j;
ARR_FIND(0, VECTOR_LENGTH(nd->qi_data), j, quest->questinfo_validate(sd, &VECTOR_INDEX(nd->qi_data, j)) == true);
diff --git a/src/map/rodex.c b/src/map/rodex.c
index 1ebed0623..f2bb8a0d4 100644
--- a/src/map/rodex.c
+++ b/src/map/rodex.c
@@ -231,7 +231,7 @@ static int rodex_send_mail(struct map_session_data *sd, const char *receiver_nam
nullpo_retr(RODEX_SEND_MAIL_FATAL_ERROR, body);
nullpo_retr(RODEX_SEND_MAIL_FATAL_ERROR, title);
- if (!rodex->isenabled() || sd->npc_id > 0) {
+ if (!rodex->isenabled() || (sd->npc_id != 0 && sd->state.using_megaphone == 0)) {
rodex->clean(sd, 1);
return RODEX_SEND_MAIL_FATAL_ERROR;
}
@@ -575,6 +575,7 @@ static void rodex_clean(struct map_session_data *sd, int8 flag)
if (flag == 0)
VECTOR_CLEAR(sd->rodex.messages);
+ sd->state.workinprogress &= ~2;
memset(&sd->rodex.tmp, 0x0, sizeof(sd->rodex.tmp));
}
diff --git a/src/map/script.c b/src/map/script.c
index c1eb2e8b7..9372299bb 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -848,79 +848,134 @@ static const char *parse_callfunc(const char *p, int require_paren, int is_custo
nullpo_retr(NULL, p);
// is need add check for arg null pointer below?
- func = script->add_word(p);
- if (script->str_data[func].type == C_FUNC) {
- script->syntax.nested_call++;
- if (script->syntax.last_func != -1) {
- if (script->str_data[func].val == script->buildin_lang_macro_offset) {
- script->syntax.lang_macro_active = true;
- macro = true;
- } else if (script->str_data[func].val == script->buildin_lang_macro_fmtstring_offset) {
- script->syntax.lang_macro_fmtstring_active = true;
- macro = true;
- }
+
+ if (*p == '"') {
+ p2 = ++p; // jump to the start of the word
+
+ // find the closing quote
+ while (*p2 != '"') {
+ ++p2;
}
- if( !macro ) {
- // buildin function
+ if (p2[1] == ':' && p2[2] == ':') {
+ func = script->add_str("callfunctionofnpc");
+ arg = "*"; // we already take care of the "vs" part of "vs*"
+
+ script->syntax.nested_call++;
script->syntax.last_func = script->str_data[func].val;
script->addl(func);
script->addc(C_ARG);
- }
- arg = script->buildin[script->str_data[func].val];
- if (script->str_data[func].deprecated)
- DeprecationWarning(p);
- if( !arg ) arg = &null_arg; // Use a dummy, null string
- } else if( script->str_data[func].type == C_USERFUNC || script->str_data[func].type == C_USERFUNC_POS ) {
- // script defined function
- script->addl(script->buildin_callsub_ref);
- script->addc(C_ARG);
- script->addl(func);
- arg = script->buildin[script->str_data[script->buildin_callsub_ref].val];
- if( *arg == 0 )
- disp_error_message("parse_callfunc: callsub has no arguments, please review its definition",p);
- if( *arg != '*' )
- ++arg; // count func as argument
+ script->addc(C_STR);
+ do {
+ script->addb(*p++); // npc name
+ } while (p < p2);
+ script->addb(0);
+
+ p = p2 + 3; // skip to start of func name
+ p2 = script->skip_word(p);
+
+ script->addc(C_STR);
+ do {
+ script->addb(*p++); // func name
+ } while (p < p2);
+ script->addb(0);
+
+ p = p2; // skip to just before the ()
+ } else {
+ disp_error_message("script:parse_callfunc: invalid public function call syntax!", p2 + 1);
+ }
} else {
+ func = script->add_word(p);
+ if (script->str_data[func].type == C_FUNC) {
+ script->syntax.nested_call++;
+
+ if (script->syntax.last_func != -1) {
+ if (script->str_data[func].val == script->buildin_lang_macro_offset) {
+ script->syntax.lang_macro_active = true;
+ macro = true;
+ } else if (script->str_data[func].val == script->buildin_lang_macro_fmtstring_offset) {
+ script->syntax.lang_macro_fmtstring_active = true;
+ macro = true;
+ }
+ }
+
+ if (!macro) {
+ // buildin function
+ script->syntax.last_func = script->str_data[func].val;
+ script->addl(func);
+ script->addc(C_ARG);
+ }
+
+ arg = script->buildin[script->str_data[func].val];
+
+ if (script->str_data[func].deprecated == 1) {
+ DeprecationWarning(p);
+ }
+
+ if (arg == NULL) {
+ arg = &null_arg; // Use a dummy, null string
+ }
+ } else if (script->str_data[func].type == C_USERFUNC || script->str_data[func].type == C_USERFUNC_POS) {
+ // script defined function
+ script->addl(script->buildin_callsub_ref);
+ script->addc(C_ARG);
+ script->addl(func);
+ arg = script->buildin[script->str_data[script->buildin_callsub_ref].val];
+
+ if (*arg == 0) {
+ disp_error_message("script:parse_callfunc: callsub has no arguments, please review its definition", p);
+ }
+
+ if (*arg != '*') {
+ ++arg; // count func as argument
+ }
+ } else {
#ifdef SCRIPT_CALLFUNC_CHECK
- const char* name = script->get_str(func);
- if( !is_custom && strdb_get(script->userfunc_db, name) == NULL ) {
+ const char *name = script->get_str(func);
+ if (is_custom == 0 && strdb_get(script->userfunc_db, name) == NULL) {
#endif
- disp_error_message("parse_line: expect command, missing function name or calling undeclared function",p);
+ disp_error_message("script:parse_callfunc: expect command, missing function name or calling undeclared function", p);
#ifdef SCRIPT_CALLFUNC_CHECK
- } else {;
- script->addl(script->buildin_callfunc_ref);
- script->addc(C_ARG);
- script->addc(C_STR);
- while( *name ) script->addb(*name ++);
- script->addb(0);
- arg = script->buildin[script->str_data[script->buildin_callfunc_ref].val];
- if( *arg != '*' ) ++ arg;
- }
+ } else {
+ script->addl(script->buildin_callfunc_ref);
+ script->addc(C_ARG);
+ script->addc(C_STR);
+
+ while (*name != '\0') {
+ script->addb(*name++);
+ }
+
+ script->addb(0);
+ arg = script->buildin[script->str_data[script->buildin_callfunc_ref].val];
+
+ if (*arg != '*') {
+ ++ arg;
+ }
+ }
#endif
+ }
}
p = script->skip_word(p);
p = script->skip_space(p);
script->syntax.curly[script->syntax.curly_count].type = TYPE_ARGLIST;
script->syntax.curly[script->syntax.curly_count].count = 0;
- if( *p == ';' )
- {// <func name> ';'
+
+ if (*p == ';') {
+ // <func name> ';'
script->syntax.curly[script->syntax.curly_count].flag = ARGLIST_NO_PAREN;
- } else if( *p == '(' && *(p2=script->skip_space(p+1)) == ')' )
- {// <func name> '(' ')'
+ } else if (*p == '(' && *(p2 = script->skip_space(p + 1)) == ')') {
+ // <func name> '(' ')'
script->syntax.curly[script->syntax.curly_count].flag = ARGLIST_PAREN;
p = p2;
- /*
- } else if( 0 && require_paren && *p != '(' )
- {// <func name>
- script->syntax.curly[script->syntax.curly_count].flag = ARGLIST_NO_PAREN;
- */
- } else {// <func name> <arg list>
- if( require_paren ) {
- if( *p != '(' )
- disp_error_message("need '('",p);
+ } else {
+ // <func name> <arg list>
+ if (require_paren == 1) {
+ if (*p != '(') {
+ disp_error_message("script:parse_callfunc: need '('", p);
+ }
+
++p; // skip '('
script->syntax.curly[script->syntax.curly_count].flag = ARGLIST_PAREN;
} else if( *p == '(' ) {
@@ -928,41 +983,65 @@ static const char *parse_callfunc(const char *p, int require_paren, int is_custo
} else {
script->syntax.curly[script->syntax.curly_count].flag = ARGLIST_NO_PAREN;
}
+
++script->syntax.curly_count;
- while( *arg ) {
- p2=script->parse_subexpr(p,-1);
- if( p == p2 )
- break; // not an argument
- if( *arg != '*' )
- ++arg; // next argument
- p=script->skip_space(p2);
- if( *arg == 0 || *p != ',' )
- break; // no more arguments
+ while (*arg != '\0') {
+ p2 = script->parse_subexpr(p, -1);
+
+ if (p == p2) {
+ // not an argument
+ break;
+ }
+
+ if (*arg != '*') {
+ // next argument
+ ++arg;
+ }
+
+ p = script->skip_space(p2);
+
+ if (*arg == 0 || *p != ',') {
+ // no more arguments
+ break;
+ }
+
++p; // skip comma
}
+
--script->syntax.curly_count;
}
- if( arg && *arg && *arg != '?' && *arg != '*' )
- disp_error_message2("parse_callfunc: not enough arguments, expected ','", p, script->config.warn_func_mismatch_paramnum);
- if( script->syntax.curly[script->syntax.curly_count].type != TYPE_ARGLIST )
- disp_error_message("parse_callfunc: DEBUG last curly is not an argument list",p);
- if( script->syntax.curly[script->syntax.curly_count].flag == ARGLIST_PAREN ) {
- if( *p != ')' )
- disp_error_message("parse_callfunc: expected ')' to close argument list",p);
+
+ if (arg != NULL && *arg != '\0' && *arg != '?' && *arg != '*') {
+ disp_error_message2("script:parse_callfunc: not enough arguments, expected ','", p, script->config.warn_func_mismatch_paramnum);
+ }
+
+ if (script->syntax.curly[script->syntax.curly_count].type != TYPE_ARGLIST) {
+ disp_error_message("parse_callfunc: DEBUG last curly is not an argument list", p);
+ }
+
+ if (script->syntax.curly[script->syntax.curly_count].flag == ARGLIST_PAREN) {
+ if (*p != ')') {
+ disp_error_message("script:parse_callfunc: expected ')' to close argument list", p);
+ }
+
++p;
- if (script->str_data[func].val == script->buildin_lang_macro_offset)
+ if (script->str_data[func].val == script->buildin_lang_macro_offset) {
script->syntax.lang_macro_active = false;
- else if (script->str_data[func].val == script->buildin_lang_macro_fmtstring_offset)
+ } else if (script->str_data[func].val == script->buildin_lang_macro_fmtstring_offset) {
script->syntax.lang_macro_fmtstring_active = false;
+ }
}
if (!macro) {
- if (0 == --script->syntax.nested_call)
+ if (0 == --script->syntax.nested_call) {
script->syntax.last_func = -1;
+ }
+
script->addc(C_FUNC);
}
+
return p;
}
@@ -1161,6 +1240,80 @@ static const char *parse_variable(const char *p)
return p;
}
+/**
+ * Converts a number expression literal to an actual integer.
+ * Number separators are skipped.
+ *
+ * expects these formats:
+ * 1337
+ * 0x1337
+ * 0b1001
+ * 0o1337
+ *
+ * example with separating nibbles of a binary literal:
+ * 0b1101_0111_1001_1111
+ *
+ * @param p - a pointer to the first char of the number literal
+ * @param lli - a pointer to the resulting long long integer
+ * @returns a pointer to the first char after the parsed number
+*/
+static const char *parse_number(const char *p, long long *lli) {
+ nullpo_retr(NULL, p);
+
+ const bool unary_plus = (*p == '+');
+ const bool unary_minus = (*p == '-');
+
+ if (unary_plus || unary_minus) {
+ p++;
+ }
+
+ if (ISNSEPARATOR(*p)) {
+ disp_error_message("parse_number: number literals cannot begin with a separator", p);
+ }
+
+#define PARSENUMBER(skip, func, radix) \
+ for (p += skip; func(*p) || (ISNSEPARATOR(*p) && (func(p[1]) || ISNSEPARATOR(p[1]))); ++p) { \
+ if (func(*p)) { \
+ *lli *= radix; \
+ *lli += (*p < 'A') ? (*p & 0xF) : (9 + (*p & 0x7)); \
+ } else if (ISNSEPARATOR(p[1])) { \
+ disp_error_message("parse_number: number literals cannot contain two separators in a row", p + 1); \
+ } \
+ }
+
+ if (*p == '0' && p[1] == 'x') {
+ PARSENUMBER(2, ISXDIGIT, 16);
+ } else if (*p == '0' && p[1] == 'o') {
+ PARSENUMBER(2, ISODIGIT, 8);
+ } else if (*p == '0' && p[1] == 'b') {
+ PARSENUMBER(2, ISBDIGIT, 2);
+ } else {
+ PARSENUMBER(0, ISDIGIT, 10);
+ }
+
+#undef PARSENUMBER
+
+ if (ISNSEPARATOR(*p)) {
+ disp_error_message("parse_number: number literals cannot end with a separator", p);
+ }
+
+ if (unary_minus) {
+ // reverse the sign
+ *lli = -(*lli);
+ }
+
+ // make sure we can't underflow/overflow
+ if (*lli < INT_MIN) {
+ *lli = INT_MIN;
+ script->disp_warning_message("parse_number: underflow detected, capping value to INT_MIN", p);
+ } else if (*lli > INT_MAX) {
+ *lli = INT_MAX;
+ script->disp_warning_message("parse_number: overflow detected, capping value to INT_MAX", p);
+ }
+
+ return p;
+}
+
/*
* Checks whether the gives string is a number literal
*
@@ -1177,24 +1330,44 @@ static const char *parse_variable(const char *p)
static bool is_number(const char *p)
{
const char *np;
- if (!p)
- return false;
- if (*p == '-' || *p == '+')
+ nullpo_retr(false, p);
+
+ if (*p == '-' || *p == '+') {
p++;
+ }
+
np = p;
+
if (*p == '0' && p[1] == 'x') {
- p+=2;
- np = p;
- // Hexadecimal
- while (ISXDIGIT(*np))
+ // Hexadecimal: 0xFFFF
+ np = (p += 2);
+ while (ISXDIGIT(*np) || ISNSEPARATOR(*np)) {
np++;
- } else {
- // Decimal
- while (ISDIGIT(*np))
+ }
+ } else if (*p == '0' && p[1] == 'b') {
+ // Binary: 0b0001
+ np = (p += 2);
+ while (ISBDIGIT(*np) || ISNSEPARATOR(*np)) {
+ np++;
+ }
+ } else if (*p == '0' && p[1] == 'o') {
+ // Octal: 0o1500
+ np = (p += 2);
+ while (ISODIGIT(*np) || ISNSEPARATOR(*np)) {
+ np++;
+ }
+ } else if (ISDIGIT(*p)) {
+ // Decimal: 1234
+ while (ISDIGIT(*np) || ISNSEPARATOR(*np)) {
np++;
+ }
}
- if (p != np && *np != '_' && !ISALPHA(*np)) // At least one digit, and next isn't a letter or _
+
+ if (p != np && *np != '_' && !ISALPHA(*np)) {
+ // At least one digit, and next isn't a letter or _
return true;
+ }
+
return false;
}
@@ -1230,16 +1403,29 @@ static int script_string_dup(char *str)
*------------------------------------------*/
static const char *parse_simpleexpr(const char *p)
{
- p=script->skip_space(p);
+ p = script->skip_space(p);
nullpo_retr(NULL, p);
- if (*p == ';' || *p == ',')
- disp_error_message("parse_simpleexpr: unexpected end of expression",p);
+
+ if (*p == ';' || *p == ',') {
+ disp_error_message("script:parse_simpleexpr: unexpected end of expression", p);
+ }
+
if (*p == '(') {
return script->parse_simpleexpr_paren(p);
} else if (is_number(p)) {
return script->parse_simpleexpr_number(p);
} else if(*p == '"') {
+ const char *p2 = p + 1;
+
+ while (*p2 != '"') {
+ ++p2;
+ }
+
+ if (p2[1] == ':' && p2[2] == ':') {
+ return script->parse_callfunc(p, 1, 0); // XXX: why does callfunc use int for booleans?
+ }
+
return script->parse_simpleexpr_string(p);
} else {
return script->parse_simpleexpr_name(p);
@@ -1275,21 +1461,9 @@ static const char *parse_simpleexpr_paren(const char *p)
static const char *parse_simpleexpr_number(const char *p)
{
- char *np = NULL;
- long long lli;
-
- nullpo_retr(NULL, p);
- while (*p == '0' && ISDIGIT(p[1]))
- p++; // Skip leading zeros, we don't support octal literals
+ long long lli = 0;
+ const char *np = parse_number(p, &lli);
- lli = strtoll(p, &np, 0);
- if (lli < INT_MIN) {
- lli = INT_MIN;
- script->disp_warning_message("parse_simpleexpr: underflow detected, capping value to INT_MIN", p);
- } else if (lli > INT_MAX) {
- lli = INT_MAX;
- script->disp_warning_message("parse_simpleexpr: overflow detected, capping value to INT_MAX", p);
- }
script->addi((int)lli); // Cast is safe, as it's already been checked for overflows
return np;
@@ -1577,6 +1751,85 @@ static const char *parse_line(const char *p)
return p;
}
+/**
+ * parses a local function expression
+ *
+ * expects these formats:
+ * function <name>;
+ * function <name> { <script> }
+ *
+ * this is invoked by script->parse_syntax() after checking whether the function
+ * is public or not
+ *
+ * @param p - a pointer to the start of the function expression
+ * @param is_public - whether this function should be accessible from outside the NPC scope
+ */
+static const char *parse_syntax_function (const char *p, bool is_public)
+{
+ const char *func_name = script->skip_space(p); // the name of the local function
+ p = script->skip_word(func_name);
+
+ if (p == func_name) {
+ disp_error_message("script:parse_syntax_function: function name is missing or invalid", p);
+ }
+
+ const char *p2 = script->skip_space(p);
+
+ if (*p2 == ';') {
+ // function <name> ;
+ // function declaration - just register the name
+ int l = script->add_word(func_name);
+
+ if (script->str_data[l].type == C_NOP) {
+ // register only, if the name was not used by something else
+ script->str_data[l].type = C_USERFUNC;
+ } else if (script->str_data[l].type != C_USERFUNC) {
+ disp_error_message("script:parse_syntax_function: function name is already in use", func_name);
+ }
+
+ // Close condition of if, for, while
+ p = script->parse_syntax_close(p2 + 1);
+ return p;
+ } else if (*p2 == '{') {
+ // function <name> <line/block of code>
+ script->syntax.curly[script->syntax.curly_count].type = TYPE_USERFUNC;
+ script->syntax.curly[script->syntax.curly_count].count = 1;
+ script->syntax.curly[script->syntax.curly_count].index = script->syntax.index++;
+ script->syntax.curly[script->syntax.curly_count].flag = 0;
+ ++script->syntax.curly_count;
+
+ // Jump over the function code
+ char label[256];
+ sprintf(label, "goto __FN%x_FIN;", (unsigned int)script->syntax.curly[script->syntax.curly_count - 1].index);
+ script->syntax.curly[script->syntax.curly_count].type = TYPE_NULL;
+ ++script->syntax.curly_count;
+ script->parse_line(label);
+ --script->syntax.curly_count;
+
+ // Set the position of the function (label)
+ int l = script->add_word(func_name);
+
+ if (script->str_data[l].type == C_NOP || script->str_data[l].type == C_USERFUNC) {
+ // register only, if the name was not used by something else
+ script->str_data[l].type = C_USERFUNC;
+ script->set_label(l, VECTOR_LENGTH(script->buf), p);
+
+ if ((script->parse_options & SCRIPT_USE_LABEL_DB) != 0) {
+ script->label_add(l, VECTOR_LENGTH(script->buf),
+ LABEL_IS_USERFUNC | (is_public ? LABEL_IS_EXTERN : 0));
+ }
+ } else {
+ disp_error_message("script:parse_syntax_function: function name is already in use", func_name);
+ }
+
+ return script->skip_space(p);
+ } else {
+ disp_error_message("script:parse_syntax_function: expected ';' or '{' at function syntax", p);
+ }
+
+ return p;
+}
+
// { ... } Closing process
static const char *parse_curly_close(const char *p)
{
@@ -1920,65 +2173,11 @@ static const char *parse_syntax(const char *p)
script->set_label(l, VECTOR_LENGTH(script->buf), p);
return p;
} else if( p2 - p == 8 && strncmp(p, "function", 8) == 0 ) {
- // internal script function
- const char *func_name;
-
- func_name = script->skip_space(p2);
- p = script->skip_word(func_name);
- if( p == func_name )
- disp_error_message("parse_syntax:function: function name is missing or invalid", p);
- p2 = script->skip_space(p);
- if( *p2 == ';' )
- {// function <name> ;
- // function declaration - just register the name
- int l;
- l = script->add_word(func_name);
- if( script->str_data[l].type == C_NOP )// register only, if the name was not used by something else
- script->str_data[l].type = C_USERFUNC;
- else if( script->str_data[l].type == C_USERFUNC )
- ; // already registered
- else
- disp_error_message("parse_syntax:function: function name is invalid", func_name);
-
- // Close condition of if, for, while
- p = script->parse_syntax_close(p2 + 1);
- return p;
- }
- else if(*p2 == '{')
- {// function <name> <line/block of code>
- char label[256];
- int l;
-
- script->syntax.curly[script->syntax.curly_count].type = TYPE_USERFUNC;
- script->syntax.curly[script->syntax.curly_count].count = 1;
- script->syntax.curly[script->syntax.curly_count].index = script->syntax.index++;
- script->syntax.curly[script->syntax.curly_count].flag = 0;
- ++script->syntax.curly_count;
-
- // Jump over the function code
- sprintf(label, "goto __FN%x_FIN;", (unsigned int)script->syntax.curly[script->syntax.curly_count-1].index);
- script->syntax.curly[script->syntax.curly_count].type = TYPE_NULL;
- ++script->syntax.curly_count;
- script->parse_line(label);
- --script->syntax.curly_count;
-
- // Set the position of the function (label)
- l=script->add_word(func_name);
- if( script->str_data[l].type == C_NOP || script->str_data[l].type == C_USERFUNC )// register only, if the name was not used by something else
- {
- script->str_data[l].type = C_USERFUNC;
- script->set_label(l, VECTOR_LENGTH(script->buf), p);
- if( script->parse_options&SCRIPT_USE_LABEL_DB )
- script->label_add(l, VECTOR_LENGTH(script->buf));
- }
- else
- disp_error_message("parse_syntax:function: function name is invalid", func_name);
-
- return script->skip_space(p);
- }
- else
- {
- disp_error_message("expect ';' or '{' at function syntax",p);
+ // local function not marked as public or private
+ if (script->config.functions_private_by_default) {
+ return script->parse_syntax_function(p2, false);
+ } else {
+ return script->parse_syntax_function(p2, true);
}
}
break;
@@ -2006,6 +2205,26 @@ static const char *parse_syntax(const char *p)
return p;
}
break;
+ case 'p':
+ case 'P':
+ if (p2 - p == 6 && strncmp(p, "public", 6) == 0) {
+ p2 = script->skip_space(p2);
+ const char *p3 = script->skip_word(p2);
+
+ if (p3 - p2 == 8 && strncmp(p2, "function", 8) == 0) {
+ // local function explicitly marked as public
+ return script->parse_syntax_function(p3, true);
+ }
+ } else if (p2 - p == 7 && strncmp(p, "private", 7) == 0) {
+ p2 = script->skip_space(p2);
+ const char *p3 = script->skip_word(p2);
+
+ if (p3 - p2 == 8 && strncmp(p2, "function", 8) == 0) {
+ // local function explicitly marked as private
+ return script->parse_syntax_function(p3, false);
+ }
+ }
+ break;
case 's':
case 'S':
if( p2 - p == 6 && strncmp(p, "switch", 6) == 0 ) {
@@ -2668,25 +2887,32 @@ static struct script_code *parse_script(const char *src, const char *file, int l
}
}
- while( script->syntax.curly_count != 0 || *p != end )
- {
- if( *p == '\0' )
- disp_error_message("unexpected end of script",p);
+ while (script->syntax.curly_count != 0 || *p != end) {
+ if (*p == '\0') {
+ disp_error_message("script:parse_script: unexpected end of script", p);
+ }
+
// Special handling only label
- tmpp=script->skip_space(script->skip_word(p));
- if(*tmpp==':' && !(strncmp(p,"default:",8) == 0 && p + 7 == tmpp)) {
- i=script->add_word(p);
+ tmpp = script->skip_space(script->skip_word(p));
+
+ if (*tmpp == ':' && !(strncmp(p, "default:", 8) == 0 && p + 7 == tmpp)
+ && !(strncmp(p, "function", 8) == 0 && script->skip_space(p + 8) == tmpp)) {
+ i = script->add_word(p);
script->set_label(i, VECTOR_LENGTH(script->buf), p);
- if( script->parse_options&SCRIPT_USE_LABEL_DB )
- script->label_add(i, VECTOR_LENGTH(script->buf));
- p=tmpp+1;
- p=script->skip_space(p);
+
+ if ((script->parse_options & SCRIPT_USE_LABEL_DB) != 0) {
+ bool is_extern = ((p[0] == 'O' || p[0] == 'o') && (p[1] == 'N' || p[1] == 'n'));
+ script->label_add(i, VECTOR_LENGTH(script->buf), is_extern ? LABEL_IS_EXTERN : 0);
+ }
+
+ p = tmpp + 1;
+ p = script->skip_space(p);
continue;
}
// All other lumped
- p=script->parse_line(p);
- p=script->skip_space(p);
+ p = script->parse_line(p);
+ p = script->skip_space(p);
script->parse_nextline(false, p);
}
@@ -3395,6 +3621,32 @@ static void set_reg_instance_num(struct script_state *st, int64 num, const char
}
/**
+ * Validates if a variable is permanent (stored in database) by passed variable name.
+ *
+ * @param name The variable name to validate.
+ * @return True if variable is permanent, otherwise false.
+ *
+ **/
+static bool script_is_permanent_variable(const char *name)
+{
+ nullpo_retr(false, name);
+
+ if (strlen(name) == 0)
+ return false;
+
+ if (ISALNUM(name[0]) != 0)
+ return true; // Permanent characater variable.
+
+ if (name[0] == '#')
+ return true; // Permanent (global) account variable.
+
+ if (strlen(name) > 1 && name[0] == '$' && ISALNUM(name[1]) != 0)
+ return true; // Permanent server variable.
+
+ return false;
+}
+
+/**
* Stores the value of a script variable
*
* @param st current script state.
@@ -3439,6 +3691,18 @@ static int set_reg(struct script_state *st, struct map_session_data *sd, int64 n
if (is_string_variable(name)) {// string variable
const char *str = (const char*)value;
+ if (script->is_permanent_variable(name) && strlen(str) > SCRIPT_STRING_VAR_LENGTH) {
+ ShowError("script:set_reg: Value of variable %s is too long: %d! Maximum is %d. Skipping...\n",
+ name, (int)strlen(str), SCRIPT_STRING_VAR_LENGTH);
+
+ if (st != NULL) {
+ script->reportsrc(st);
+ st->state = END;
+ }
+
+ return 0;
+ }
+
switch (prefix) {
case '@':
if (ref) {
@@ -4828,6 +5092,8 @@ static bool script_config_read(const char *filename, bool imported)
libconfig->setting_lookup_bool_real(setting, "warn_func_mismatch_paramnum", &script->config.warn_func_mismatch_paramnum);
libconfig->setting_lookup_bool_real(setting, "warn_func_mismatch_argtypes", &script->config.warn_func_mismatch_argtypes);
+ libconfig->setting_lookup_bool_real(setting, "functions_private_by_default", &script->config.functions_private_by_default);
+ libconfig->setting_lookup_bool_real(setting, "functions_as_events", &script->config.functions_as_events);
libconfig->setting_lookup_int(setting, "check_cmdcount", &script->config.check_cmdcount);
libconfig->setting_lookup_int(setting, "check_gotocount", &script->config.check_gotocount);
libconfig->setting_lookup_int(setting, "input_min_value", &script->config.input_min_value);
@@ -6397,6 +6663,111 @@ static BUILDIN(callfunc)
return true;
}
+
+/**
+ * Calls a local function within a NPC as if it was part of the current scope.
+ * Resumes execution in the previous scope once the NPC function returns. This
+ * is essentially a clone of buildin_callsub that can run in arbitrary NPCs.
+ *
+ * Usage:
+ * callfunctionofnpc("<npc name>", "<function name>"{, <arg>...})
+ * callfunctionofnpc(<npc id>, "<function name>"{, <arg>...})
+ *
+ * This buildin is also used internally by this syntax:
+ * "<npc name>"::<function name>({<arg>...})
+ */
+static BUILDIN(callfunctionofnpc) {
+ struct npc_data *nd = NULL;
+
+ if (script_isstring(st, 2)) {
+ nd = npc->name2id(script_getstr(st, 2));
+ } else {
+ nd = map->id2nd(script_getnum(st, 2));
+ }
+
+ if (nd == NULL) {
+ ShowError("script:callfunctionofnpc: NPC not found.\n");
+ st->state = END;
+ return false;
+ }
+
+ const char *function_name = script_getstr(st, 3);
+ int pos = -1;
+
+ // find the function label within the label list of the NPC
+ for (int i = 0; i < nd->u.scr.label_list_num; ++i) {
+ if (strcmp(nd->u.scr.label_list[i].name, function_name) == 0) {
+ if ((nd->u.scr.label_list[i].flags & LABEL_IS_EXTERN) != 0
+ && (nd->u.scr.label_list[i].flags & LABEL_IS_USERFUNC) != 0) {
+ // function label found: set the start location
+ pos = nd->u.scr.label_list[i].pos;
+ } else if ((nd->u.scr.label_list[i].flags & LABEL_IS_USERFUNC) != 0) {
+ ShowError("script:callfunctionofnpc: function '%s' is not marked as public in NPC '%s'.\n", function_name, nd->name);
+ st->state = END;
+ return false;
+ }
+ break;
+ }
+ }
+
+ if (pos < 0) {
+ ShowError("script:callfunctionofnpc: function '%s' not found in NPC '%s'!\n", function_name, nd->name);
+ st->state = END;
+ return false;
+ }
+
+ // alloc a reg_db reference of the current scope for the new scope
+ struct reg_db *ref = (struct reg_db *)aCalloc(sizeof(struct reg_db), 2);
+ // scope variables (.@var)
+ ref[0].vars = st->stack->scope.vars;
+ ref[0].arrays = st->stack->scope.arrays;
+ // npc variables (.var)
+ ref[1].vars = st->script->local.vars;
+ ref[1].arrays = st->script->local.arrays;
+
+ int i = 0;
+
+ // make sure the arguments we push retain their current reg_db references:
+ // this allows to do things like set(getarg(0), ...)
+ for (i = st->start + 4; i < st->end; i++) {
+ struct script_data *data = script->push_copy(st->stack, i);
+
+ if (data_isreference(data) && data->ref == NULL) {
+ const char *name = reference_getname(data);
+
+ if (name[0] == '.') {
+ data->ref = (name[1] == '@' ? &ref[0] : &ref[1]);
+ }
+ }
+ }
+
+ // save the previous scope
+ struct script_retinfo *ri = NULL;
+ CREATE(ri, struct script_retinfo, 1);
+ ri->script = st->script; // script code
+ ri->scope.vars = st->stack->scope.vars; // scope variables
+ ri->scope.arrays = st->stack->scope.arrays; // scope arrays
+ ri->pos = st->pos; // script location
+ ri->nargs = i - st->start - 4; // argument count
+ ri->defsp = st->stack->defsp; // default stack pointer
+ script->push_retinfo(st->stack, ri, ref);
+
+ // change the current scope to the scope of the function
+ st->pos = pos;
+ st->script = nd->u.scr.script;
+ st->stack->defsp = st->stack->sp;
+ st->state = GOTO;
+ st->stack->scope.vars = i64db_alloc(DB_OPT_RELEASE_DATA);
+ st->stack->scope.arrays = idb_alloc(DB_OPT_BASE);
+
+ // make sure local reg_db of the other NPC is initialized
+ if (st->script->local.vars == NULL) {
+ st->script->local.vars = i64db_alloc(DB_OPT_RELEASE_DATA);
+ }
+
+ return true;
+}
+
/*==========================================
* subroutine call
*------------------------------------------*/
@@ -8764,22 +9135,71 @@ static BUILDIN(delitemidx)
return true;
}
-/*==========================================
- * Enables/Disables use of items while in an NPC [Skotlex]
- *------------------------------------------*/
+/**
+ * Enable item actions while interacting with NPC.
+ *
+ * @code{.herc}
+ * enableitemuse({<flag>});
+ * enable_items({<flag>});
+ * @endcode
+ *
+ **/
static BUILDIN(enableitemuse)
{
+ int flag = battle_config.item_enabled_npc;
+
+ if (script_hasdata(st, 2)) {
+ if (!script_isinttype(st, 2))
+ return true;
+
+ flag = script_getnum(st, 2);
+ }
+
+ if (flag < 0)
+ return true;
+
struct map_session_data *sd = script->rid2sd(st);
- if (sd != NULL)
- st->npc_item_flag = sd->npc_item_flag = 1;
+
+ if (sd == NULL)
+ return true;
+
+ st->npc_item_flag |= flag;
+ sd->npc_item_flag |= flag;
+
return true;
}
+/**
+ * Disable item actions while interacting with NPC.
+ *
+ * @code{.herc}
+ * disableitemuse({<flag>});
+ * disable_items({<flag>});
+ * @endcode
+ *
+ **/
static BUILDIN(disableitemuse)
{
+ int flag = battle_config.item_enabled_npc;
+
+ if (script_hasdata(st, 2)) {
+ if (!script_isinttype(st, 2))
+ return true;
+
+ flag = script_getnum(st, 2);
+ }
+
+ if (flag < 0)
+ return true;
+
struct map_session_data *sd = script->rid2sd(st);
- if (sd != NULL)
- st->npc_item_flag = sd->npc_item_flag = 0;
+
+ if (sd == NULL)
+ return true;
+
+ st->npc_item_flag &= ~flag;
+ sd->npc_item_flag &= ~flag;
+
return true;
}
@@ -10852,7 +11272,8 @@ static BUILDIN(gettimetick)
case 0:
default:
//type 0:(System Ticks)
- script_pushint(st,(int)timer->gettick()); // TODO: change this to int64 when we'll support 64 bit script values
+ // Conjunction with INT_MAX is done to prevent overflow. (Script variables are signed integers.)
+ script_pushint(st, timer->gettick() & INT_MAX); // TODO: change this to int64 when we'll support 64 bit script values
break;
}
return true;
@@ -10998,34 +11419,33 @@ static BUILDIN(itemskill)
{
struct map_session_data *sd = script->rid2sd(st);
- if (sd == NULL || sd->ud.skilltimer != INVALID_TIMER)
+ if (sd == NULL)
return true;
- sd->skillitem = script_isstringtype(st, 2) ? skill->name2id(script_getstr(st, 2)) : script_getnum(st, 2);
- sd->skillitemlv = script_getnum(st, 3);
- sd->state.itemskill_conditions_checked = 0; // Skill casting items will check the conditions prior to the target selection in AEGIS. Thus we need a flag to prevent checking them twice.
+ sd->auto_cast_current.type = AUTOCAST_ITEM;
+ sd->auto_cast_current.skill_id = script_isstringtype(st, 2) ? skill->name2id(script_getstr(st, 2)) : script_getnum(st, 2);
+ sd->auto_cast_current.skill_lv = script_getnum(st, 3);
int flag = script_hasdata(st, 4) ? script_getnum(st, 4) : ISF_NONE;
- sd->state.itemskill_no_conditions = ((flag & ISF_IGNORECONDITIONS) == ISF_IGNORECONDITIONS) ? 1 : 0; // Unset in pc_itemskill_clear().
+ sd->auto_cast_current.itemskill_check_conditions = ((flag & ISF_CHECKCONDITIONS) == ISF_CHECKCONDITIONS);
- if (sd->state.itemskill_no_conditions == 0) {
- if (skill->check_condition_castbegin(sd, sd->skillitem, sd->skillitemlv) == 0
- || skill->check_condition_castend(sd, sd->skillitem, sd->skillitemlv) == 0) {
+ if (sd->auto_cast_current.itemskill_check_conditions) {
+ if (skill->check_condition_castbegin(sd, sd->auto_cast_current.skill_id, sd->auto_cast_current.skill_lv) == 0
+ || skill->check_condition_castend(sd, sd->auto_cast_current.skill_id, sd->auto_cast_current.skill_lv) == 0) {
return true;
}
- sd->state.itemskill_conditions_checked = 1; // Unset in pc_itemskill_clear().
+ sd->auto_cast_current.itemskill_conditions_checked = true;
}
- sd->state.itemskill_no_casttime = ((flag & ISF_INSTANTCAST) == ISF_INSTANTCAST) ? 1 : 0; // Unset in pc_itemskill_clear().
- sd->state.itemskill_castonself = ((flag & ISF_CASTONSELF) == ISF_CASTONSELF) ? 1 : 0; // Unset in pc_itemskill_clear().
+ sd->auto_cast_current.itemskill_instant_cast = ((flag & ISF_INSTANTCAST) == ISF_INSTANTCAST);
+ sd->auto_cast_current.itemskill_cast_on_self = ((flag & ISF_CASTONSELF) == ISF_CASTONSELF);
- // itemskill_conditions_checked/itemskill_no_conditions/itemskill_no_casttime/itemskill_castonself abuse prevention. Unset in pc_itemskill_clear().
- sd->itemskill_id = sd->skillitem;
- sd->itemskill_lv = sd->skillitemlv;
+ VECTOR_ENSURE(sd->auto_cast, 1, 1);
+ VECTOR_PUSH(sd->auto_cast, sd->auto_cast_current);
- clif->item_skill(sd, sd->skillitem, sd->skillitemlv);
+ clif->item_skill(sd, sd->auto_cast_current.skill_id, sd->auto_cast_current.skill_lv);
return true;
}
@@ -12114,6 +12534,52 @@ static BUILDIN(mobattached)
return true;
}
+/**
+ * Announces a colored text in '<char_name> Shouts : <message>' format.
+ * Default color is white ("FFFFFF").
+ *
+ * This is a special use case of packet 0x009a where the message's first 34 bytes
+ * are reserved for string "micc" (4B) which identifies the broadcast as megaphone shout,
+ * the character's name (24B) and the text color (6B).
+ *
+ * 009a <packet len>.W <micc>.4B <char name>.24B <color>.6B <message>.?B
+ *
+ * @code{.herc}
+ * loudhailer("<message>"{, "<color>"});
+ * @endcode
+ *
+ **/
+static BUILDIN(loudhailer)
+{
+ const char *mes = script_getstr(st, 2);
+ size_t len_mes = strlen(mes);
+
+ Assert_retr(false, len_mes + 33 < CHAT_SIZE_MAX); // +33 because of the '<char_name> Shouts : ' message prefix.
+
+ const char *color = script_hasdata(st, 3) ? script_getstr(st, 3) : "FFFFFF";
+
+ Assert_retr(false, strlen(color) == 6);
+
+ struct map_session_data *sd = script->rid2sd(st);
+
+ if (sd == NULL)
+ return false;
+
+ char mes_formatted[CHAT_SIZE_MAX + 30] = "";
+
+ strcpy(mes_formatted, sd->status.name);
+ strcpy(mes_formatted + 24, color);
+ safesnprintf(mes_formatted + 30, CHAT_SIZE_MAX, "%s Shouts : %s", sd->status.name, mes);
+
+ size_t len_formatted = 30 + strlen(sd->status.name) + 10 + len_mes + 1;
+
+ clif->broadcast(&sd->bl, mes_formatted, (int)len_formatted, BC_MEGAPHONE, ALL_CLIENT);
+
+ sd->state.using_megaphone = 0;
+
+ return true;
+}
+
/*==========================================
*------------------------------------------*/
static BUILDIN(announce)
@@ -13580,6 +14046,7 @@ static BUILDIN(getmapflag)
case MF_PAIRSHIP_ENDABLE: script_pushint(st, map->list[m].flag.pairship_endable); break;
case MF_NOSTORAGE: script_pushint(st, map->list[m].flag.nostorage); break;
case MF_NOGSTORAGE: script_pushint(st, map->list[m].flag.nogstorage); break;
+ case MF_NOPET: script_pushint(st, map->list[m].flag.nopet); break;
}
}
@@ -13712,6 +14179,7 @@ static BUILDIN(setmapflag)
case MF_PAIRSHIP_ENDABLE: map->list[m].flag.pairship_endable = 1; break;
case MF_NOSTORAGE: map->list[m].flag.nostorage = cap_value(val, 0, 3); break;
case MF_NOGSTORAGE: map->list[m].flag.nogstorage = cap_value(val, 0, 3); break;
+ case MF_NOPET: map->list[m].flag.nopet = 1; break;
}
}
@@ -13805,6 +14273,7 @@ static BUILDIN(removemapflag)
case MF_NOVIEWID: map->list[m].flag.noviewid = EQP_NONE; break;
case MF_NOSTORAGE: map->list[m].flag.nostorage = 0; break;
case MF_NOGSTORAGE: map->list[m].flag.nogstorage = 0; break;
+ case MF_NOPET: map->list[m].flag.nopet = 0; break;
}
}
@@ -14780,24 +15249,34 @@ static BUILDIN(getitemslots)
return true;
}
-// TODO: add matk here if needed
-
-/*==========================================
- * Returns some values of an item [Lupus]
- * Price, Weight, etc...
- *------------------------------------------*/
+/**
+ * Returns various information about an item.
+ *
+ * @code{.herc}
+ * getiteminfo(<item ID>, <type>);
+ * getiteminfo("<item name>", <type>);
+ * @endcode
+ *
+ **/
static BUILDIN(getiteminfo)
{
- int item_id = script_getnum(st, 2);
- int n = script_getnum(st, 3);
- struct item_data *it = itemdb->exists(item_id);
+ struct item_data *it;
+
+ if (script_isstringtype(st, 2)) { /// Item name.
+ const char *name = script_getstr(st, 2);
+ it = itemdb->search_name(name);
+ } else { /// Item ID.
+ it = itemdb->exists(script_getnum(st, 2));
+ }
if (it == NULL) {
script_pushint(st, -1);
return true;
}
- switch (n) {
+ int type = script_getnum(st, 3);
+
+ switch (type) {
case ITEMINFO_BUYPRICE:
script_pushint(st, it->value_buy);
break;
@@ -14909,16 +15388,24 @@ static BUILDIN(getiteminfo)
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);
- }
+ 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;
@@ -14928,11 +15415,21 @@ static BUILDIN(getiteminfo)
case ITEMINFO_GM_LV_TRADE_OVERRIDE:
script_pushint(st, it->gm_lv_trade_override);
break;
+ case ITEMINFO_ID:
+ script_pushint(st, it->nameid);
+ break;
+ case ITEMINFO_AEGISNAME:
+ script_pushstrcopy(st, it->name);
+ break;
+ case ITEMINFO_NAME:
+ script_pushstrcopy(st, it->jname);
+ break;
default:
- ShowError("buildin_getiteminfo: Invalid item type %d.\n", n);
- script_pushint(st,-1);
+ ShowError("buildin_getiteminfo: Invalid item info type %d.\n", type);
+ script_pushint(st, -1);
return false;
}
+
return true;
}
@@ -16085,7 +16582,6 @@ static BUILDIN(atcommand)
struct map_session_data *sd, *dummy_sd = NULL;
int fd;
const char* cmd;
- bool ret = true;
cmd = script_getstr(st,2);
@@ -16108,11 +16604,12 @@ static BUILDIN(atcommand)
if (!atcommand->exec(fd, sd, cmd, false)) {
ShowWarning("script: buildin_atcommand: failed to execute command '%s'\n", cmd);
- script->reportsrc(st);
- ret = false;
+ if (dummy_sd != NULL)
+ aFree(dummy_sd);
+ return false;
}
if (dummy_sd) aFree(dummy_sd);
- return ret;
+ return true;
}
/**
@@ -16558,7 +17055,7 @@ static BUILDIN(npcwalkto)
} else {
status_calc_npc(nd, SCO_NONE);
}
- unit->walktoxy(&nd->bl, x, y, 0);
+ unit->walk_toxy(&nd->bl, x, y, 0);
}
return true;
@@ -18836,7 +19333,14 @@ static BUILDIN(npcshopdelitem)
size--;
}
- RECREATE(nd->u.shop.shop_item, struct npc_item_list, size);
+ int alloc_size = size;
+ if (size < 0) {
+ size = 0;
+ alloc_size = 1;
+ } else if (size < 1) {
+ alloc_size = 1;
+ }
+ RECREATE(nd->u.shop.shop_item, struct npc_item_list, alloc_size);
nd->u.shop.count = size;
script_pushint(st,1);
@@ -19237,12 +19741,14 @@ static BUILDIN(pcblockmove)
static BUILDIN(setpcblock)
{
- struct map_session_data *sd = script->rid2sd(st);
+ struct map_session_data *sd = script_hasdata(st, 4) ? script->id2sd(st, script_getnum(st, 4)) : script->rid2sd(st);
enum pcblock_action_flag type = script_getnum(st, 2);
int state = (script_getnum(st, 3) > 0) ? 1 : 0;
- if (sd == NULL)
+ if (sd == NULL) {
+ script_pushint(st, 0);
return true;
+ }
if ((type & PCBLOCK_MOVE) != 0)
sd->block_action.move = state;
@@ -19271,12 +19777,13 @@ static BUILDIN(setpcblock)
if ((type & PCBLOCK_NPC) != 0)
sd->block_action.npc = state;
+ script_pushint(st, 1);
return true;
}
static BUILDIN(checkpcblock)
{
- struct map_session_data *sd = script->rid2sd(st);
+ struct map_session_data *sd = script_hasdata(st, 2) ? script->id2sd(st, script_getnum(st, 2)) : script->rid2sd(st);
int retval = PCBLOCK_NONE;
if (sd == NULL) {
@@ -19385,26 +19892,25 @@ static BUILDIN(getunittype)
/**
* Sets real-time unit data for a game object.
- * Setunitdata <GUID>,<DataType>,<Val1>{,<Val2>,<Val3>}
+ *
+ * @code{.herc}
+ * setunitdata <GUID>, <DataType>, <Val1>{, <Val2>, <Val3>}
+ * @endcode
+ *
* @param1 GUID GID of the unit.
* @param2 DataType Type of Data to be set for the unit.
* @param3 Value#1 Value to be passed as change in data.
* @param4 Value#2 Optional int value to be passed for certain data types.
* @param5 Value#3 Optional int value to be passed for certain data types.
* @return 1 on success, 0 on failure.
-
- Note: Please make this script command only modify ONE INTEGER value.
- If need to modify string type data, or having multiple arguments, please
- introduce a new script command.
- */
+ *
+ * Note: Please make this script command only modify ONE INTEGER value.
+ * If need to modify string type data, or having multiple arguments, please introduce a new script command.
+ *
+ **/
static BUILDIN(setunitdata)
{
- struct block_list *bl = NULL;
- const char *mapname = NULL, *udtype = NULL;
- int type = 0, val = 0, val2 = 0, val3 = 0;
- struct map_session_data *tsd = NULL;
-
- bl = map->id2bl(script_getnum(st, 2));
+ struct block_list *bl = map->id2bl(script_getnum(st, 2));
if (bl == NULL) {
ShowWarning("buildin_setunitdata: Error in finding object with given GID %d!\n", script_getnum(st, 2));
@@ -19412,22 +19918,26 @@ static BUILDIN(setunitdata)
return false;
}
- type = script_getnum(st, 3);
+ int type = script_getnum(st, 3);
- /* type bounds */
+ // Type bounds.
if (type < UDT_SIZE || type >= UDT_MAX) { // Note: UDT_TYPE is not valid here
ShowError("buildin_setunitdata: Invalid unit data type %d provided.\n", type);
script_pushint(st, 0);
return false;
}
- /* Mandatory Argument 3. Subject to deprecate. */
+ const char *mapname = NULL;
+ int val = 0;
+
+ // Mandatory argument #3. Subject to deprecate.
if (type == UDT_MAPIDXY) {
if (!script_isstringtype(st, 4)) {
ShowError("buildin_setunitdata: Invalid data type for argument #3.\n");
script_pushint(st, 0);
return false;
}
+
mapname = script_getstr(st, 4);
} else {
if (script_isstringtype(st, 4)) {
@@ -19435,68 +19945,87 @@ static BUILDIN(setunitdata)
script_pushint(st, 0);
return false;
}
+
val = script_getnum(st, 4);
}
-/* checks if value is out of bounds. */
+
+/****************************************************************************************************
+ * Define temporary macros. [BEGIN]
+ ****************************************************************************************************/
+
+// Checks if value is out of bounds.
#define setunitdata_check_bounds(arg, min, max) \
do { \
if (script_getnum(st, (arg)) < (min) || script_getnum(st, (arg)) > (max)) { \
- ShowError("buildin_setunitdata: Invalid value %d for argument #%d. (min: %d, max: %d)\n", script_getnum(st, (arg)), (arg)-1, (min), (max)); \
+ ShowError("buildin_setunitdata: Invalid value %d for argument #%d. (min: %d, max: %d)\n", \
+ script_getnum(st, (arg)), (arg) - 1, (min), (max)); \
script_pushint(st, 0); \
return false; \
} \
} while(0);
-/* checks if value is out of bounds. */
+
+// Checks if value is too low.
#define setunitdata_check_min(arg, min) \
do { \
if (script_getnum(st, (arg)) < (min)) { \
- ShowError("buildin_setunitdata: Invalid value %d for argument #%d. (min: %d)\n", script_getnum(st, (arg)), (arg)-1, (min)); \
+ ShowError("buildin_setunitdata: Invalid value %d for argument #%d. (min: %d)\n", \
+ script_getnum(st, (arg)), (arg) - 1, (min)); \
script_pushint(st, 0); \
return false; \
} \
} while(0);
-/* checks if the argument doesn't exist, if required.
- * also checks if the argument exists, if not required. */
+
+// Checks if the argument doesn't exist, if required. Also checks if the argument exists, if not required.
#define setunitdata_assert_arg(arg, required) \
do { \
if (required && !script_hasdata(st, (arg))) { \
- ShowError("buildin_setunitdata: Type %d reqires argument #%d.\n", type, (arg)-1); \
+ ShowError("buildin_setunitdata: Type %d reqires argument #%d.\n", type, (arg) - 1); \
script_pushint(st, 0); \
return false; \
} else if (!required && script_hasdata(st, arg)) { \
- ShowError("buildin_setunitdata: Argument %d is not required for type %d.\n", (arg)-1, type); \
+ ShowError("buildin_setunitdata: Argument %d is not required for type %d.\n", (arg) - 1, type); \
script_pushint(st, 0); \
return false; \
} \
} while (0);
-/* checks if the data is an integer. */
+
+// Checks if the data is an integer.
#define setunitdata_check_int(arg) \
do { \
setunitdata_assert_arg((arg), true); \
if (script_isstringtype(st, (arg))) { \
- ShowError("buildin_setunitdata: Argument #%d expects integer, string given.\n", (arg)-1); \
+ ShowError("buildin_setunitdata: Argument #%d expects integer, string given.\n", (arg) - 1); \
script_pushint(st, 0); \
return false; \
} \
} while(0);
-/* checks if the data is a string. */
+
+// Checks if the data is a string.
#define setunitdata_check_string(arg) \
do { \
setunitdata_assert_arg((arg), true); \
if (script_isinttype(st, (arg))) { \
- ShowError("buildin_setunitdata: Argument #%d expects string, integer given.\n", (arg)-1); \
+ ShowError("buildin_setunitdata: Argument #%d expects string, integer given.\n", (arg) - 1); \
script_pushint(st, 0); \
return false; \
} \
} while(0);
+/****************************************************************************************************
+ * Define temporary macros. [END]
+ ****************************************************************************************************/
+
if (type != UDT_MAPIDXY && type != UDT_WALKTOXY) {
setunitdata_assert_arg(5, false);
setunitdata_assert_arg(6, false);
}
- switch (type)
- {
+ int val2 = 0;
+ int val3 = 0;
+
+ struct map_session_data *tsd = NULL;
+
+ switch (type) {
case UDT_SIZE:
setunitdata_check_bounds(4, SZ_SMALL, SZ_BIG);
break;
@@ -19522,30 +20051,36 @@ static BUILDIN(setunitdata)
case UDT_MASTERAID:
setunitdata_check_min(4, 0);
tsd = map->id2sd(val);
+
if (tsd == NULL) {
- ShowWarning("buildin_setunitdata: Account ID %d not found for master change!\n",val);
+ ShowWarning("buildin_setunitdata: Account ID %d not found for master change!\n", val);
script_pushint(st, 0);
return false;
}
+
break;
case UDT_MASTERCID:
setunitdata_check_min(4, 0);
tsd = map->charid2sd(val);
+
if (tsd == NULL) {
- ShowWarning("buildin_setunitdata: Character ID %d not found for master change!\n",val);
+ ShowWarning("buildin_setunitdata: Character ID %d not found for master change!\n", val);
script_pushint(st, 0);
return false;
}
+
break;
case UDT_MAPIDXY:
- if ((val = map->mapname2mapid(mapname)) == -1) {
+ if ((val = map->mapname2mapid(mapname)) == INDEX_NOT_FOUND) {
ShowError("buildin_setunitdata: Non-existent map %s provided.\n", mapname);
+ script_pushint(st, 0);
return false;
}
+
setunitdata_check_int(5);
setunitdata_check_int(6);
- setunitdata_check_bounds(5, 0, MAX_MAP_SIZE/2);
- setunitdata_check_bounds(6, 0, MAX_MAP_SIZE/2);
+ setunitdata_check_bounds(5, 0, MAX_MAP_SIZE / 2);
+ setunitdata_check_bounds(6, 0, MAX_MAP_SIZE / 2);
val2 = script_getnum(st, 5);
val3 = script_getnum(st, 6);
break;
@@ -19553,8 +20088,8 @@ static BUILDIN(setunitdata)
setunitdata_assert_arg(6, false);
setunitdata_check_int(5);
val2 = script_getnum(st, 5);
- setunitdata_check_bounds(4, 0, MAX_MAP_SIZE/2);
- setunitdata_check_bounds(5, 0, MAX_MAP_SIZE/2);
+ setunitdata_check_bounds(4, 0, MAX_MAP_SIZE / 2);
+ setunitdata_check_bounds(5, 0, MAX_MAP_SIZE / 2);
break;
case UDT_SPEED:
setunitdata_check_bounds(4, 0, MAX_WALK_SPEED);
@@ -19609,7 +20144,7 @@ static BUILDIN(setunitdata)
setunitdata_check_bounds(4, 0, SHRT_MAX);
break;
case UDT_HUNGER:
- setunitdata_check_bounds(4, 0, 99);
+ setunitdata_check_bounds(4, PET_HUNGER_STARVING, PET_HUNGER_STUFFED); // Pets and Homunculi have the same hunger value bounds.
break;
case UDT_RACE:
case UDT_ELETYPE:
@@ -19617,19 +20152,20 @@ static BUILDIN(setunitdata)
setunitdata_check_bounds(4, 0, CHAR_MAX);
break;
case UDT_GROUP:
- {
setunitdata_check_bounds(4, 0, INT_MAX);
+
struct unit_data *ud = unit->bl2ud2(bl);
+
if (ud == NULL) {
ShowError("buildin_setunitdata: ud is NULL!\n");
script_pushint(st, 0);
return false;
}
+
ud->groupId = script_getnum(st, 4);
clif->blname_ack(0, bl); // Send update to client.
script_pushint(st, 1);
return true;
- }
case UDT_DAMAGE_TAKEN_RATE:
setunitdata_check_bounds(4, 1, INT_MAX);
break;
@@ -19637,67 +20173,81 @@ static BUILDIN(setunitdata)
break;
}
+/****************************************************************************************************
+ * Undefine temporary macros. [BEGIN]
+ ****************************************************************************************************/
+
#undef setunitdata_check_bounds
+#undef setunitdata_check_min
#undef setunitdata_assert_arg
#undef setunitdata_check_int
#undef setunitdata_check_string
- /* Set the values */
+/****************************************************************************************************
+ * Undefine temporary macros. [END]
+ ****************************************************************************************************/
+
+ // Set the values.
switch (bl->type) {
- case BL_MOB:
- {
+ case BL_MOB: {
struct mob_data *md = BL_UCAST(BL_MOB, bl);
- nullpo_retr(false, md);
- switch (type)
- {
+ if (md == NULL) {
+ ShowError("buildin_setunitdata: Can't find monster for GID %d!\n", script_getnum(st, 2));
+ script_pushint(st, 0);
+ return false;
+ }
+
+ switch (type) {
case UDT_SIZE:
- md->status.size = (unsigned char) val;
+ md->status.size = (unsigned char)val;
break;
case UDT_LEVEL:
md->level = val;
- if (battle_config.show_mob_info & 4)
+
+ if ((battle_config.show_mob_info & 4) != 0)
clif->blname_ack(0, &md->bl);
+
break;
case UDT_HP:
- status->set_hp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
+ status->set_hp(bl, (unsigned int)val, STATUS_HEAL_DEFAULT);
clif->blname_ack(0, &md->bl);
break;
case UDT_MAXHP:
- md->status.max_hp = (unsigned int) val;
+ md->status.max_hp = (unsigned int)val;
clif->blname_ack(0, &md->bl);
break;
case UDT_SP:
- status->set_sp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
+ status->set_sp(bl, (unsigned int)val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXSP:
- md->status.max_sp = (unsigned int) val;
+ md->status.max_sp = (unsigned int)val;
break;
case UDT_MASTERAID:
md->master_id = val;
break;
case UDT_MAPIDXY:
- unit->warp(bl, (short) val, (short) val2, (short) val3, CLR_TELEPORT);
+ unit->warp(bl, (short)val, (short)val2, (short)val3, CLR_TELEPORT);
break;
case UDT_WALKTOXY:
- if (!unit->walktoxy(bl, (short) val, (short) val2, 2))
- unit->movepos(bl, (short) val, (short) val2, 0, 0);
+ if (unit->walk_toxy(bl, (short)val, (short)val2, 2) != 0)
+ unit->movepos(bl, (short)val, (short)val2, 0, 0);
break;
case UDT_SPEED:
- md->status.speed = (unsigned short) val;
+ md->status.speed = (unsigned short)val;
status->calc_misc(bl, &md->status, md->level);
break;
case UDT_MODE:
- md->status.mode = (enum e_mode) val;
+ md->status.mode = (enum e_mode)val;
break;
case UDT_AI:
- md->special_state.ai = (enum ai) val;
+ md->special_state.ai = (enum ai)val;
break;
case UDT_SCOPTION:
- md->sc.option = (unsigned int) val;
+ md->sc.option = (unsigned int)val;
break;
case UDT_SEX:
- md->vd->sex = (char) val;
+ md->vd->sex = (char)val;
break;
case UDT_CLASS:
mob->class_change(md, val);
@@ -19727,118 +20277,121 @@ static BUILDIN(setunitdata)
clif->changelook(bl, LOOK_WEAPON, val);
break;
case UDT_LOOKDIR:
- unit->setdir(bl, (uint8) val);
+ unit->set_dir(bl, (enum unit_dir)val);
break;
case UDT_CANMOVETICK:
md->ud.canmove_tick = val;
break;
case UDT_STR:
- md->status.str = (unsigned short) val;
+ md->status.str = (unsigned short)val;
status->calc_misc(bl, &md->status, md->level);
break;
case UDT_AGI:
- md->status.agi = (unsigned short) val;
+ md->status.agi = (unsigned short)val;
status->calc_misc(bl, &md->status, md->level);
break;
case UDT_VIT:
- md->status.vit = (unsigned short) val;
+ md->status.vit = (unsigned short)val;
status->calc_misc(bl, &md->status, md->level);
break;
case UDT_INT:
- md->status.int_ = (unsigned short) val;
+ md->status.int_ = (unsigned short)val;
status->calc_misc(bl, &md->status, md->level);
break;
case UDT_DEX:
- md->status.dex = (unsigned short) val;
+ md->status.dex = (unsigned short)val;
status->calc_misc(bl, &md->status, md->level);
break;
case UDT_LUK:
- md->status.luk = (unsigned short) val;
+ md->status.luk = (unsigned short)val;
status->calc_misc(bl, &md->status, md->level);
break;
case UDT_ATKRANGE:
- md->status.rhw.range = (unsigned short) val;
+ md->status.rhw.range = (unsigned short)val;
break;
case UDT_ATKMIN:
- md->status.rhw.atk = (unsigned short) val;
+ md->status.rhw.atk = (unsigned short)val;
break;
case UDT_ATKMAX:
- md->status.rhw.atk2 = (unsigned short) val;
+ md->status.rhw.atk2 = (unsigned short)val;
break;
case UDT_MATKMIN:
- md->status.matk_min = (unsigned short) val;
+ md->status.matk_min = (unsigned short)val;
break;
case UDT_MATKMAX:
- md->status.matk_max = (unsigned short) val;
+ md->status.matk_max = (unsigned short)val;
break;
case UDT_DEF:
- md->status.def = (defType) val;
+ md->status.def = (defType)val;
break;
case UDT_MDEF:
- md->status.mdef = (defType) val;
+ md->status.mdef = (defType)val;
break;
case UDT_HIT:
- md->status.hit = (short) val;
+ md->status.hit = (short)val;
break;
case UDT_FLEE:
- md->status.flee = (short) val;
+ md->status.flee = (short)val;
break;
case UDT_PDODGE:
- md->status.flee2 = (short) val;
+ md->status.flee2 = (short)val;
break;
case UDT_CRIT:
- md->status.cri = (short) val;
+ md->status.cri = (short)val;
break;
case UDT_RACE:
- md->status.race = (unsigned char) val;
+ md->status.race = (unsigned char)val;
break;
case UDT_ELETYPE:
- md->status.def_ele = (unsigned char) val;
+ md->status.def_ele = (unsigned char)val;
break;
case UDT_ELELEVEL:
- md->status.ele_lv = (unsigned char) val;
+ md->status.ele_lv = (unsigned char)val;
break;
case UDT_AMOTION:
- md->status.amotion = (unsigned short) val;
+ md->status.amotion = (unsigned short)val;
break;
case UDT_ADELAY:
- md->status.adelay = (unsigned short) val;
+ md->status.adelay = (unsigned short)val;
break;
case UDT_DMOTION:
- md->status.dmotion = (unsigned short) val;
+ md->status.dmotion = (unsigned short)val;
break;
case UDT_DAMAGE_TAKEN_RATE:
- md->dmg_taken_rate = (int) val;
+ md->dmg_taken_rate = (int)val;
break;
default:
- ShowWarning("buildin_setunitdata: Invalid data type '%s' for mob unit.\n", udtype);
+ ShowWarning("buildin_setunitdata: Invalid data type '%d' for mob unit.\n", type);
script_pushint(st, 0);
return false;
}
- }
+
break;
- case BL_HOM:
- {
+ }
+ case BL_HOM: {
struct homun_data *hd = BL_UCAST(BL_HOM, bl);
- nullpo_retr(false, hd);
+ if (hd == NULL) {
+ ShowError("buildin_setunitdata: Can't find Homunculus for GID %d!\n", script_getnum(st, 2));
+ script_pushint(st, 0);
+ return false;
+ }
- switch (type)
- {
+ switch (type) {
case UDT_SIZE:
- hd->base_status.size = (unsigned char) val;
+ hd->base_status.size = (unsigned char)val;
break;
case UDT_LEVEL:
- hd->homunculus.level = (short) val;
+ hd->homunculus.level = (short)val;
break;
case UDT_HP:
- status->set_hp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
+ status->set_hp(bl, (unsigned int)val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXHP:
hd->homunculus.max_hp = val;
break;
case UDT_SP:
- status->set_sp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
+ status->set_sp(bl, (unsigned int)val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXSP:
hd->homunculus.max_sp = val;
@@ -19848,634 +20401,645 @@ static BUILDIN(setunitdata)
hd->master = tsd;
break;
case UDT_MAPIDXY:
- unit->warp(bl, (short) val, (short) val2, (short) val3, CLR_TELEPORT);
+ unit->warp(bl, (short)val, (short)val2, (short)val3, CLR_TELEPORT);
break;
case UDT_WALKTOXY:
- if (!unit->walktoxy(bl, (short) val, (short) val2, 2))
- unit->movepos(bl, (short) val, (short) val2, 0, 0);
+ if (unit->walk_toxy(bl, (short)val, (short)val2, 2) != 0)
+ unit->movepos(bl, (short)val, (short)val2, 0, 0);
break;
case UDT_SPEED:
- hd->base_status.speed = (unsigned short) val;
+ hd->base_status.speed = (unsigned short)val;
status->calc_misc(bl, &hd->base_status, hd->homunculus.level);
break;
case UDT_LOOKDIR:
- unit->setdir(bl, (unsigned char) val);
+ unit->set_dir(bl, (enum unit_dir)val);
break;
case UDT_CANMOVETICK:
hd->ud.canmove_tick = val;
break;
case UDT_STR:
- hd->base_status.str = (unsigned short) val;
+ hd->base_status.str = (unsigned short)val;
status->calc_misc(bl, &hd->base_status, hd->homunculus.level);
break;
case UDT_AGI:
- hd->base_status.agi = (unsigned short) val;
+ hd->base_status.agi = (unsigned short)val;
status->calc_misc(bl, &hd->base_status, hd->homunculus.level);
break;
case UDT_VIT:
- hd->base_status.vit = (unsigned short) val;
+ hd->base_status.vit = (unsigned short)val;
status->calc_misc(bl, &hd->base_status, hd->homunculus.level);
break;
case UDT_INT:
- hd->base_status.int_ = (unsigned short) val;
+ hd->base_status.int_ = (unsigned short)val;
status->calc_misc(bl, &hd->base_status, hd->homunculus.level);
break;
case UDT_DEX:
- hd->base_status.dex = (unsigned short) val;
+ hd->base_status.dex = (unsigned short)val;
status->calc_misc(bl, &hd->base_status, hd->homunculus.level);
break;
case UDT_LUK:
- hd->base_status.luk = (unsigned short) val;
+ hd->base_status.luk = (unsigned short)val;
status->calc_misc(bl, &hd->base_status, hd->homunculus.level);
break;
case UDT_ATKRANGE:
- hd->base_status.rhw.range = (unsigned short) val;
+ hd->base_status.rhw.range = (unsigned short)val;
break;
case UDT_ATKMIN:
- hd->base_status.rhw.atk = (unsigned short) val;
+ hd->base_status.rhw.atk = (unsigned short)val;
break;
case UDT_ATKMAX:
- hd->base_status.rhw.atk2 = (unsigned short) val;
+ hd->base_status.rhw.atk2 = (unsigned short)val;
break;
case UDT_MATKMIN:
- hd->base_status.matk_min = (unsigned short) val;
+ hd->base_status.matk_min = (unsigned short)val;
break;
case UDT_MATKMAX:
- hd->base_status.matk_max = (unsigned short) val;
+ hd->base_status.matk_max = (unsigned short)val;
break;
case UDT_DEF:
- hd->base_status.def = (defType) val;
+ hd->base_status.def = (defType)val;
break;
case UDT_MDEF:
- hd->base_status.mdef = (defType) val;
+ hd->base_status.mdef = (defType)val;
break;
case UDT_HIT:
- hd->base_status.hit = (short) val;
+ hd->base_status.hit = (short)val;
break;
case UDT_FLEE:
- hd->base_status.flee = (short) val;
+ hd->base_status.flee = (short)val;
break;
case UDT_PDODGE:
- hd->base_status.flee2 = (short) val;
+ hd->base_status.flee2 = (short)val;
break;
case UDT_CRIT:
- hd->base_status.cri = (short) val;
+ hd->base_status.cri = (short)val;
break;
case UDT_RACE:
- hd->base_status.race = (unsigned char) val;
+ hd->base_status.race = (unsigned char)val;
break;
case UDT_ELETYPE:
- hd->base_status.def_ele = (unsigned char) val;
+ hd->base_status.def_ele = (unsigned char)val;
break;
case UDT_ELELEVEL:
- hd->base_status.ele_lv = (unsigned char) val;
+ hd->base_status.ele_lv = (unsigned char)val;
break;
case UDT_AMOTION:
- hd->base_status.amotion = (unsigned short) val;
+ hd->base_status.amotion = (unsigned short)val;
break;
case UDT_ADELAY:
- hd->base_status.adelay = (unsigned short) val;
+ hd->base_status.adelay = (unsigned short)val;
break;
case UDT_DMOTION:
- hd->base_status.dmotion = (unsigned short) val;
+ hd->base_status.dmotion = (unsigned short)val;
break;
case UDT_HUNGER:
- hd->homunculus.hunger = (short) val;
+ hd->homunculus.hunger = (short)val;
clif->send_homdata(hd->master, SP_HUNGRY, hd->homunculus.hunger);
break;
case UDT_INTIMACY:
- homun->add_intimacy(hd, (unsigned int) val);
+ homun->add_intimacy(hd, (unsigned int)val);
clif->send_homdata(hd->master, SP_INTIMATE, hd->homunculus.intimacy / 100);
break;
default:
- ShowWarning("buildin_setunitdata: Invalid data type '%s' for homunculus unit.\n", udtype);
+ ShowWarning("buildin_setunitdata: Invalid data type '%d' for homunculus unit.\n", type);
script_pushint(st, 0);
return false;
}
- clif->send_homdata(hd->master, SP_ACK, 0); // send homun data
- }
+ clif->send_homdata(hd->master, SP_ACK, 0); // Send Homunculus data.
break;
- case BL_PET:
- {
+ }
+ case BL_PET: {
struct pet_data *pd = BL_UCAST(BL_PET, bl);
- nullpo_retr(false, pd);
+ if (pd == NULL) {
+ ShowError("buildin_setunitdata: Can't find pet for GID %d!\n", script_getnum(st, 2));
+ script_pushint(st, 0);
+ return false;
+ }
- switch (type)
- {
+ switch (type) {
case UDT_SIZE:
- pd->status.size = (unsigned char) val;
+ pd->status.size = (unsigned char)val;
break;
case UDT_LEVEL:
- pd->pet.level = (short) val;
+ pd->pet.level = (short)val;
+ if (pd->msd != NULL)
+ clif->send_petstatus(pd->msd); // Send pet data.
break;
case UDT_HP:
- status->set_hp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
+ status->set_hp(bl, (unsigned int)val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXHP:
- pd->status.max_hp = (unsigned int) val;
+ pd->status.max_hp = (unsigned int)val;
break;
case UDT_SP:
- status->set_sp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
+ status->set_sp(bl, (unsigned int)val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXSP:
- pd->status.max_sp = (unsigned int) val;
+ pd->status.max_sp = (unsigned int)val;
break;
case UDT_MASTERAID:
pd->pet.account_id = val;
pd->msd = tsd;
break;
case UDT_MAPIDXY:
- unit->warp(bl, (short) val, (short) val2, (short) val3, CLR_TELEPORT);
+ unit->warp(bl, (short)val, (short)val2, (short)val3, CLR_TELEPORT);
break;
case UDT_WALKTOXY:
- if (!unit->walktoxy(bl, (short) val, (short) val2, 2))
- unit->movepos(bl, (short) val, (short) val2, 0, 0);
+ if (unit->walk_toxy(bl, (short)val, (short)val2, 2) != 0)
+ unit->movepos(bl, (short)val, (short)val2, 0, 0);
break;
case UDT_SPEED:
- pd->status.speed = (unsigned short) val;
+ pd->status.speed = (unsigned short)val;
status->calc_misc(bl, &pd->status, pd->pet.level);
break;
case UDT_LOOKDIR:
- unit->setdir(bl, (unsigned char) val);
+ unit->set_dir(bl, (enum unit_dir)val);
break;
case UDT_CANMOVETICK:
pd->ud.canmove_tick = val;
break;
case UDT_STR:
- pd->status.str = (unsigned short) val;
+ pd->status.str = (unsigned short)val;
status->calc_misc(bl, &pd->status, pd->pet.level);
break;
case UDT_AGI:
- pd->status.agi = (unsigned short) val;
+ pd->status.agi = (unsigned short)val;
status->calc_misc(bl, &pd->status, pd->pet.level);
break;
case UDT_VIT:
- pd->status.vit = (unsigned short) val;
+ pd->status.vit = (unsigned short)val;
status->calc_misc(bl, &pd->status, pd->pet.level);
break;
case UDT_INT:
- pd->status.int_ = (unsigned short) val;
+ pd->status.int_ = (unsigned short)val;
status->calc_misc(bl, &pd->status, pd->pet.level);
break;
case UDT_DEX:
- pd->status.dex = (unsigned short) val;
+ pd->status.dex = (unsigned short)val;
status->calc_misc(bl, &pd->status, pd->pet.level);
break;
case UDT_LUK:
- pd->status.luk = (unsigned short) val;
+ pd->status.luk = (unsigned short)val;
status->calc_misc(bl, &pd->status, pd->pet.level);
break;
case UDT_ATKRANGE:
- pd->status.rhw.range = (unsigned short) val;
+ pd->status.rhw.range = (unsigned short)val;
break;
case UDT_ATKMIN:
- pd->status.rhw.atk = (unsigned short) val;
+ pd->status.rhw.atk = (unsigned short)val;
break;
case UDT_ATKMAX:
- pd->status.rhw.atk2 = (unsigned short) val;
+ pd->status.rhw.atk2 = (unsigned short)val;
break;
case UDT_MATKMIN:
- pd->status.matk_min = (unsigned short) val;
+ pd->status.matk_min = (unsigned short)val;
break;
case UDT_MATKMAX:
- pd->status.matk_max = (unsigned short) val;
+ pd->status.matk_max = (unsigned short)val;
break;
case UDT_DEF:
- pd->status.def = (defType) val;
+ pd->status.def = (defType)val;
break;
case UDT_MDEF:
- pd->status.mdef = (defType) val;
+ pd->status.mdef = (defType)val;
break;
case UDT_HIT:
- pd->status.hit = (short) val;
+ pd->status.hit = (short)val;
break;
case UDT_FLEE:
- pd->status.flee = (short) val;
+ pd->status.flee = (short)val;
break;
case UDT_PDODGE:
- pd->status.flee2 = (short) val;
+ pd->status.flee2 = (short)val;
break;
case UDT_CRIT:
- pd->status.cri = (short) val;
+ pd->status.cri = (short)val;
break;
case UDT_RACE:
- pd->status.race = (unsigned char) val;
+ pd->status.race = (unsigned char)val;
break;
case UDT_ELETYPE:
- pd->status.def_ele = (unsigned char) val;
+ pd->status.def_ele = (unsigned char)val;
break;
case UDT_ELELEVEL:
- pd->status.ele_lv = (unsigned char) val;
+ pd->status.ele_lv = (unsigned char)val;
break;
case UDT_AMOTION:
- pd->status.amotion = (unsigned short) val;
+ pd->status.amotion = (unsigned short)val;
break;
case UDT_ADELAY:
- pd->status.adelay = (unsigned short) val;
+ pd->status.adelay = (unsigned short)val;
break;
case UDT_DMOTION:
- pd->status.dmotion = (unsigned short) val;
+ pd->status.dmotion = (unsigned short)val;
break;
case UDT_INTIMACY:
pet->set_intimate(pd, val);
- clif->send_petdata(pd->msd, pd, 1, pd->pet.intimate);
break;
case UDT_HUNGER:
- pd->pet.hungry = (short) val;
+ pet->set_hunger(pd, val);
break;
default:
- ShowWarning("buildin_setunitdata: Invalid data type '%s' for pet unit.\n", udtype);
+ ShowWarning("buildin_setunitdata: Invalid data type '%d' for pet unit.\n", type);
script_pushint(st, 0);
return false;
}
- clif->send_petstatus(pd->msd); // send pet data
- }
+
break;
- case BL_MER:
- {
+ }
+ case BL_MER: {
struct mercenary_data *mc = BL_UCAST(BL_MER, bl);
- nullpo_retr(false, mc);
+ if (mc == NULL) {
+ ShowError("buildin_setunitdata: Can't find mercenary for GID %d!\n", script_getnum(st, 2));
+ script_pushint(st, 0);
+ return false;
+ }
- switch (type)
- {
+ switch (type) {
case UDT_SIZE:
- mc->base_status.size = (unsigned char) val;
+ mc->base_status.size = (unsigned char)val;
break;
case UDT_HP:
- status->set_hp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
+ status->set_hp(bl, (unsigned int)val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXHP:
- mc->base_status.max_hp = (unsigned int) val;
+ mc->base_status.max_hp = (unsigned int)val;
break;
case UDT_SP:
- status->set_sp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
+ status->set_sp(bl, (unsigned int)val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXSP:
- mc->base_status.max_sp = (unsigned int) val;
+ mc->base_status.max_sp = (unsigned int)val;
break;
case UDT_MASTERCID:
mc->mercenary.char_id = val;
break;
case UDT_MAPIDXY:
- unit->warp(bl, (short) val, (short) val2, (short) val3, CLR_TELEPORT);
+ unit->warp(bl, (short)val, (short)val2, (short)val3, CLR_TELEPORT);
break;
case UDT_WALKTOXY:
- if (!unit->walktoxy(bl, (short) val, (short) val2, 2))
- unit->movepos(bl, (short) val, (short) val2, 0, 0);
+ if (unit->walk_toxy(bl, (short)val, (short)val2, 2) != 0)
+ unit->movepos(bl, (short)val, (short)val2, 0, 0);
break;
case UDT_SPEED:
- mc->base_status.size = (unsigned char) val;
+ mc->base_status.size = (unsigned char)val;
status->calc_misc(bl, &mc->base_status, mc->db->lv);
break;
case UDT_LOOKDIR:
- unit->setdir(bl, (unsigned char) val);
+ unit->set_dir(bl, (enum unit_dir)val);
break;
case UDT_CANMOVETICK:
mc->ud.canmove_tick = val;
break;
case UDT_STR:
- mc->base_status.str = (unsigned short) val;
+ mc->base_status.str = (unsigned short)val;
status->calc_misc(bl, &mc->base_status, mc->db->lv);
break;
case UDT_AGI:
- mc->base_status.agi = (unsigned short) val;
+ mc->base_status.agi = (unsigned short)val;
status->calc_misc(bl, &mc->base_status, mc->db->lv);
break;
case UDT_VIT:
- mc->base_status.vit = (unsigned short) val;
+ mc->base_status.vit = (unsigned short)val;
status->calc_misc(bl, &mc->base_status, mc->db->lv);
break;
case UDT_INT:
- mc->base_status.int_ = (unsigned short) val;
+ mc->base_status.int_ = (unsigned short)val;
status->calc_misc(bl, &mc->base_status, mc->db->lv);
break;
case UDT_DEX:
- mc->base_status.dex = (unsigned short) val;
+ mc->base_status.dex = (unsigned short)val;
status->calc_misc(bl, &mc->base_status, mc->db->lv);
break;
case UDT_LUK:
- mc->base_status.luk = (unsigned short) val;
+ mc->base_status.luk = (unsigned short)val;
status->calc_misc(bl, &mc->base_status, mc->db->lv);
break;
case UDT_ATKRANGE:
- mc->base_status.rhw.range = (unsigned short) val;
+ mc->base_status.rhw.range = (unsigned short)val;
break;
case UDT_ATKMIN:
- mc->base_status.rhw.atk = (unsigned short) val;
+ mc->base_status.rhw.atk = (unsigned short)val;
break;
case UDT_ATKMAX:
- mc->base_status.rhw.atk2 = (unsigned short) val;
+ mc->base_status.rhw.atk2 = (unsigned short)val;
break;
case UDT_MATKMIN:
- mc->base_status.matk_min = (unsigned short) val;
+ mc->base_status.matk_min = (unsigned short)val;
break;
case UDT_MATKMAX:
- mc->base_status.matk_max = (unsigned short) val;
+ mc->base_status.matk_max = (unsigned short)val;
break;
case UDT_DEF:
- mc->base_status.def = (defType) val;
+ mc->base_status.def = (defType)val;
break;
case UDT_MDEF:
- mc->base_status.mdef = (defType) val;
+ mc->base_status.mdef = (defType)val;
break;
case UDT_HIT:
- mc->base_status.hit = (short) val;
+ mc->base_status.hit = (short)val;
break;
case UDT_FLEE:
- mc->base_status.flee = (short) val;
+ mc->base_status.flee = (short)val;
break;
case UDT_PDODGE:
- mc->base_status.flee2 = (short) val;
+ mc->base_status.flee2 = (short)val;
break;
case UDT_CRIT:
- mc->base_status.cri = (short) val;
+ mc->base_status.cri = (short)val;
break;
case UDT_RACE:
- mc->base_status.race = (unsigned char) val;
+ mc->base_status.race = (unsigned char)val;
break;
case UDT_ELETYPE:
- mc->base_status.def_ele = (unsigned char) val;
+ mc->base_status.def_ele = (unsigned char)val;
break;
case UDT_ELELEVEL:
- mc->base_status.ele_lv = (unsigned char) val;
+ mc->base_status.ele_lv = (unsigned char)val;
break;
case UDT_AMOTION:
- mc->base_status.amotion = (unsigned short) val;
+ mc->base_status.amotion = (unsigned short)val;
break;
case UDT_ADELAY:
- mc->base_status.adelay = (unsigned short) val;
+ mc->base_status.adelay = (unsigned short)val;
break;
case UDT_DMOTION:
- mc->base_status.dmotion = (unsigned short) val;
+ mc->base_status.dmotion = (unsigned short)val;
break;
case UDT_MERC_KILLCOUNT:
- mc->mercenary.kill_count = (unsigned int) val;
+ mc->mercenary.kill_count = (unsigned int)val;
break;
case UDT_LIFETIME:
- mc->mercenary.life_time = (unsigned int) val;
+ mc->mercenary.life_time = (unsigned int)val;
break;
default:
- ShowWarning("buildin_setunitdata: Invalid data type '%s' for mercenary unit.\n", udtype);
+ ShowWarning("buildin_setunitdata: Invalid data type '%d' for mercenary unit.\n", type);
script_pushint(st, 0);
return false;
}
+ // Send mercenary data.
clif->mercenary_info(map->charid2sd(mc->mercenary.char_id));
clif->mercenary_skillblock(map->charid2sd(mc->mercenary.char_id));
- }
break;
- case BL_ELEM:
- {
+ }
+ case BL_ELEM: {
struct elemental_data *ed = BL_UCAST(BL_ELEM, bl);
- nullpo_retr(false, ed);
+ if (ed == NULL) {
+ ShowError("buildin_setunitdata: Can't find Elemental for GID %d!\n", script_getnum(st, 2));
+ script_pushint(st, 0);
+ return false;
+ }
- switch (type)
- {
+ switch (type) {
case UDT_SIZE:
- ed->base_status.size = (unsigned char) val;
+ ed->base_status.size = (unsigned char)val;
break;
case UDT_HP:
- status->set_hp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
+ status->set_hp(bl, (unsigned int)val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXHP:
- ed->base_status.max_hp = (unsigned int) val;
+ ed->base_status.max_hp = (unsigned int)val;
break;
case UDT_SP:
- status->set_sp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
+ status->set_sp(bl, (unsigned int)val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXSP:
- ed->base_status.max_sp = (unsigned int) val;
+ ed->base_status.max_sp = (unsigned int)val;
break;
case UDT_MASTERCID:
ed->elemental.char_id = val;
break;
case UDT_MAPIDXY:
- unit->warp(bl, (short) val, (short) val2, (short) val3, CLR_TELEPORT);
+ unit->warp(bl, (short)val, (short)val2, (short)val3, CLR_TELEPORT);
break;
case UDT_WALKTOXY:
- if (!unit->walktoxy(bl, (short) val, (short) val2, 2))
- unit->movepos(bl, (short) val, (short) val2, 0, 0);
+ if (unit->walk_toxy(bl, (short)val, (short)val2, 2) != 0)
+ unit->movepos(bl, (short)val, (short)val2, 0, 0);
break;
case UDT_SPEED:
- ed->base_status.speed = (unsigned short) val;
+ ed->base_status.speed = (unsigned short)val;
status->calc_misc(bl, &ed->base_status, ed->db->lv);
break;
case UDT_LOOKDIR:
- unit->setdir(bl, (unsigned char) val);
+ unit->set_dir(bl, (enum unit_dir)val);
break;
case UDT_CANMOVETICK:
ed->ud.canmove_tick = val;
break;
case UDT_STR:
- ed->base_status.str = (unsigned short) val;
+ ed->base_status.str = (unsigned short)val;
status->calc_misc(bl, &ed->base_status, ed->db->lv);
break;
case UDT_AGI:
- ed->base_status.agi = (unsigned short) val;
+ ed->base_status.agi = (unsigned short)val;
status->calc_misc(bl, &ed->base_status, ed->db->lv);
break;
case UDT_VIT:
- ed->base_status.vit = (unsigned short) val;
+ ed->base_status.vit = (unsigned short)val;
status->calc_misc(bl, &ed->base_status, ed->db->lv);
break;
case UDT_INT:
- ed->base_status.int_ = (unsigned short) val;
+ ed->base_status.int_ = (unsigned short)val;
status->calc_misc(bl, &ed->base_status, ed->db->lv);
break;
case UDT_DEX:
- ed->base_status.dex = (unsigned short) val;
+ ed->base_status.dex = (unsigned short)val;
status->calc_misc(bl, &ed->base_status, ed->db->lv);
break;
case UDT_LUK:
- ed->base_status.luk = (unsigned short) val;
+ ed->base_status.luk = (unsigned short)val;
status->calc_misc(bl, &ed->base_status, ed->db->lv);
break;
case UDT_ATKRANGE:
- ed->base_status.rhw.range = (unsigned short) val;
+ ed->base_status.rhw.range = (unsigned short)val;
break;
case UDT_ATKMIN:
- ed->base_status.rhw.atk = (unsigned short) val;
+ ed->base_status.rhw.atk = (unsigned short)val;
break;
case UDT_ATKMAX:
- ed->base_status.rhw.atk2 = (unsigned short) val;
+ ed->base_status.rhw.atk2 = (unsigned short)val;
break;
case UDT_MATKMIN:
- ed->base_status.matk_min = (unsigned short) val;
+ ed->base_status.matk_min = (unsigned short)val;
break;
case UDT_MATKMAX:
- ed->base_status.matk_max = (unsigned short) val;
+ ed->base_status.matk_max = (unsigned short)val;
break;
case UDT_DEF:
- ed->base_status.def = (defType) val;
+ ed->base_status.def = (defType)val;
break;
case UDT_MDEF:
- ed->base_status.mdef = (defType) val;
+ ed->base_status.mdef = (defType)val;
break;
case UDT_HIT:
- ed->base_status.hit = (short) val;
+ ed->base_status.hit = (short)val;
break;
case UDT_FLEE:
- ed->base_status.flee = (short) val;
+ ed->base_status.flee = (short)val;
break;
case UDT_PDODGE:
- ed->base_status.flee2 = (short) val;
+ ed->base_status.flee2 = (short)val;
break;
case UDT_CRIT:
- ed->base_status.cri = (short) val;
+ ed->base_status.cri = (short)val;
break;
case UDT_RACE:
- ed->base_status.race = (unsigned char) val;
+ ed->base_status.race = (unsigned char)val;
break;
case UDT_ELETYPE:
- ed->base_status.def_ele = (unsigned char) val;
+ ed->base_status.def_ele = (unsigned char)val;
break;
case UDT_ELELEVEL:
- ed->base_status.ele_lv = (unsigned char) val;
+ ed->base_status.ele_lv = (unsigned char)val;
break;
case UDT_AMOTION:
- ed->base_status.amotion = (unsigned short) val;
+ ed->base_status.amotion = (unsigned short)val;
break;
case UDT_ADELAY:
- ed->base_status.adelay = (unsigned short) val;
+ ed->base_status.adelay = (unsigned short)val;
break;
case UDT_DMOTION:
- ed->base_status.dmotion = (unsigned short) val;
+ ed->base_status.dmotion = (unsigned short)val;
break;
case UDT_LIFETIME:
ed->elemental.life_time = val;
break;
default:
- ShowWarning("buildin_setunitdata: Invalid data type '%s' for elemental unit.\n", udtype);
+ ShowWarning("buildin_setunitdata: Invalid data type '%d' for elemental unit.\n", type);
script_pushint(st, 0);
return false;
}
- clif->elemental_info(ed->master);
- }
+
+ clif->elemental_info(ed->master); // Send Elemental data.
break;
- case BL_NPC:
- {
+ }
+ case BL_NPC: {
struct npc_data *nd = BL_UCAST(BL_NPC, bl);
- nullpo_retr(false, nd);
+ if (nd == NULL) {
+ ShowError("buildin_setunitdata: Can't find NPC for GID %d!\n", script_getnum(st, 2));
+ script_pushint(st, 0);
+ return false;
+ }
- switch (type)
- {
+ switch (type) {
case UDT_SIZE:
- nd->status.size = (unsigned char) val;
+ nd->status.size = (unsigned char)val;
break;
case UDT_LEVEL:
- nd->level = (unsigned short) val;
+ nd->level = (unsigned short)val;
break;
case UDT_HP:
- status->set_hp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
+ status->set_hp(bl, (unsigned int)val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXHP:
- nd->status.max_hp = (unsigned int) val;
+ nd->status.max_hp = (unsigned int)val;
break;
case UDT_SP:
- status->set_sp(bl, (unsigned int) val, STATUS_HEAL_DEFAULT);
+ status->set_sp(bl, (unsigned int)val, STATUS_HEAL_DEFAULT);
break;
case UDT_MAXSP:
- nd->status.max_sp = (unsigned int) val;
+ nd->status.max_sp = (unsigned int)val;
break;
case UDT_MAPIDXY:
- unit->warp(bl, (short) val, (short) val2, (short) val3, CLR_TELEPORT);
+ unit->warp(bl, (short)val, (short)val2, (short)val3, CLR_TELEPORT);
break;
case UDT_WALKTOXY:
- if (!unit->walktoxy(bl, (short) val, (short) val2, 2))
- unit->movepos(bl, (short) val, (short) val2, 0, 0);
+ if (unit->walk_toxy(bl, (short)val, (short)val2, 2) != 0)
+ unit->movepos(bl, (short)val, (short)val2, 0, 0);
break;
case UDT_CLASS:
- npc->setclass(nd, (short) val);
+ npc->setclass(nd, (short)val);
break;
case UDT_SPEED:
- nd->speed = (short) val;
+ nd->speed = (short)val;
status->calc_misc(bl, &nd->status, nd->level);
break;
case UDT_LOOKDIR:
- unit->setdir(bl, (unsigned char) val);
+ unit->set_dir(bl, (enum unit_dir)val);
break;
case UDT_STR:
- nd->status.str = (unsigned short) val;
+ nd->status.str = (unsigned short)val;
status->calc_misc(bl, &nd->status, nd->level);
break;
case UDT_AGI:
- nd->status.agi = (unsigned short) val;
+ nd->status.agi = (unsigned short)val;
status->calc_misc(bl, &nd->status, nd->level);
break;
case UDT_VIT:
- nd->status.vit = (unsigned short) val;
+ nd->status.vit = (unsigned short)val;
status->calc_misc(bl, &nd->status, nd->level);
break;
case UDT_INT:
- nd->status.int_ = (unsigned short) val;
+ nd->status.int_ = (unsigned short)val;
status->calc_misc(bl, &nd->status, nd->level);
break;
case UDT_DEX:
- nd->status.dex = (unsigned short) val;
+ nd->status.dex = (unsigned short)val;
status->calc_misc(bl, &nd->status, nd->level);
break;
case UDT_LUK:
- nd->status.luk = (unsigned short) val;
+ nd->status.luk = (unsigned short)val;
status->calc_misc(bl, &nd->status, nd->level);
break;
case UDT_STATPOINT:
- nd->stat_point = (unsigned short) val;
+ nd->stat_point = (unsigned short)val;
break;
case UDT_ATKRANGE:
- nd->status.rhw.range = (unsigned short) val;
+ nd->status.rhw.range = (unsigned short)val;
break;
case UDT_ATKMIN:
- nd->status.rhw.atk = (unsigned short) val;
+ nd->status.rhw.atk = (unsigned short)val;
break;
case UDT_ATKMAX:
- nd->status.rhw.atk2 = (unsigned short) val;
+ nd->status.rhw.atk2 = (unsigned short)val;
break;
case UDT_MATKMIN:
- nd->status.matk_min = (unsigned short) val;
+ nd->status.matk_min = (unsigned short)val;
break;
case UDT_MATKMAX:
- nd->status.matk_max = (unsigned short) val;
+ nd->status.matk_max = (unsigned short)val;
break;
case UDT_DEF:
- nd->status.def = (defType) val;
+ nd->status.def = (defType)val;
break;
case UDT_MDEF:
- nd->status.mdef = (defType) val;
+ nd->status.mdef = (defType)val;
break;
case UDT_HIT:
- nd->status.hit = (short) val;
+ nd->status.hit = (short)val;
break;
case UDT_FLEE:
- nd->status.flee = (short) val;
+ nd->status.flee = (short)val;
break;
case UDT_PDODGE:
- nd->status.flee2 = (short) val;
+ nd->status.flee2 = (short)val;
break;
case UDT_CRIT:
- nd->status.cri = (short) val;
+ nd->status.cri = (short)val;
break;
case UDT_RACE:
- nd->status.race = (unsigned char) val;
+ nd->status.race = (unsigned char)val;
break;
case UDT_ELETYPE:
- nd->status.def_ele = (unsigned char) val;
+ nd->status.def_ele = (unsigned char)val;
break;
case UDT_ELELEVEL:
- nd->status.ele_lv = (unsigned char) val;
+ nd->status.ele_lv = (unsigned char)val;
break;
case UDT_AMOTION:
- nd->status.amotion = (unsigned short) val;
+ nd->status.amotion = (unsigned short)val;
break;
case UDT_ADELAY:
- nd->status.adelay = (unsigned short) val;
+ nd->status.adelay = (unsigned short)val;
break;
case UDT_DMOTION:
- nd->status.dmotion = (unsigned short) val;
+ nd->status.dmotion = (unsigned short)val;
break;
case UDT_SEX:
nd->vd.sex = (char)val;
@@ -20512,19 +21076,21 @@ static BUILDIN(setunitdata)
clif->changelook(bl, LOOK_BODY2, val);
break;
default:
- ShowWarning("buildin_setunitdata: Invalid data type '%s' for NPC unit.\n", udtype);
+ ShowWarning("buildin_setunitdata: Invalid data type '%d' for NPC unit.\n", type);
script_pushint(st, 0);
return false;
}
- }
+
break;
+ }
default:
ShowError("buildin_setunitdata: Unknown object!\n");
script_pushint(st, 0);
return false;
- } // end of bl->type switch
+ } // End of bl->type switch.
script_pushint(st, 1);
+
return true;
}
@@ -21121,7 +21687,10 @@ static BUILDIN(unitwalk)
if (script_hasdata(st, 4)) {
int x = script_getnum(st, 3);
int y = script_getnum(st, 4);
- script_pushint(st, unit->walktoxy(bl, x, y, 0));// We'll use harder calculations.
+ if (unit->walk_toxy(bl, x, y, 0) == 0) // We'll use harder calculations.
+ script_pushint(st, 1);
+ else
+ script_pushint(st, 0);
}
else {
int target_id = script_getnum(st, 3);
@@ -21131,6 +21700,38 @@ static BUILDIN(unitwalk)
return true;
}
+/**
+ * Checks if a unit is walking.
+ *
+ * Returns 1 if unit is walking, 0 if unit is not walking and -1 on error.
+ *
+ * @code{.herc}
+ * unitiswalking({<GID>});
+ * @endcode
+ *
+ **/
+static BUILDIN(unitiswalking)
+{
+ int gid = script_hasdata(st, 2) ? script_getnum(st, 2) : st->rid;
+ struct block_list *bl = map->id2bl(gid);
+
+ if (bl == NULL) {
+ ShowWarning("buildin_unitiswalking: Error in finding object for GID %d!\n", gid);
+ script_pushint(st, -1);
+ return false;
+ }
+
+ if (unit->bl2ud(bl) == NULL) {
+ ShowWarning("buildin_unitiswalking: Error in finding unit_data for GID %d!\n", gid);
+ script_pushint(st, -1);
+ return false;
+ }
+
+ script_pushint(st, unit->is_walking(bl));
+
+ return true;
+}
+
/// Kills the unit
///
/// unitkill <unit_id>;
@@ -21364,7 +21965,10 @@ static BUILDIN(unitskilluseid)
} else {
status_calc_npc(nd, SCO_NONE);
}
+ } else if (bl->type == BL_PC) {
+ pc->autocast_clear(BL_UCAST(BL_PC, bl));
}
+
unit->skilluse_id(bl, target_id, skill_id, skill_lv);
}
@@ -21400,7 +22004,10 @@ static BUILDIN(unitskillusepos)
} else {
status_calc_npc(nd, SCO_NONE);
}
+ } else if (bl->type == BL_PC) {
+ pc->autocast_clear(BL_UCAST(BL_PC, bl));
}
+
unit->skilluse_pos(bl, skill_x, skill_y, skill_id, skill_lv);
}
@@ -21956,12 +22563,13 @@ static BUILDIN(setquestinfo)
return false;
}
- qi = &VECTOR_LAST(nd->qi_data);
- if (qi == NULL) {
+ if (VECTOR_LENGTH(nd->qi_data) == 0) {
ShowWarning("buildin_setquestinfo: no valide questinfo data has been found for this npc.\n");
return false;
}
+ qi = &VECTOR_LAST(nd->qi_data);
+
switch (type) {
case QINFO_JOB:
{
@@ -23250,7 +23858,6 @@ static BUILDIN(progressbar_unit)
}
static BUILDIN(pushpc)
{
- uint8 dir;
int cells, dx, dy;
struct map_session_data* sd;
@@ -23259,14 +23866,14 @@ static BUILDIN(pushpc)
return true;
}
- dir = script_getnum(st,2);
- cells = script_getnum(st,3);
+ enum unit_dir dir = script_getnum(st, 2);
+ cells = script_getnum(st,3);
- if (dir > 7) {
+ if (dir >= UNIT_DIR_MAX) {
ShowWarning("buildin_pushpc: Invalid direction %d specified.\n", dir);
script->reportsrc(st);
- dir%= 8; // trim spin-over
+ dir %= UNIT_DIR_MAX; // trim spin-over
}
if(!cells)
@@ -23275,10 +23882,11 @@ static BUILDIN(pushpc)
}
else if(cells<0)
{// pushing backwards
- dir = (dir+4)%8; // turn around
- cells = -cells;
+ dir = unit_get_opposite_dir(dir);
+ cells = -cells;
}
+ Assert_retr(false, dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX);
dx = dirx[dir];
dy = diry[dir];
@@ -26688,8 +27296,8 @@ static void script_parse_builtin(void)
BUILDIN_DEF(delitem,"vi?"),
BUILDIN_DEF(delitem2,"viiiiiiii?"),
BUILDIN_DEF(delitemidx, "i??"),
- BUILDIN_DEF2(enableitemuse,"enable_items",""),
- BUILDIN_DEF2(disableitemuse,"disable_items",""),
+ BUILDIN_DEF2(enableitemuse, "enable_items", "?"),
+ BUILDIN_DEF2(disableitemuse, "disable_items", "?"),
BUILDIN_DEF(cutin,"si"),
BUILDIN_DEF(viewpoint,"iiiii"),
BUILDIN_DEF(heal,"ii"),
@@ -26794,6 +27402,7 @@ static void script_parse_builtin(void)
BUILDIN_DEF(detachnpctimer,"?"), // detached the player id from the npc timer [Celest]
BUILDIN_DEF(playerattached,""), // returns id of the current attached player. [Skotlex]
BUILDIN_DEF(mobattached, ""),
+ BUILDIN_DEF(loudhailer, "s?"),
BUILDIN_DEF(announce,"si?????"),
BUILDIN_DEF(mapannounce,"ssi?????"),
BUILDIN_DEF(areaannounce,"siiiisi?????"),
@@ -26970,7 +27579,7 @@ static void script_parse_builtin(void)
BUILDIN_DEF(setnpcdisplay,"sv??"),
BUILDIN_DEF(compare,"ss"), // Lordalfa - To bring strstr to scripting Engine.
BUILDIN_DEF(strcmp,"ss"),
- BUILDIN_DEF(getiteminfo,"ii"), //[Lupus] returns Items Buy / sell Price, etc info
+ BUILDIN_DEF(getiteminfo,"vi"), //[Lupus] returns Items Buy / sell Price, etc info
BUILDIN_DEF(setiteminfo,"iii"), //[Lupus] set Items Buy / sell Price, etc info
BUILDIN_DEF(getequipcardid,"ii"), //[Lupus] returns CARD ID or other info from CARD slot N of equipped item
BUILDIN_DEF(getequippedoptioninfo, "i"),
@@ -27020,8 +27629,8 @@ static void script_parse_builtin(void)
BUILDIN_DEF(pcfollow,"ii"),
BUILDIN_DEF(pcstopfollow,"i"),
BUILDIN_DEF_DEPRECATED(pcblockmove,"ii"), // Deprecated 2018-05-04
- BUILDIN_DEF(setpcblock, "ii"),
- BUILDIN_DEF(checkpcblock, ""),
+ BUILDIN_DEF(setpcblock, "ii?"),
+ BUILDIN_DEF(checkpcblock, "?"),
// <--- [zBuffer] List of player cont commands
// [zBuffer] List of mob control commands --->
BUILDIN_DEF(getunittype,"i"),
@@ -27033,6 +27642,7 @@ static void script_parse_builtin(void)
BUILDIN_DEF(getunittitle,"i"),
BUILDIN_DEF(setunittitle,"is"),
BUILDIN_DEF(unitwalk,"ii?"),
+ BUILDIN_DEF(unitiswalking, "?"),
BUILDIN_DEF(unitkill,"i"),
BUILDIN_DEF(unitwarp,"isii"),
BUILDIN_DEF(unitattack,"iv?"),
@@ -27259,6 +27869,8 @@ static void script_parse_builtin(void)
BUILDIN_DEF(identify, "i"),
BUILDIN_DEF(identifyidx, "i"),
BUILDIN_DEF(openlapineddukddakboxui, "i"),
+
+ BUILDIN_DEF(callfunctionofnpc, "vs*"),
};
int i, len = ARRAYLENGTH(BUILDIN);
RECREATE(script->buildin, char *, script->buildin_count + len); // Pre-alloc to speed up
@@ -27270,7 +27882,7 @@ static void script_parse_builtin(void)
#undef BUILDIN_DEF
#undef BUILDIN_DEF2
-static void script_label_add(int key, int pos)
+static void script_label_add(int key, int pos, enum script_label_flags flags)
{
int idx = script->label_count;
@@ -27281,6 +27893,7 @@ static void script_label_add(int key, int pos)
script->labels[idx].key = key;
script->labels[idx].pos = pos;
+ script->labels[idx].flags = flags;
script->label_count++;
}
@@ -27615,6 +28228,9 @@ static void script_hardcoded_constants(void)
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->set_constant("ITEMINFO_ID", ITEMINFO_ID, false, false);
+ script->set_constant("ITEMINFO_AEGISNAME", ITEMINFO_AEGISNAME, false, false);
+ script->set_constant("ITEMINFO_NAME", ITEMINFO_NAME, false, false);
script->constdb_comment("getmercinfo options");
script->set_constant("MERCINFO_ID,", MERCINFO_ID, false, false);
@@ -27642,6 +28258,23 @@ static void script_hardcoded_constants(void)
script->set_constant("PETINFO_EVO_EGGID", PETINFO_EVO_EGGID, false, false);
script->set_constant("PETINFO_AUTOFEED", PETINFO_AUTOFEED, false, false);
+ script->constdb_comment("Pet hunger levels");
+ script->set_constant("PET_HUNGER_STARVING", PET_HUNGER_STARVING, false, false);
+ script->set_constant("PET_HUNGER_VERY_HUNGRY", PET_HUNGER_VERY_HUNGRY, false, false);
+ script->set_constant("PET_HUNGER_HUNGRY", PET_HUNGER_HUNGRY, false, false);
+ script->set_constant("PET_HUNGER_NEUTRAL", PET_HUNGER_NEUTRAL, false, false);
+ script->set_constant("PET_HUNGER_SATISFIED", PET_HUNGER_SATISFIED, false, false);
+ script->set_constant("PET_HUNGER_STUFFED", PET_HUNGER_STUFFED, false, false);
+
+ script->constdb_comment("Pet intimacy levels");
+ script->set_constant("PET_INTIMACY_NONE", PET_INTIMACY_NONE, false, false);
+ script->set_constant("PET_INTIMACY_AWKWARD", PET_INTIMACY_AWKWARD, false, false);
+ script->set_constant("PET_INTIMACY_SHY", PET_INTIMACY_SHY, false, false);
+ script->set_constant("PET_INTIMACY_NEUTRAL", PET_INTIMACY_NEUTRAL, false, false);
+ script->set_constant("PET_INTIMACY_CORDIAL", PET_INTIMACY_CORDIAL, false, false);
+ script->set_constant("PET_INTIMACY_LOYAL", PET_INTIMACY_LOYAL, false, false);
+ script->set_constant("PET_INTIMACY_MAX", PET_INTIMACY_MAX, false, false);
+
script->constdb_comment("monster skill states");
script->set_constant("MSS_ANY", MSS_ANY, false, false);
script->set_constant("MSS_IDLE", MSS_IDLE, false, false);
@@ -27679,6 +28312,7 @@ static void script_hardcoded_constants(void)
script->set_constant("MSC_MASTERATTACKED", MSC_MASTERATTACKED, false, false);
script->set_constant("MSC_ALCHEMIST", MSC_ALCHEMIST, false, false);
script->set_constant("MSC_SPAWN", MSC_SPAWN, false, false);
+ script->set_constant("MSC_MAGICATTACKED", MSC_MAGICATTACKED, false, false);
script->constdb_comment("monster skill targets");
script->set_constant("MST_TARGET", MST_TARGET, false, false);
@@ -27696,6 +28330,11 @@ static void script_hardcoded_constants(void)
script->set_constant("MST_AROUND4", MST_AROUND4, false, false);
script->set_constant("MST_AROUND", MST_AROUND , false, false);
+ script->constdb_comment("Monster group constants");
+ script->set_constant("ALL_MOBS_NONBOSS", ALL_MOBS_NONBOSS, false, false);
+ script->set_constant("ALL_MOBS_BOSS", ALL_MOBS_BOSS, false, false);
+ script->set_constant("ALL_MOBS", ALL_MOBS, false, false);
+
script->constdb_comment("pc block constants, use with *setpcblock* and *checkpcblock*");
script->set_constant("PCBLOCK_NONE", PCBLOCK_NONE, false, false);
script->set_constant("PCBLOCK_MOVE", PCBLOCK_MOVE, false, false);
@@ -27708,6 +28347,16 @@ static void script_hardcoded_constants(void)
script->set_constant("PCBLOCK_COMMANDS", PCBLOCK_COMMANDS, false, false);
script->set_constant("PCBLOCK_NPC", PCBLOCK_NPC, false, false);
+ script->constdb_comment("NPC item action constants");
+ script->set_constant("ITEMENABLEDNPC_NONE", ITEMENABLEDNPC_NONE, false, false);
+ script->set_constant("ITEMENABLEDNPC_EQUIP", ITEMENABLEDNPC_EQUIP, false, false);
+ script->set_constant("ITEMENABLEDNPC_CONSUME", ITEMENABLEDNPC_CONSUME, false, false);
+
+ script->constdb_comment("NPC allowed skill use constants");
+ script->set_constant("SKILLENABLEDNPC_NONE", SKILLENABLEDNPC_NONE, false, false);
+ script->set_constant("SKILLENABLEDNPC_SELF", SKILLENABLEDNPC_SELF, false, false);
+ script->set_constant("SKILLENABLEDNPC_ALL", SKILLENABLEDNPC_ALL, false, false);
+
script->constdb_comment("private airship responds");
script->set_constant("P_AIRSHIP_NONE", P_AIRSHIP_NONE, false, false);
script->set_constant("P_AIRSHIP_RETRY", P_AIRSHIP_RETRY, false, false);
@@ -27715,6 +28364,11 @@ static void script_hardcoded_constants(void)
script->set_constant("P_AIRSHIP_INVALID_END_MAP", P_AIRSHIP_INVALID_END_MAP, false, false);
script->set_constant("P_AIRSHIP_ITEM_NOT_ENOUGH", P_AIRSHIP_ITEM_NOT_ENOUGH, false, false);
script->set_constant("P_AIRSHIP_ITEM_INVALID", P_AIRSHIP_ITEM_INVALID, false, false);
+
+ script->constdb_comment("player allowed actions when dead");
+ script->set_constant("PCALLOWACTION_NONE", PCALLOWACTION_NONE, false, false);
+ script->set_constant("PCALLOWACTION_TRADE", PCALLOWACTION_TRADE, false, false);
+ script->set_constant("PCALLOWACTION_CHAT", PCALLOWACTION_CHAT, false, false);
script->constdb_comment("questinfo types");
script->set_constant("QINFO_JOB", QINFO_JOB, false, false);
@@ -27858,10 +28512,17 @@ static void script_hardcoded_constants(void)
script->constdb_comment("itemskill option flags");
script->set_constant("ISF_NONE", ISF_NONE, false, false);
- script->set_constant("ISF_IGNORECONDITIONS", ISF_IGNORECONDITIONS, false, false);
+ script->set_constant("ISF_CHECKCONDITIONS", ISF_CHECKCONDITIONS, false, false);
script->set_constant("ISF_INSTANTCAST", ISF_INSTANTCAST, false, false);
script->set_constant("ISF_CASTONSELF", ISF_CASTONSELF, false, false);
+ script->constdb_comment("Item Bound Types");
+ script->set_constant("IBT_ANY", IBT_NONE, false, false); // for *checkbound()
+ script->set_constant("IBT_ACCOUNT", IBT_ACCOUNT, false, false);
+ script->set_constant("IBT_GUILD", IBT_GUILD, false, false);
+ script->set_constant("IBT_PARTY", IBT_PARTY, false, false);
+ script->set_constant("IBT_CHARACTER", IBT_CHARACTER, false, false);
+
script->constdb_comment("Renewal");
#ifdef RENEWAL
script->set_constant("RENEWAL", 1, false, false);
@@ -28060,6 +28721,7 @@ void script_defaults(void)
script->parse_syntax_close = parse_syntax_close;
script->parse_syntax_close_sub = parse_syntax_close_sub;
script->parse_syntax = parse_syntax;
+ script->parse_syntax_function = parse_syntax_function;
script->get_com = get_com;
script->get_num = get_num;
script->op2name = script_op2name;
@@ -28092,6 +28754,7 @@ void script_defaults(void)
script->load_parameters = script_load_parameters;
script->print_line = script_print_line;
script->errorwarning_sub = script_errorwarning_sub;
+ script->is_permanent_variable = script_is_permanent_variable;
script->set_reg = set_reg;
script->set_reg_ref_str = set_reg_npcscope_str;
script->set_reg_pc_ref_str = set_reg_pc_ref_str;
@@ -28163,6 +28826,8 @@ void script_defaults(void)
script->config.ontouch_name = "OnTouch_"; //ontouch_name (runs on first visible char to enter area, picks another char if the first char leaves)
script->config.ontouch2_name = "OnTouch"; //ontouch2_name (run whenever a char walks into the OnTouch area)
script->config.onuntouch_name = "OnUnTouch"; //onuntouch_name (run whenever a char walks from the OnTouch area)
+ script->config.functions_private_by_default = true;
+ script->config.functions_as_events = false;
// for ENABLE_CASE_CHECK
script->calc_hash_ci = calc_hash_ci;
diff --git a/src/map/script.h b/src/map/script.h
index 857d22c61..60f403d2d 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -345,7 +345,8 @@ enum {
MF_PAIRSHIP_STARTABLE,
MF_PAIRSHIP_ENDABLE,
MF_NOSTORAGE,
- MF_NOGSTORAGE
+ MF_NOGSTORAGE,
+ MF_NOPET,
};
enum navigation_service {
@@ -484,6 +485,9 @@ enum script_iteminfo_types {
ITEMINFO_ITEM_USAGE_FLAG,
ITEMINFO_ITEM_USAGE_OVERRIDE,
ITEMINFO_GM_LV_TRADE_OVERRIDE,
+ ITEMINFO_ID,
+ ITEMINFO_AEGISNAME,
+ ITEMINFO_NAME,
ITEMINFO_MAX
};
@@ -569,7 +573,7 @@ enum mado_type {
**/
enum itemskill_flag {
ISF_NONE = 0x00,
- ISF_IGNORECONDITIONS = 0x01, // Ignore skill conditions and don't consume them.
+ ISF_CHECKCONDITIONS = 0x01, // Check skill conditions and consume them.
ISF_INSTANTCAST = 0x02, // Cast skill instantaneously.
ISF_CASTONSELF = 0x04, // Forcefully cast skill on invoking character without showing the target selection cursor.
};
@@ -581,6 +585,8 @@ enum itemskill_flag {
struct Script_Config {
bool warn_func_mismatch_argtypes;
bool warn_func_mismatch_paramnum;
+ bool functions_private_by_default;
+ bool functions_as_events;
int check_cmdcount;
int check_gotocount;
int input_min_value;
@@ -698,7 +704,7 @@ struct script_state {
int bk_npcid;
unsigned freeloop : 1;// used by buildin_freeloop
unsigned op2ref : 1;// used by op_2
- unsigned npc_item_flag : 1;
+ unsigned npc_item_flag : 2;
unsigned int id;
};
@@ -722,8 +728,14 @@ struct str_data_struct {
uint8 deprecated : 1;
};
+/** a label within a script (does not use the label db) */
struct script_label_entry {
- int key,pos;
+ /** label name (held within str_data) */
+ int key;
+ /** position within the script */
+ int pos;
+ /** optional flags for the label */
+ enum script_label_flags flags;
};
struct script_syntax_data {
@@ -914,7 +926,7 @@ struct script_interface {
void (*set_constant) (const char *name, int value, bool is_parameter, bool is_deprecated);
void (*set_constant2) (const char *name, int value, bool is_parameter, bool is_deprecated);
bool (*get_constant) (const char* name, int* value);
- void (*label_add)(int key, int pos);
+ void (*label_add)(int key, int pos, enum script_label_flags flags);
void (*run) (struct script_code *rootscript, int pos, int rid, int oid);
void (*run_npc) (struct script_code *rootscript, int pos, int rid, int oid);
void (*run_pet) (struct script_code *rootscript, int pos, int rid, int oid);
@@ -945,10 +957,11 @@ struct script_interface {
int (*queue_create) (void);
bool (*queue_clear) (int idx);
/* */
- const char * (*parse_curly_close) (const char *p);
- const char * (*parse_syntax_close) (const char *p);
- const char * (*parse_syntax_close_sub) (const char *p, int *flag);
- const char * (*parse_syntax) (const char *p);
+ const char *(*parse_curly_close) (const char *p);
+ const char *(*parse_syntax_close) (const char *p);
+ const char *(*parse_syntax_close_sub) (const char *p, int *flag);
+ const char *(*parse_syntax) (const char *p);
+ const char *(*parse_syntax_function) (const char *p, bool is_public);
c_op (*get_com) (const struct script_buf *scriptbuf, int *pos);
int (*get_num) (const struct script_buf *scriptbuf, int *pos);
const char* (*op2name) (int op);
@@ -981,6 +994,7 @@ struct script_interface {
void (*load_parameters) (void);
const char* (*print_line) (StringBuf *buf, const char *p, const char *mark, int line);
void (*errorwarning_sub) (StringBuf *buf, const char *src, const char *file, int start_line, const char *error_msg, const char *error_pos);
+ bool (*is_permanent_variable) (const char *name);
int (*set_reg) (struct script_state *st, struct map_session_data *sd, int64 num, const char *name, const void *value, struct reg_db *ref);
void (*set_reg_ref_str) (struct script_state* st, struct reg_db *n, int64 num, const char* name, const char *str);
void (*set_reg_pc_ref_str) (struct script_state* st, struct reg_db *n, int64 num, const char* name, const char *str);
diff --git a/src/map/skill.c b/src/map/skill.c
index a8dbefbd7..c2a336d7e 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -47,6 +47,7 @@
#include "map/refine.h"
#include "map/script.h"
#include "map/status.h"
+#include "map/storage.h"
#include "map/unit.h"
#include "common/cbasetypes.h"
#include "common/ers.h"
@@ -72,6 +73,34 @@ static struct s_skill_dbs skilldbs;
struct skill_interface *skill;
+static const struct {
+ int start;
+ int end;
+} skill_idx_ranges[] = {
+ { NV_BASIC, NPC_LEX_AETERNA },
+ { KN_CHARGEATK, SA_ELEMENTWIND },
+ { RK_ENCHANTBLADE, AB_SILENTIUM },
+ { WL_WHITEIMPRISON, SC_FEINTBOMB },
+ { LG_CANNONSPEAR, SR_GENTLETOUCH_REVITALIZE },
+ { WA_SWING_DANCE, WA_MOONLIT_SERENADE },
+ { MI_RUSH_WINDMILL, MI_HARMONIZE },
+ { WM_LESSON, WM_UNLIMITED_HUMMING_VOICE },
+ { SO_FIREWALK, SO_EARTH_INSIGNIA },
+ { GN_TRAINING_SWORD, GN_SLINGITEM_RANGEMELEEATK },
+ { AB_SECRAMENT, LG_OVERBRAND_PLUSATK },
+ { ALL_ODINS_RECALL, ALL_LIGHTGUARD },
+ { RL_GLITTERING_GREED, RL_GLITTERING_GREED_ATK },
+ { KO_YAMIKUMO, OB_AKAITSUKI },
+ { ECL_SNOWFLIP, ALL_THANATOS_RECALL },
+ { GC_DARKCROW, NC_MAGMA_ERUPTION_DOTDAMAGE },
+ { SU_BASIC_SKILL, SU_SPIRITOFSEA },
+ { HLIF_HEAL, MH_VOLCANIC_ASH },
+ { MS_BASH, MER_INVINCIBLEOFF2 },
+ { EL_CIRCLE_OF_FIRE, EL_STONE_RAIN },
+ { GD_APPROVAL, GD_DEVELOPMENT },
+ CUSTOM_SKILL_RANGES
+};
+
//Since only mob-casted splash skills can hit ice-walls
static int skill_splash_target(struct block_list *bl)
{
@@ -96,51 +125,37 @@ static int skill_name2id(const char *name)
/// Returns the skill's array index, or 0 (Unknown Skill).
static int skill_get_index(int skill_id)
{
- int skillRange[] = { NV_BASIC, NPC_LEX_AETERNA,
- KN_CHARGEATK, SA_ELEMENTWIND,
- RK_ENCHANTBLADE, AB_SILENTIUM,
- WL_WHITEIMPRISON, SC_FEINTBOMB,
- LG_CANNONSPEAR, SR_GENTLETOUCH_REVITALIZE,
- WA_SWING_DANCE, WA_MOONLIT_SERENADE,
- MI_RUSH_WINDMILL, MI_HARMONIZE,
- WM_LESSON, WM_UNLIMITED_HUMMING_VOICE,
- SO_FIREWALK, SO_EARTH_INSIGNIA,
- GN_TRAINING_SWORD, GN_SLINGITEM_RANGEMELEEATK,
- AB_SECRAMENT, LG_OVERBRAND_PLUSATK,
- ALL_ODINS_RECALL, ALL_LIGHTGUARD,
- RL_GLITTERING_GREED, RL_GLITTERING_GREED_ATK,
- KO_YAMIKUMO, OB_AKAITSUKI,
- ECL_SNOWFLIP, ALL_THANATOS_RECALL,
- GC_DARKCROW, NC_MAGMA_ERUPTION_DOTDAMAGE,
- SU_BASIC_SKILL, SU_SPIRITOFSEA,
- HLIF_HEAL, MH_VOLCANIC_ASH,
- MS_BASH, MER_INVINCIBLEOFF2,
- EL_CIRCLE_OF_FIRE, EL_STONE_RAIN,
- GD_APPROVAL, GD_DEVELOPMENT
- CUSTOM_SKILL_RANGES};
- int length = sizeof(skillRange) / sizeof(int);
- STATIC_ASSERT(sizeof(skillRange) / sizeof(int) % 2 == 0, "skill_get_index: skillRange should be multiple of 2");
-
-
- if (skill_id < skillRange[0] || skill_id > skillRange[length - 1]) {
+ int length = ARRAYLENGTH(skill_idx_ranges);
+
+
+ if (skill_id < skill_idx_ranges[0].start || skill_id > skill_idx_ranges[length - 1].end) {
ShowWarning("skill_get_index: skill id '%d' is not being handled!\n", skill_id);
+ Assert_report(0);
return 0;
}
int skill_idx = 0;
+ bool found = false;
// Map Skill ID to Skill Indexes (in reverse order)
- for (int i = 0; i < length; i += 2) {
+ for (int i = 0; i < length; i++) {
// Check if SkillID belongs to this range.
- if (skill_id <= skillRange[i + 1] && skill_id >= skillRange[i]) {
- skill_idx += (skillRange[i + 1] - skill_id);
+ if (skill_id <= skill_idx_ranges[i].end && skill_id >= skill_idx_ranges[i].start) {
+ skill_idx += (skill_idx_ranges[i].end - skill_id);
+ found = true;
break;
}
// Add the difference of current range
- skill_idx += (skillRange[i + 1] - skillRange[i] + 1);
+ skill_idx += (skill_idx_ranges[i].end - skill_idx_ranges[i].start + 1);
}
+ if (!found) {
+ ShowWarning("skill_get_index: skill id '%d' (idx: %d) is not handled as it lies outside the defined ranges!\n", skill_id, skill_idx);
+ Assert_report(0);
+ return 0;
+ }
if (skill_idx >= MAX_SKILL_DB) {
ShowWarning("skill_get_index: skill id '%d'(idx: %d) is not being handled as it exceeds MAX_SKILL_DB!\n", skill_id, skill_idx);
+ Assert_report(0);
return 0;
}
@@ -162,14 +177,26 @@ static const char *skill_get_desc(int skill_id)
// Skill DB
-static int skill_get_hit(int skill_id)
+/**
+ * Gets a skill's hit type by its ID and level. (See enum battle_dmg_type.)
+ *
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return The skill's hit type corresponding to the passed level. Defaults to BDT_NORMAL (0) in case of error.
+ *
+ **/
+static int skill_get_hit(int skill_id, int skill_lv)
{
- int idx;
if (skill_id == 0)
- return 0;
- idx = skill->get_index(skill_id);
- Assert_ret(idx != 0);
- return skill->dbs->db[idx].hit;
+ return BDT_NORMAL;
+
+ Assert_retr(BDT_NORMAL, skill_lv > 0);
+
+ int idx = skill->get_index(skill_id);
+
+ Assert_retr(BDT_NORMAL, idx != 0);
+
+ return skill->dbs->db[idx].hit[skill_get_lvl_idx(skill_lv)];
}
static int skill_get_inf(int skill_id)
@@ -306,14 +333,26 @@ static int skill_get_sp_rate(int skill_id, int skill_lv)
return skill->dbs->db[idx].sp_rate[skill_get_lvl_idx(skill_lv)];
}
-static int skill_get_state(int skill_id)
+/**
+ * Gets a skill's required state by its ID and level.
+ *
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return The skill's required state corresponding to the passed level. Defaults to ST_NONE (0) in case of error.
+ *
+ **/
+static int skill_get_state(int skill_id, int skill_lv)
{
- int idx;
if (skill_id == 0)
return ST_NONE;
- idx = skill->get_index(skill_id);
+
+ Assert_retr(ST_NONE, skill_lv > 0);
+
+ int idx = skill->get_index(skill_id);
+
Assert_retr(ST_NONE, idx != 0);
- return skill->dbs->db[idx].state;
+
+ return skill->dbs->db[idx].state[skill_get_lvl_idx(skill_lv)];
}
static int skill_get_spiritball(int skill_id, int skill_lv)
@@ -331,26 +370,175 @@ static int skill_get_spiritball(int skill_id, int skill_lv)
return skill->dbs->db[idx].spiritball[skill_get_lvl_idx(skill_lv)];
}
+/**
+ * Gets the index of the first required item for a skill at given level.
+ *
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return The required item's index. Defaults to INDEX_NOT_FOUND (-1) in case of error or if no appropriate index was found.
+ *
+ **/
+static int skill_get_item_index(int skill_id, int skill_lv)
+{
+ if (skill_id == 0)
+ return INDEX_NOT_FOUND;
+
+ Assert_retr(INDEX_NOT_FOUND, skill_lv > 0);
+
+ int idx = skill->get_index(skill_id);
+
+ Assert_retr(INDEX_NOT_FOUND, idx != 0);
+
+ int item_index = INDEX_NOT_FOUND;
+ int level_index = skill_get_lvl_idx(skill_lv);
+
+ for (int i = 0; i < MAX_SKILL_ITEM_REQUIRE; i++) {
+ if (skill->dbs->db[idx].req_items.item[i].id == 0)
+ continue;
+
+ if (skill->dbs->db[idx].req_items.item[i].amount[level_index] != -1) {
+ item_index = i;
+ break;
+ }
+ }
+
+ return item_index;
+}
+
+/**
+ * Gets a skill's required item's ID by the skill's ID and the item's index.
+ *
+ * @param skill_id The skill's ID.
+ * @param item_idx The item's index.
+ * @return The skill's required item's ID corresponding to the passed index. Defaults to 0 in case of error.
+ *
+ **/
static int skill_get_itemid(int skill_id, int item_idx)
{
- int idx;
if (skill_id == 0)
return 0;
- idx = skill->get_index(skill_id);
+
+ Assert_ret(item_idx >= 0 && item_idx < MAX_SKILL_ITEM_REQUIRE);
+
+ int idx = skill->get_index(skill_id);
+
Assert_ret(idx != 0);
+
+ return skill->dbs->db[idx].req_items.item[item_idx].id;
+}
+
+/**
+ * Gets a skill's required item's amount by the skill's ID and level and the item's index.
+ *
+ * @param skill_id The skill's ID.
+ * @param item_idx The item's index.
+ * @param skill_lv The skill's level.
+ * @return The skill's required item's amount corresponding to the passed index and level. Defaults to 0 in case of error.
+ *
+ **/
+static int skill_get_itemqty(int skill_id, int item_idx, int skill_lv)
+{
+ if (skill_id == 0)
+ return 0;
+
Assert_ret(item_idx >= 0 && item_idx < MAX_SKILL_ITEM_REQUIRE);
- return skill->dbs->db[idx].itemid[item_idx];
+ Assert_ret(skill_lv > 0);
+
+ int idx = skill->get_index(skill_id);
+
+ Assert_ret(idx != 0);
+
+ return skill->dbs->db[idx].req_items.item[item_idx].amount[skill_get_lvl_idx(skill_lv)];
}
-static int skill_get_itemqty(int skill_id, int item_idx)
+/**
+ * Gets a skill's required items any-flag by the skill's ID and level.
+ *
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return The skill's required items any-flag corresponding to the passed level. Defaults to false in case of error.
+ *
+ **/
+static bool skill_get_item_any_flag(int skill_id, int skill_lv)
+{
+ if (skill_id == 0)
+ return false;
+
+ Assert_retr(false, skill_lv > 0);
+
+ int idx = skill->get_index(skill_id);
+
+ Assert_retr(false, idx != 0);
+
+ return skill->dbs->db[idx].req_items.any[skill_get_lvl_idx(skill_lv)];
+}
+
+/**
+ * Gets a skill's required equipment's ID by the skill's ID and the equipment item's index.
+ *
+ * @param skill_id The skill's ID.
+ * @param item_idx The equipment item's index.
+ * @return The skill's required equipment's ID corresponding to the passed index. Defaults to 0 in case of error.
+ *
+ **/
+static int skill_get_equip_id(int skill_id, int item_idx)
{
- int idx;
if (skill_id == 0)
return 0;
- idx = skill->get_index(skill_id);
+
+ Assert_ret(item_idx >= 0 && item_idx < MAX_SKILL_ITEM_REQUIRE);
+
+ int idx = skill->get_index(skill_id);
+
Assert_ret(idx != 0);
+
+ return skill->dbs->db[idx].req_equip.item[item_idx].id;
+}
+
+/**
+ * Gets a skill's required equipment's amount by the skill's ID and level and the equipment item's index.
+ *
+ * @param skill_id The skill's ID.
+ * @param item_idx The equipment item's index.
+ * @param skill_lv The skill's level.
+ * @return The skill's required equipment item's amount corresponding to the passed index and level. Defaults to 0 in case of error.
+ *
+ **/
+static int skill_get_equip_amount(int skill_id, int item_idx, int skill_lv)
+{
+ if (skill_id == 0)
+ return 0;
+
Assert_ret(item_idx >= 0 && item_idx < MAX_SKILL_ITEM_REQUIRE);
- return skill->dbs->db[idx].amount[item_idx];
+ Assert_ret(skill_lv > 0);
+
+ int idx = skill->get_index(skill_id);
+
+ Assert_ret(idx != 0);
+
+ return skill->dbs->db[idx].req_equip.item[item_idx].amount[skill_get_lvl_idx(skill_lv)];
+}
+
+/**
+ * Gets a skill's required equipment any-flag by the skill's ID and level.
+ *
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return The skill's required equipment's any-flag corresponding to the passed level. Defaults to false in case of error.
+ *
+ **/
+static bool skill_get_equip_any_flag(int skill_id, int skill_lv)
+{
+ if (skill_id == 0)
+ return false;
+
+ Assert_retr(false, skill_lv > 0);
+
+ int idx = skill->get_index(skill_id);
+
+ Assert_retr(false, idx != 0);
+
+ return skill->dbs->db[idx].req_equip.any[skill_get_lvl_idx(skill_lv)];
}
static int skill_get_zeny(int skill_id, int skill_lv)
@@ -458,14 +646,26 @@ static int skill_get_time2(int skill_id, int skill_lv)
return skill->dbs->db[idx].upkeep_time2[skill_get_lvl_idx(skill_lv)];
}
-static int skill_get_castdef(int skill_id)
+/**
+ * Gets a skill's cast defence rate by its ID and level.
+ *
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return The skill's cast defence rate corresponding to the passed level. Defaults to 0 in case of error.
+ *
+ **/
+static int skill_get_castdef(int skill_id, int skill_lv)
{
- int idx;
if (skill_id == 0)
return 0;
- idx = skill->get_index(skill_id);
+
+ Assert_ret(skill_lv > 0);
+
+ int idx = skill->get_index(skill_id);
+
Assert_ret(idx != 0);
- return skill->dbs->db[idx].cast_def_rate;
+
+ return skill->dbs->db[idx].cast_def_rate[skill_get_lvl_idx(skill_lv)];
}
static int skill_get_weapontype(int skill_id)
@@ -513,14 +713,26 @@ static int skill_get_inf2(int skill_id)
return skill->dbs->db[idx].inf2;
}
-static int skill_get_castcancel(int skill_id)
+/**
+ * Gets a skill's cast interruptibility by its ID and level.
+ *
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return The skill's cast interruptibility corresponding to the passed level. Defaults to 0 in case of error.
+ *
+ **/
+static int skill_get_castcancel(int skill_id, int skill_lv)
{
- int idx;
if (skill_id == 0)
return 0;
- idx = skill->get_index(skill_id);
+
+ Assert_ret(skill_lv > 0);
+
+ int idx = skill->get_index(skill_id);
+
Assert_ret(idx != 0);
- return skill->dbs->db[idx].castcancel;
+
+ return skill->dbs->db[idx].castcancel[skill_get_lvl_idx(skill_lv)];
}
static int skill_get_maxcount(int skill_id, int skill_lv)
@@ -568,6 +780,28 @@ static int skill_get_mhp(int skill_id, int skill_lv)
return skill->dbs->db[idx].mhp[skill_get_lvl_idx(skill_lv)];
}
+/**
+ * Gets a skill's maximum SP trigger by its ID and level.
+ *
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return The skill's maximum SP trigger corresponding to the passed level. Defaults to 0 in case of error.
+ *
+ **/
+static int skill_get_msp(int skill_id, int skill_lv)
+{
+ if (skill_id == 0)
+ return 0;
+
+ Assert_ret(skill_lv > 0);
+
+ int idx = skill->get_index(skill_id);
+
+ Assert_ret(idx != 0);
+
+ return skill->dbs->db[idx].msp[skill_get_lvl_idx(skill_lv)];
+}
+
static int skill_get_castnodex(int skill_id, int skill_lv)
{
int idx;
@@ -598,35 +832,72 @@ static int skill_get_delaynodex(int skill_id, int skill_lv)
return skill->dbs->db[idx].delaynodex[skill_get_lvl_idx(skill_lv)];
}
-static int skill_get_type(int skill_id)
+/**
+ * Gets a skill's attack type by its ID and level.
+ *
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return The skill's attack type corresponding to the passed level. Defaults to BF_NONE (0) in case of error.
+ *
+ **/
+static int skill_get_type(int skill_id, int skill_lv)
{
- int idx;
if (skill_id == 0)
return BF_NONE;
- idx = skill->get_index(skill_id);
+
+ Assert_retr(BF_NONE, skill_lv > 0);
+
+ int idx = skill->get_index(skill_id);
+
Assert_retr(BF_NONE, idx != 0);
- return skill->dbs->db[idx].skill_type;
+
+ return skill->dbs->db[idx].skill_type[skill_get_lvl_idx(skill_lv)];
}
-static int skill_get_unit_id(int skill_id, int flag)
+/**
+ * Gets a skill's unit ID by its ID and level.
+ *
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @param flag
+ * @return The skill's unit ID corresponding to the passed level. Defaults to 0 in case of error.
+ *
+ **/
+static int skill_get_unit_id(int skill_id, int skill_lv, int flag)
{
- int idx;
if (skill_id == 0)
return 0;
- idx = skill->get_index(skill_id);
+
+ Assert_ret(skill_lv > 0);
+ Assert_ret(flag >= 0 && flag < ARRAYLENGTH(skill->dbs->db[0].unit_id[0]));
+
+ int idx = skill->get_index(skill_id);
+
Assert_ret(idx != 0);
- Assert_ret(flag >= 0 && flag < ARRAYLENGTH(skill->dbs->db[0].unit_id));
- return skill->dbs->db[idx].unit_id[flag];
+
+ return skill->dbs->db[idx].unit_id[skill_get_lvl_idx(skill_lv)][flag];
}
-static int skill_get_unit_interval(int skill_id)
+/**
+ * Gets a skill's unit interval by its ID and level.
+ *
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return The skill's unit interval corresponding to the passed level. Defaults to 0 in case of error.
+ *
+ **/
+static int skill_get_unit_interval(int skill_id, int skill_lv)
{
- int idx;
if (skill_id == 0)
return 0;
- idx = skill->get_index(skill_id);
+
+ Assert_ret(skill_lv > 0);
+
+ int idx = skill->get_index(skill_id);
+
Assert_ret(idx != 0);
- return skill->dbs->db[idx].unit_interval;
+
+ return skill->dbs->db[idx].unit_interval[skill_get_lvl_idx(skill_lv)];
}
static int skill_get_unit_range(int skill_id, int skill_lv)
@@ -644,24 +915,48 @@ static int skill_get_unit_range(int skill_id, int skill_lv)
return skill->dbs->db[idx].unit_range[skill_get_lvl_idx(skill_lv)];
}
-static int skill_get_unit_target(int skill_id)
+/**
+ * Gets a skill's unit target by its ID and level.
+ *
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return The skill's unit target corresponding to the passed level. Defaults to BCT_NOONE (0) in case of error.
+ *
+ **/
+static int skill_get_unit_target(int skill_id, int skill_lv)
{
- int idx;
if (skill_id == 0)
return BCT_NOONE;
- idx = skill->get_index(skill_id);
+
+ Assert_retr(BCT_NOONE, skill_lv > 0);
+
+ int idx = skill->get_index(skill_id);
+
Assert_retr(BCT_NOONE, idx != 0);
- return skill->dbs->db[idx].unit_target & BCT_ALL;
+
+ return (skill->dbs->db[idx].unit_target[skill_get_lvl_idx(skill_lv)] & BCT_ALL);
}
-static int skill_get_unit_bl_target(int skill_id)
+/**
+ * Gets a skill's unit target as bl type by its ID and level.
+ *
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return The skill's unit target as bl type corresponding to the passed level. Defaults to BL_NUL (0) in case of error.
+ *
+ **/
+static int skill_get_unit_bl_target(int skill_id, int skill_lv)
{
- int idx;
if (skill_id == 0)
return BL_NUL;
- idx = skill->get_index(skill_id);
- Assert_retr(BL_NUL, idx != 0);
- return skill->dbs->db[idx].unit_target & BL_ALL;
+
+ Assert_retr(BCT_NOONE, skill_lv > 0);
+
+ int idx = skill->get_index(skill_id);
+
+ Assert_retr(BCT_NOONE, idx != 0);
+
+ return (skill->dbs->db[idx].unit_target[skill_get_lvl_idx(skill_lv)] & BL_ALL);
}
static int skill_get_unit_flag(int skill_id)
@@ -935,6 +1230,8 @@ static int skill_calc_heal(struct block_list *src, struct block_list *target, ui
hp -= hp * 20/100;
if(sc->data[SC_HEALPLUS] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN)
hp += hp * sc->data[SC_HEALPLUS]->val1/100; // Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish]
+ if (sc->data[SC_VITALIZE_POTION] != NULL && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN)
+ hp += hp * sc->data[SC_VITALIZE_POTION]->val3 / 100;
if(sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 2)
hp += hp / 10;
if (sc->data[SC_VITALITYACTIVATION])
@@ -1010,14 +1307,17 @@ static int skillnotok(uint16 skill_id, struct map_session_data *sd)
if (pc_has_permission(sd, PC_PERM_SKILL_UNCONDITIONAL))
return 0; // can do any damn thing they want
- if( skill_id == AL_TELEPORT && sd->skillitem == skill_id && sd->skillitemlv > 2 )
- return 0; // Teleport lv 3 bypasses this check.[Inkfish]
+ if (map->getcell(sd->bl.m, &sd->bl, sd->bl.x, sd->bl.y, CELL_CHKNOSKILL))
+ return 1; // block usage on 'noskill' cells [Wolfie]
+
+ if (skill_id == AL_TELEPORT && sd->auto_cast_current.type == AUTOCAST_ITEM && sd->auto_cast_current.skill_lv > 2)
+ return 0; // Teleport level 3 and higher bypasses this check if cast by itemskill() script commands.
// Epoque:
// This code will compare the player's attack motion value which is influenced by ASPD before
// allowing a skill to be cast. This is to prevent no-delay ACT files from spamming skills such as
// AC_DOUBLE which do not have a skill delay and are not regarded in terms of attack motion.
- if( !sd->state.autocast && sd->skillitem != skill_id && sd->canskill_tick &&
+ if (sd->auto_cast_current.type == AUTOCAST_NONE && sd->canskill_tick != 0 &&
DIFF_TICK(timer->gettick(), sd->canskill_tick) < (sd->battle_status.amotion * (battle_config.skill_amotion_leniency) / 100) )
{// attempted to cast a skill before the attack motion has finished
return 1;
@@ -1032,7 +1332,7 @@ static int skillnotok(uint16 skill_id, struct map_session_data *sd)
* It has been confirmed on a official server (thanks to Yommy) that item-cast skills bypass all the restrictions below
* Also, without this check, an exploit where an item casting + healing (or any other kind buff) isn't deleted after used on a restricted map
**/
- if( sd->skillitem == skill_id )
+ if (sd->auto_cast_current.type == AUTOCAST_ITEM)
return 0;
if( sd->sc.data[SC_ALL_RIDING] )
@@ -1177,10 +1477,36 @@ static int skillnotok_mercenary(uint16 skill_id, struct mercenary_data *md)
return skill->not_ok(skill_id, md->master);
}
+/**
+ * Validates the plausibility of auto-cast related data and calls pc_autocast_clear() if necessary.
+ *
+ * @param sd The character who cast the skill.
+ * @param skill_id The cast skill's ID.
+ * @param skill_lv The cast skill's level. (clif_parse_UseSkillMap() passes 0.)
+ *
+ **/
+static void skill_validate_autocast_data(struct map_session_data *sd, int skill_id, int skill_lv)
+{
+ nullpo_retv(sd);
+
+ // Determine if called by clif_parse_UseSkillMap().
+ bool use_skill_map = (skill_lv == 0 && (skill_id == AL_WARP || skill_id == AL_TELEPORT));
+
+ struct autocast_data *auto_cast = &sd->auto_cast_current;
+
+ if (auto_cast->type == AUTOCAST_NONE)
+ pc->autocast_clear(sd); // No auto-cast type set. Preventively unset all auto-cast related data.
+ else if (auto_cast->type == AUTOCAST_TEMP)
+ pc->autocast_clear(sd); // AUTOCAST_TEMP should have been unset straight after usage.
+ else if (auto_cast->skill_id == 0 || skill_id == 0 || auto_cast->skill_id != skill_id)
+ pc->autocast_remove(sd, auto_cast->type, auto_cast->skill_id, auto_cast->skill_lv); // Implausible skill ID.
+ else if (auto_cast->skill_lv == 0 || (!use_skill_map && (skill_lv == 0 || auto_cast->skill_lv != skill_lv)))
+ pc->autocast_remove(sd, auto_cast->type, auto_cast->skill_id, auto_cast->skill_lv); // Implausible skill level.
+}
+
static struct s_skill_unit_layout *skill_get_unit_layout(uint16 skill_id, uint16 skill_lv, struct block_list *src, int x, int y)
{
int pos = skill->get_unit_layout_type(skill_id,skill_lv);
- uint8 dir;
nullpo_retr(&skill->dbs->unit_layout[0], src);
if (pos < -1 || pos >= MAX_SKILL_UNIT_LAYOUT) {
@@ -1191,7 +1517,9 @@ static struct s_skill_unit_layout *skill_get_unit_layout(uint16 skill_id, uint16
if (pos != -1) // simple single-definition layout
return &skill->dbs->unit_layout[pos];
- dir = (src->x == x && src->y == y) ? 6 : map->calc_dir(src,x,y); // 6 - default aegis direction
+ enum unit_dir dir = UNIT_DIR_EAST; // default aegis direction
+ if (src->x != x || src->y != y)
+ dir = map->calc_dir(src, x, y);
if (skill_id == MG_FIREWALL)
return &skill->dbs->unit_layout [skill->firewall_unit_pos + dir];
@@ -1321,11 +1649,15 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
if( pc_iswug(sd) && (temp=pc->checkskill(sd,RA_WUGSTRIKE)) > 0 && rnd()%1000 <= sstatus->luk*3 )
skill->castend_damage_id(src,bl,RA_WUGSTRIKE,temp,tick,0);
// Gank
- if(dstmd && sd->weapontype != W_BOW &&
- (temp=pc->checkskill(sd,RG_SNATCHER)) > 0 &&
- (temp*15 + 55) + pc->checkskill(sd,TF_STEAL)*10 > rnd()%1000) {
- if(pc->steal_item(sd,bl,pc->checkskill(sd,TF_STEAL)))
- clif->skill_nodamage(src,bl,TF_STEAL,temp,1);
+ if (dstmd && sd->weapontype != W_BOW &&
+ (temp = pc->checkskill(sd, RG_SNATCHER)) > 0 &&
+#ifdef RENEWAL
+ (temp * 10) + pc->checkskill(sd, TF_STEAL) * 10 > rnd() % 1000) {
+#else
+ (temp * 15 + 55) + pc->checkskill(sd, TF_STEAL) * 10 > rnd() % 1000) {
+#endif
+ if (pc->steal_item(sd, bl, pc->checkskill(sd, TF_STEAL)))
+ clif->skill_nodamage(src, bl, TF_STEAL, temp, 1);
else
clif->skill_fail(sd, RG_SNATCHER, USESKILL_FAIL_LEVEL, 0, 0);
}
@@ -2064,9 +2396,9 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
temp = (sd->autospell[i].id > 0) ? sd->autospell[i].id : -sd->autospell[i].id;
- sd->state.autocast = 1;
+ sd->auto_cast_current.type = AUTOCAST_TEMP;
notok = skill->not_ok(temp, sd);
- sd->state.autocast = 0;
+ sd->auto_cast_current.type = AUTOCAST_NONE;
if ( notok )
continue;
@@ -2117,11 +2449,12 @@ static int skill_additional_effect(struct block_list *src, struct block_list *bl
else if (temp == PF_SPIDERWEB) //Special case, due to its nature of coding.
type = CAST_GROUND;
- sd->state.autocast = 1;
+ sd->auto_cast_current.type = AUTOCAST_TEMP;
skill->consume_requirement(sd,temp,auto_skill_lv,1);
- skill->toggle_magicpower(src, temp);
+ skill->toggle_magicpower(src, temp, auto_skill_lv);
skill->castend_type(type, src, tbl, temp, auto_skill_lv, tick, 0);
- sd->state.autocast = 0;
+ sd->auto_cast_current.type = AUTOCAST_NONE;
+
//Set canact delay. [Skotlex]
ud = unit->bl2ud(src);
if (ud) {
@@ -2190,6 +2523,9 @@ static int skill_onskillusage(struct map_session_data *sd, struct block_list *bl
if( sd == NULL || !skill_id )
return 0;
+ // Preserve auto-cast type if bAutoSpellOnSkill was triggered by a skill which was cast by Abracadabra, Improvised Song or an item.
+ enum autocast_type ac_type = sd->auto_cast_current.type;
+
for( i = 0; i < ARRAYLENGTH(sd->autospell3) && sd->autospell3[i].flag; i++ ) {
if( sd->autospell3[i].flag != skill_id )
continue;
@@ -2199,9 +2535,9 @@ static int skill_onskillusage(struct map_session_data *sd, struct block_list *bl
temp = (sd->autospell3[i].id > 0) ? sd->autospell3[i].id : -sd->autospell3[i].id;
- sd->state.autocast = 1;
+ sd->auto_cast_current.type = AUTOCAST_TEMP;
notok = skill->not_ok(temp, sd);
- sd->state.autocast = 0;
+ sd->auto_cast_current.type = AUTOCAST_NONE;
if ( notok )
continue;
@@ -2247,14 +2583,16 @@ static int skill_onskillusage(struct map_session_data *sd, struct block_list *bl
!battle->check_range(&sd->bl, tbl, skill->get_range2(&sd->bl, temp,skill_lv) + (temp == RG_CLOSECONFINE?0:1)) )
continue;
- sd->state.autocast = 1;
sd->autospell3[i].lock = true;
+ sd->auto_cast_current.type = AUTOCAST_TEMP;
skill->consume_requirement(sd,temp,skill_lv,1);
skill->castend_type(type, &sd->bl, tbl, temp, skill_lv, tick, 0);
+ sd->auto_cast_current.type = AUTOCAST_NONE;
sd->autospell3[i].lock = false;
- sd->state.autocast = 0;
}
+ sd->auto_cast_current.type = ac_type;
+
if (sd->autobonus3[0].rate) {
for( i = 0; i < ARRAYLENGTH(sd->autobonus3); i++ ) {
if( rnd()%1000 >= sd->autobonus3[i].rate )
@@ -2401,6 +2739,9 @@ static int skill_counter_additional_effect(struct block_list *src, struct block_
struct unit_data *ud;
int i, auto_skill_id, auto_skill_lv, type, notok;
+ // Preserve auto-cast type if bAutoSpellWhenHit was triggered during cast of a skill which was cast by Abracadabra, Improvised Song or an item.
+ enum autocast_type ac_type = dstsd->auto_cast_current.type;
+
for (i = 0; i < ARRAYLENGTH(dstsd->autospell2) && dstsd->autospell2[i].id; i++) {
if(!(dstsd->autospell2[i].flag&attack_type&BF_WEAPONMASK &&
@@ -2416,9 +2757,9 @@ static int skill_counter_additional_effect(struct block_list *src, struct block_
if (attack_type&BF_LONG)
rate>>=1;
- dstsd->state.autocast = 1;
+ dstsd->auto_cast_current.type = AUTOCAST_TEMP;
notok = skill->not_ok(auto_skill_id, dstsd);
- dstsd->state.autocast = 0;
+ dstsd->auto_cast_current.type = AUTOCAST_NONE;
if ( notok )
continue;
@@ -2459,10 +2800,11 @@ static int skill_counter_additional_effect(struct block_list *src, struct block_
if( !battle->check_range(src, tbl, skill->get_range2(src, auto_skill_id,auto_skill_lv) + (auto_skill_id == RG_CLOSECONFINE?0:1)) && battle_config.autospell_check_range )
continue;
- dstsd->state.autocast = 1;
+ dstsd->auto_cast_current.type = AUTOCAST_TEMP;
skill->consume_requirement(dstsd,auto_skill_id,auto_skill_lv,1);
skill->castend_type(type, bl, tbl, auto_skill_id, auto_skill_lv, tick, 0);
- dstsd->state.autocast = 0;
+ dstsd->auto_cast_current.type = AUTOCAST_NONE;
+
// Set canact delay. [Skotlex]
ud = unit->bl2ud(bl);
if (ud) {
@@ -2474,6 +2816,8 @@ static int skill_counter_additional_effect(struct block_list *src, struct block_
}
}
}
+
+ dstsd->auto_cast_current.type = ac_type;
}
//Autobonus when attacked
@@ -2626,11 +2970,11 @@ static int skill_strip_equip(struct block_list *bl, unsigned short where, int ra
/*=========================================================================
* Used to knock back players, monsters, traps, etc
* 'count' is the number of squares to knock back
- * 'direction' indicates the way OPPOSITE to the knockback direction (or -1 for default behavior)
+ * 'direction' indicates the way OPPOSITE to the knockback direction (or UNIT_DIR_UNDEFINED for default behavior)
* if 'flag&0x1', position update packets must not be sent.
* if 'flag&0x2', skill blown ignores players' special_state.no_knockback
*/
-static int skill_blown(struct block_list *src, struct block_list *target, int count, int8 dir, int flag)
+static int skill_blown(struct block_list *src, struct block_list *target, int count, enum unit_dir dir, int flag)
{
int dx = 0, dy = 0;
struct status_change *tsc = status->get_sc(target);
@@ -2672,10 +3016,10 @@ static int skill_blown(struct block_list *src, struct block_list *target, int co
break;
}
- if (dir == -1) // <optimized>: do the computation here instead of outside
+ if (dir == UNIT_DIR_UNDEFINED) // <optimized>: do the computation here instead of outside
dir = map->calc_dir(target, src->x, src->y); // direction from src to target, reversed
- if (dir >= 0 && dir < 8) {
+ if (dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX) {
// take the reversed 'direction' and reverse it
dx = -dirx[dir];
dy = -diry[dir];
@@ -2934,7 +3278,7 @@ static int skill_attack(int attack_type, struct block_list *src, struct block_li
}
//Skill hit type
- type=(skill_id==0)?BDT_SPLASH:skill->get_hit(skill_id);
+ type = (skill_id == 0) ? BDT_SPLASH : skill->get_hit(skill_id, skill_lv);
if(damage < dmg.div_
//Only skills that knockback even when they miss. [Skotlex]
@@ -3297,7 +3641,7 @@ static int skill_attack(int attack_type, struct block_list *src, struct block_li
//Only knockback if it's still alive, otherwise a "ghost" is left behind. [Skotlex]
//Reflected spells do not bounce back (bl == dsrc since it only happens for direct skills)
if (dmg.blewcount > 0 && bl!=dsrc && !status->isdead(bl)) {
- int8 dir = -1; // default
+ enum unit_dir dir = UNIT_DIR_UNDEFINED; // default
switch(skill_id) {//direction
case MG_FIREWALL:
case PR_SANCTUARY:
@@ -3310,13 +3654,13 @@ static int skill_attack(int attack_type, struct block_list *src, struct block_li
// This ensures the storm randomly pushes instead of exactly a cell backwards per official mechanics.
case WZ_STORMGUST:
if(!battle_config.stormgust_knockback)
- dir = rnd()%8;
+ dir = rnd() % UNIT_DIR_MAX;
break;
case WL_CRIMSONROCK:
dir = map->calc_dir(bl,skill->area_temp[4],skill->area_temp[5]);
break;
case MC_CARTREVOLUTION:
- dir = 6; // Official servers push target to the West
+ dir = UNIT_DIR_EAST; // Official servers push target to the West
break;
default:
dir = skill->attack_dir_unknown(&attack_type, src, dsrc, bl, &skill_id, &skill_lv, &tick, &flag);
@@ -3337,8 +3681,12 @@ static int skill_attack(int attack_type, struct block_list *src, struct block_li
case SR_KNUCKLEARROW:
if( skill->blown(dsrc,bl,dmg.blewcount,dir,0) && !(flag&4) ) {
short dir_x, dir_y;
- dir_x = dirx[(dir+4)%8];
- dir_y = diry[(dir+4)%8];
+ if (Assert_chk(dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX)) {
+ map->freeblock_unlock(); // unblock before assert-returning
+ return 0;
+ }
+ dir_x = dirx[unit_get_opposite_dir(dir)];
+ dir_y = diry[unit_get_opposite_dir(dir)];
if (map->getcell(bl->m, bl, bl->x + dir_x, bl->y + dir_y, CELL_CHKNOPASS) != 0)
skill->addtimerskill(src, tick + 300 * ((flag&2) ? 1 : 2), bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag|4);
}
@@ -3498,10 +3846,12 @@ static int skill_attack_copy_unknown(int *attack_type, struct block_list *src, s
static int skill_attack_dir_unknown(int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag)
{
- return -1;
+ return UNIT_DIR_UNDEFINED;
}
-static void skill_attack_blow_unknown(int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, int8 *dir)
+static void skill_attack_blow_unknown(int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl,
+ uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type,
+ struct Damage *dmg, int64 *damage, enum unit_dir *dir)
{
nullpo_retv(bl);
nullpo_retv(dmg);
@@ -3512,7 +3862,7 @@ static void skill_attack_blow_unknown(int *attack_type, struct block_list *src,
if (!dmg->blewcount && bl->type == BL_SKILL && *damage > 0){
struct skill_unit *su = BL_UCAST(BL_SKILL, bl);
if (su->group && su->group->skill_id == HT_BLASTMINE)
- skill->blown(src, bl, 3, -1, 0);
+ skill->blown(src, bl, 3, UNIT_DIR_UNDEFINED, 0);
}
}
@@ -3708,9 +4058,9 @@ static int skill_check_condition_mercenary(struct block_list *bl, int skill_id,
{
struct status_data *st;
struct map_session_data *sd = NULL;
- int i, hp, sp, hp_rate, sp_rate, state, mhp;
+ int hp, sp, hp_rate, sp_rate, state;
int idx;
- int itemid[MAX_SKILL_ITEM_REQUIRE], amount[MAX_SKILL_ITEM_REQUIRE], index[MAX_SKILL_ITEM_REQUIRE];
+ int itemid[MAX_SKILL_ITEM_REQUIRE], amount[MAX_SKILL_ITEM_REQUIRE];
if( lv < 1 || lv > MAX_SKILL_LEVEL )
return 0;
@@ -3726,17 +4076,16 @@ static int skill_check_condition_mercenary(struct block_list *bl, int skill_id,
return 0;
// Requirements
- for (i = 0; i < MAX_SKILL_ITEM_REQUIRE; i++) {
- itemid[i] = skill->dbs->db[idx].itemid[i];
- amount[i] = skill->dbs->db[idx].amount[i];
+ for (int i = 0; i < MAX_SKILL_ITEM_REQUIRE; i++) {
+ itemid[i] = skill->get_itemid(skill_id, i);
+ amount[i] = skill->get_itemqty(skill_id, i, lv);
}
hp = skill->dbs->db[idx].hp[lv-1];
sp = skill->dbs->db[idx].sp[lv-1];
hp_rate = skill->dbs->db[idx].hp_rate[lv-1];
sp_rate = skill->dbs->db[idx].sp_rate[lv-1];
- state = skill->dbs->db[idx].state;
- if( (mhp = skill->dbs->db[idx].mhp[lv-1]) > 0 )
- hp += (st->max_hp * mhp) / 100;
+ state = skill->dbs->db[idx].state[lv - 1];
+
if( hp_rate > 0 )
hp += (st->hp * hp_rate) / 100;
else
@@ -3769,6 +4118,20 @@ static int skill_check_condition_mercenary(struct block_list *bl, int skill_id,
clif->skill_fail(sd, skill_id, USESKILL_FAIL_SP_INSUFFICIENT, 0, 0);
return 0;
}
+
+ int mhp = skill->get_mhp(skill_id, lv);
+
+ if (mhp > 0 && get_percentage(st->hp, st->max_hp) > mhp) {
+ clif->skill_fail(sd, skill_id, USESKILL_FAIL_HP_INSUFFICIENT, 0, 0);
+ return 0;
+ }
+
+ int msp = skill->get_msp(skill_id, lv);
+
+ if (msp > 0 && get_percentage(st->sp, st->max_sp) > msp) {
+ clif->skill_fail(sd, skill_id, USESKILL_FAIL_SP_INSUFFICIENT, 0, 0);
+ return 0;
+ }
}
if( !type )
@@ -3783,23 +4146,32 @@ static int skill_check_condition_mercenary(struct block_list *bl, int skill_id,
if( !(type&1) )
return 1;
- // Check item existences
- for (i = 0; i < ARRAYLENGTH(itemid); i++) {
- index[i] = INDEX_NOT_FOUND;
- if (itemid[i] < 1) continue; // No item
- index[i] = pc->search_inventory(sd, itemid[i]);
- if (index[i] == INDEX_NOT_FOUND || sd->status.inventory[index[i]].amount < amount[i]) {
- clif->skill_fail(sd, skill_id, USESKILL_FAIL_NEED_ITEM, amount[i], itemid[i]);
- return 0;
- }
- }
+ bool items_required = skill->items_required(sd, skill_id, lv);
+
+ if (items_required && skill->check_condition_required_items(sd, skill_id, lv) != 0)
+ return 0;
- // Consume items
- for (i = 0; i < ARRAYLENGTH(itemid); i++) {
- if (index[i] != INDEX_NOT_FOUND)
- pc->delitem(sd, index[i], amount[i], 0, DELITEM_SKILLUSE, LOG_TYPE_CONSUME);
+ int any_item_index = INDEX_NOT_FOUND;
+
+ if (items_required)
+ any_item_index = skill->get_any_item_index(sd, skill_id, lv);
+
+ for (int i = 0; i < MAX_SKILL_ITEM_REQUIRE && items_required; i++) {
+ if (itemid[i] == 0)
+ continue;
+
+ if (any_item_index != INDEX_NOT_FOUND && any_item_index != i)
+ continue;
+
+ int inventory_index = pc->search_inventory(sd, itemid[i]);
+
+ if (inventory_index != INDEX_NOT_FOUND)
+ pc->delitem(sd, inventory_index, amount[i], 0, DELITEM_SKILLUSE, LOG_TYPE_CONSUME);
}
+ if (skill->check_condition_required_equip(sd, skill_id, lv) != 0)
+ return 0;
+
if( type&2 )
return 1;
@@ -3887,7 +4259,7 @@ static int skill_timerskill(int tid, int64 tick, int id, intptr_t data)
clif->skill_nodamage(src,target,skl->skill_id,skl->skill_lv,1);
break;
case WZ_WATERBALL:
- skill->toggle_magicpower(src, skl->skill_id); // only the first hit will be amplify
+ skill->toggle_magicpower(src, skl->skill_id, skl->skill_lv); // only the first hit will be amplify
if (!status->isdead(target))
skill->attack(BF_MAGIC,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag);
if (skl->type>1 && !status->isdead(target) && !status->isdead(src)) {
@@ -3907,7 +4279,7 @@ static int skill_timerskill(int tid, int64 tick, int id, intptr_t data)
**/
case WL_CHAINLIGHTNING_ATK:
skill->attack(BF_MAGIC, src, src, target, skl->skill_id, skl->skill_lv, tick, (9-skl->type)); // Hit a Lightning on the current Target
- skill->toggle_magicpower(src, skl->skill_id); // only the first hit will be amplify
+ skill->toggle_magicpower(src, skl->skill_id, skl->skill_lv); // only the first hit will be amplify
if (skl->type < (4 + skl->skill_lv - 1) && skl->x < 3) {
// Remaining Chains Hit
@@ -3927,7 +4299,7 @@ static int skill_timerskill(int tid, int64 tick, int id, intptr_t data)
case WL_TETRAVORTEX_GROUND:
clif->skill_nodamage(src, target, skl->skill_id, skl->skill_lv, 1);
skill->attack(BF_MAGIC, src, src, target, skl->skill_id, skl->skill_lv, tick, skl->flag);
- skill->toggle_magicpower(src, skl->skill_id); // only the first hit will be amplify
+ skill->toggle_magicpower(src, skl->skill_id, skl->skill_lv); // only the first hit will be amplify
if( skl->type == 4 ){
const enum sc_type scs[] = { SC_BURNING, SC_BLOODING, SC_FROSTMISTY, SC_STUN }; // status inflicts are depend on what summoned element is used.
int rate = skl->y, index = skl->x-1;
@@ -3936,7 +4308,7 @@ static int skill_timerskill(int tid, int64 tick, int id, intptr_t data)
break;
case WM_REVERBERATION_MELEE:
case WM_REVERBERATION_MAGIC:
- skill->attack(skill->get_type(skl->skill_id),src, src, target, skl->skill_id, skl->skill_lv, 0, SD_LEVEL);
+ skill->attack(skill->get_type(skl->skill_id, skl->skill_lv), src, src, target, skl->skill_id, skl->skill_lv, 0, SD_LEVEL);
break;
case SC_FATALMENACE:
if( src == target ) // Casters Part
@@ -4041,7 +4413,7 @@ static int skill_timerskill(int tid, int64 tick, int id, intptr_t data)
case LG_OVERBRAND_BRANDISH:
skill->area_temp[1] = 0;
map->foreachinpath(skill->attack_area,src->m,src->x,src->y,skl->x,skl->y,4,2,BL_CHAR,
- skill->get_type(skl->skill_id),src,src,skl->skill_id,skl->skill_lv,tick,skl->flag,BCT_ENEMY);
+ skill->get_type(skl->skill_id, skl->skill_lv), src, src, skl->skill_id, skl->skill_lv, tick, skl->flag, BCT_ENEMY);
break;
default:
skill->timerskill_notarget_unknown(tid, tick, src, ud, skl);
@@ -4190,11 +4562,6 @@ static void skill_castend_type(int type, struct block_list *src, struct block_li
skill->castend_damage_id(src, bl, skill_id, skill_lv, tick, flag);
break;
}
-
- struct map_session_data *sd = BL_CAST(BL_PC, src);
-
- if (sd != NULL)
- pc->itemskill_clear(sd);
}
/*==========================================
@@ -4223,12 +4590,12 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
if (status->isdead(bl))
return 1;
- if (skill_id && skill->get_type(skill_id) == BF_MAGIC && status->isimmune(bl) == 100) {
+ if (skill_id != 0 && skill->get_type(skill_id, skill_lv) == BF_MAGIC && status->isimmune(bl) == 100) {
//GTB makes all targeted magic display miss with a single bolt.
sc_type sct = status->skill2sc(skill_id);
if(sct != SC_NONE)
status_change_end(bl, sct, INVALID_TIMER);
- clif->skill_damage(src, bl, tick, status_get_amotion(src), status_get_dmotion(bl), 0, 1, skill_id, skill_lv, skill->get_hit(skill_id));
+ clif->skill_damage(src, bl, tick, status_get_amotion(src), status_get_dmotion(bl), 0, 1, skill_id, skill_lv, skill->get_hit(skill_id, skill_lv));
return 1;
}
@@ -4406,7 +4773,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
case KN_CHARGEATK: {
bool path_exists = path->search_long(NULL, src, src->m, src->x, src->y, bl->x, bl->y,CELL_CHKWALL);
unsigned int dist = distance_bl(src, bl);
- uint8 dir = map->calc_dir(bl, src->x, src->y);
+ enum unit_dir dir = map->calc_dir(bl, src->x, src->y);
// teleport to target (if not on WoE grounds)
if( !map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground && unit->movepos(src, bl->x, bl->y, 0, 1) )
@@ -4418,7 +4785,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
skill->blown(src, bl, dist, dir, 0);
//HACK: since knockback officially defaults to the left, the client also turns to the left... therefore,
// make the caster look in the direction of the target
- unit->setdir(src, (dir+4)%8);
+ unit->set_dir(src, unit_get_opposite_dir(dir));
}
}
@@ -4436,7 +4803,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
skill->area_temp[1] = bl->id;
map->foreachinpath(skill->attack_area,src->m,src->x,src->y,bl->x,bl->y,
skill->get_splash(skill_id, skill_lv),skill->get_maxcount(skill_id,skill_lv), skill->splash_target(src),
- skill->get_type(skill_id),src,src,skill_id,skill_lv,tick,flag,BCT_ENEMY);
+ skill->get_type(skill_id, skill_lv), src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY);
break;
case NPC_ACIDBREATH:
@@ -4447,7 +4814,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
skill->area_temp[1] = bl->id;
map->foreachinpath(skill->attack_area,src->m,src->x,src->y,bl->x,bl->y,
skill->get_splash(skill_id, skill_lv),skill->get_maxcount(skill_id,skill_lv), skill->splash_target(src),
- skill->get_type(skill_id),src,src,skill_id,skill_lv,tick,flag,BCT_ENEMY);
+ skill->get_type(skill_id, skill_lv), src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY);
break;
case MO_INVESTIGATE:
@@ -4457,12 +4824,13 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
case RG_BACKSTAP:
{
- uint8 dir = map->calc_dir(src, bl->x, bl->y), t_dir = unit->getdir(bl);
- if ((!check_distance_bl(src, bl, 0) && !map->check_dir(dir, t_dir)) || bl->type == BL_SKILL) {
+ enum unit_dir dir = map->calc_dir(src, bl->x, bl->y);
+ enum unit_dir t_dir = unit->getdir(bl);
+ if ((!check_distance_bl(src, bl, 0) && map->check_dir(dir, t_dir) == 0) || bl->type == BL_SKILL) {
status_change_end(src, SC_HIDING, INVALID_TIMER);
skill->attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag);
- dir = dir < 4 ? dir+4 : dir-4; // change direction [Celest]
- unit->setdir(bl,dir);
+ dir = unit_get_opposite_dir(dir); // change direction [Celest]
+ unit->set_dir(bl, dir);
}
else if (sd)
clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
@@ -4489,7 +4857,6 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
{
short x, y, i = 2; // Move 2 cells for Issen(from target)
struct block_list *mbl = bl;
- short dir = 0;
skill->attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
@@ -4511,13 +4878,13 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
status->set_hp(src, 1, STATUS_HEAL_DEFAULT);
#endif // RENEWAL
}
- dir = map->calc_dir(src,bl->x,bl->y);
- if( dir > 0 && dir < 4) x = -i;
- else if( dir > 4 ) x = i;
- else x = 0;
- if( dir > 2 && dir < 6 ) y = -i;
- else if( dir == 7 || dir < 2 ) y = i;
- else y = 0;
+ enum unit_dir dir = map->calc_dir(src, bl->x, bl->y);
+ if (Assert_chk(dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX)) {
+ map->freeblock_unlock(); // unblock before assert-returning
+ return 0;
+ }
+ x = i * dirx[dir];
+ y = i * diry[dir];
if ((mbl == src || (!map_flag_gvg2(src->m) && !map->list[src->m].flag.battleground))) { // only NJ_ISSEN don't have slide effect in GVG
if (!(unit->movepos(src, mbl->x+x, mbl->y+y, 1, 1))) {
// The cell is not reachable (wall, object, ...), move next to the target
@@ -4619,7 +4986,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
if ( tsc && tsc->data[SC_HOVERING] && ( skill_id == SR_WINDMILL || skill_id == LG_MOONSLASHER ) )
break;
- heal = skill->attack(skill->get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, sflag);
+ heal = skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, sflag);
if (skill_id == NPC_VAMPIRE_GIFT && heal > 0) {
clif->skill_nodamage(NULL, src, AL_HEAL, heal, 1);
status->heal(src, heal, 0, STATUS_HEAL_DEFAULT);
@@ -4694,7 +5061,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
case MS_MAGNUM:
if( flag&1 ) {
//Damage depends on distance, so add it to flag if it is > 1
- skill->attack(skill->get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag|SD_ANIMATION|distance_bl(src, bl));
+ skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag|SD_ANIMATION|distance_bl(src, bl));
}
break;
@@ -4702,9 +5069,9 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
case ML_BRANDISH:
//Coded apart for it needs the flag passed to the damage calculation.
if (skill->area_temp[1] != bl->id)
- skill->attack(skill->get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag|SD_ANIMATION);
+ skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag|SD_ANIMATION);
else
- skill->attack(skill->get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
+ skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag);
break;
case KN_BOWLINGBASH:
@@ -4744,12 +5111,12 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
if(idb_exists(skill->bowling_db, bl->id))
break;
// Random direction
- dir = rnd()%8;
+ dir = rnd() % UNIT_DIR_MAX;
} else {
// Create an empty list of already hit targets
db_clear(skill->bowling_db);
// Direction is walkpath
- dir = (unit->getdir(src)+4)%8;
+ dir = unit_get_opposite_dir(unit->getdir(src));
}
// Add current target to the list of already hit targets
idb_put(skill->bowling_db, bl->id, bl);
@@ -4758,6 +5125,10 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
ty = bl->y;
for(i=0;i<c;i++) {
// Target coordinates (get changed even if knockback fails)
+ if (Assert_chk(dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX)) {
+ map->freeblock_unlock(); // unblock before assert-returning
+ return 0;
+ }
tx -= dirx[dir];
ty -= diry[dir];
// If target cell is a wall then break
@@ -4786,18 +5157,24 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
if (bl->id==skill->area_temp[1])
break;
if (skill->attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,SD_ANIMATION))
- skill->blown(src,bl,skill->area_temp[2],-1,0);
+ skill->blown(src, bl, skill->area_temp[2], UNIT_DIR_UNDEFINED, 0);
} else {
- int x=bl->x,y=bl->y,i,dir;
- dir = map->calc_dir(bl,src->x,src->y);
+ int x = bl->x;
+ int y = bl->y;
+ int i;
+ enum unit_dir dir = map->calc_dir(bl, src->x, src->y);
skill->area_temp[1] = bl->id;
skill->area_temp[2] = skill->get_blewcount(skill_id,skill_lv);
// all the enemies between the caster and the target are hit, as well as the target
if (skill->attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,0))
- skill->blown(src,bl,skill->area_temp[2],-1,0);
+ skill->blown(src, bl, skill->area_temp[2], UNIT_DIR_UNDEFINED, 0);
for (i=0;i<4;i++) {
map->foreachincell(skill->area_sub,bl->m,x,y,BL_CHAR,src,skill_id,skill_lv,
tick,flag|BCT_ENEMY|1,skill->castend_damage_id);
+ if (Assert_chk(dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX)) {
+ map->freeblock_unlock(); // unblock before assert-returning
+ return 0;
+ }
x += dirx[dir];
y += diry[dir];
}
@@ -4954,7 +5331,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
if( (tsc = status->get_sc(bl)) && (tsc->data[SC_HIDING] )) {
clif->skill_nodamage(src,src,skill_id,skill_lv,1);
} else
- skill->attack(BF_MISC,src,src,bl,skill_id,skill_lv,tick,flag);
+ skill->attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
}
break;
case NPC_SELFDESTRUCTION: {
@@ -5019,7 +5396,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
if(rnd()%100 < (10 + 3*skill_lv)) {
if( !sd || pc->checkskill(sd,KN_SPEARBOOMERANG) == 0 )
break; // Spear Boomerang auto cast chance only works if you have mastered Spear Boomerang.
- skill->blown(src,bl,6,-1,0);
+ skill->blown(src, bl, 6, UNIT_DIR_UNDEFINED, 0);
skill->addtimerskill(src,tick+800,bl->id,0,0,skill_id,skill_lv,BF_WEAPON,flag);
skill->castend_damage_id(src,bl,KN_SPEARBOOMERANG,1,tick,0);
}
@@ -5027,7 +5404,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
case RK_PHANTOMTHRUST:
{
struct map_session_data *tsd = BL_CAST(BL_PC, bl);
- unit->setdir(src,map->calc_dir(src, bl->x, bl->y));
+ unit->set_dir(src, map->calc_dir(src, bl->x, bl->y));
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
skill->blown(src,bl,distance_bl(src,bl)-1,unit->getdir(src),0);
@@ -5041,16 +5418,13 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
case KO_JYUMONJIKIRI:
case GC_DARKILLUSION:
{
- short x, y;
- short dir = map->calc_dir(bl, src->x, src->y);
-
- if ( dir < 4 ) {
- x = bl->x + 2 * (dir > 0) - 3 * (dir > 0);
- y = bl->y + 1 - (dir / 2) - (dir > 2);
- } else {
- x = bl->x + 2 * (dir > 4) - 1 * (dir > 4);
- y = bl->y + (dir / 6) - 1 + (dir > 6);
+ enum unit_dir dir = map->calc_dir(bl, src->x, src->y);
+ if (Assert_chk(dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX)) {
+ map->freeblock_unlock(); // unblock before assert-returning
+ return 0;
}
+ short x = bl->x + dirx[dir];
+ short y = bl->y + diry[dir];
if ( unit->movepos(src, x, y, 1, 1) ) {
clif->slide(src, x, y);
@@ -5092,7 +5466,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
break;
case WL_DRAINLIFE:
{
- int heal = skill->attack(skill->get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
+ int heal = skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag);
int rate = 70 + 5 * skill_lv;
heal = heal * (5 + 5 * skill_lv) / 100;
@@ -5138,7 +5512,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
if (sd) {
int i;
clif->skill_nodamage(src, bl, skill_id, skill_lv, 1);
- skill->toggle_magicpower(src, skill_id);
+ skill->toggle_magicpower(src, skill_id, skill_lv);
// Priority is to release SpellBook
if (sc && sc->data[SC_READING_SB]) {
// SpellBook
@@ -5207,14 +5581,16 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
skill->attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag|ELE_DARK);
break;
case RA_WUGSTRIKE:
- if( sd && pc_isridingwug(sd) ){
- short x[8]={0,-1,-1,-1,0,1,1,1};
- short y[8]={1,1,0,-1,-1,-1,0,1};
- uint8 dir = map->calc_dir(bl, src->x, src->y);
-
- if( unit->movepos(src, bl->x+x[dir], bl->y+y[dir], 1, 1) )
- {
- clif->slide(src, bl->x+x[dir], bl->y+y[dir]);
+ if (sd != NULL && pc_isridingwug(sd)) {
+ enum unit_dir dir = map->calc_dir(bl, src->x, src->y);
+ if (Assert_chk(dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX)) {
+ map->freeblock_unlock(); // unblock before assert-returning
+ return 0;
+ }
+ short x = bl->x + dirx[dir];
+ short y = bl->y + diry[dir];
+ if (unit->movepos(src, x, y, 1, 1) != 0) {
+ clif->slide(src, x, y);
clif->fixpos(src);
skill->attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag);
}
@@ -5380,7 +5756,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
{
struct status_change *tsc = status->get_sc(bl);
if( tsc && tsc->data[SC_POISON] ) {
- skill->attack(skill->get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
+ skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag);
status_change_end(bl, SC_POISON, INVALID_TIMER);
} else if( sd )
clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
@@ -5402,7 +5778,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
case EL_HURRICANE:
case EL_TYPOON_MIS:
if( flag&1 )
- skill->attack(skill->get_type(skill_id+1),src,src,bl,skill_id+1,skill_lv,tick,flag);
+ skill->attack(skill->get_type(skill_id + 1, skill_lv), src, src, bl, skill_id + 1, skill_lv, tick, flag);
else {
int i = skill->get_splash(skill_id,skill_lv);
clif->skill_nodamage(src,battle->get_master(src),skill_id,skill_lv,1);
@@ -5410,7 +5786,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
if( rnd()%100 < 30 )
map->foreachinrange(skill->area_sub,bl,i,BL_CHAR,src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill->castend_damage_id);
else
- skill->attack(skill->get_type(skill_id),src,src,bl,skill_id,skill_lv,tick,flag);
+ skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag);
}
break;
@@ -5425,7 +5801,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
case EL_STONE_RAIN:
if( flag&1 )
- skill->attack(skill->get_type(skill_id),src,src,bl,skill_id,skill_lv,tick,flag);
+ skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag);
else {
int i = skill->get_splash(skill_id,skill_lv);
clif->skill_nodamage(src,battle->get_master(src),skill_id,skill_lv,1);
@@ -5433,7 +5809,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
if( rnd()%100 < 30 )
map->foreachinrange(skill->area_sub,bl,i,BL_CHAR,src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill->castend_damage_id);
else
- skill->attack(skill->get_type(skill_id),src,src,bl,skill_id,skill_lv,tick,flag);
+ skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag);
}
break;
@@ -5443,7 +5819,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
case EL_STONE_HAMMER:
clif->skill_nodamage(src,battle->get_master(src),skill_id,skill_lv,1);
clif->skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, BDT_SKILL);
- skill->attack(skill->get_type(skill_id),src,src,bl,skill_id,skill_lv,tick,flag);
+ skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag);
break;
case EL_TIDAL_WEAPON:
@@ -5460,7 +5836,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
elemental->clean_single_effect(ele, skill_id);
}
if( rnd()%100 < 50 )
- skill->attack(skill->get_type(skill_id),src,src,bl,skill_id,skill_lv,tick,flag);
+ skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag);
else {
sc_start(src, src,type2,100,skill_lv,skill->get_time(skill_id,skill_lv));
sc_start(src, battle->get_master(src),type,100,ele->bl.id,skill->get_time(skill_id,skill_lv));
@@ -5473,7 +5849,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
case MH_MAGMA_FLOW:
case MH_HEILIGE_STANGE:
if(flag & 1)
- skill->attack(skill->get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
+ skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag);
else {
map->foreachinrange(skill->area_sub, bl, skill->get_splash(skill_id, skill_lv), skill->splash_target(src), src, skill_id, skill_lv, tick, flag | BCT_ENEMY | SD_SPLASH | 1, skill->castend_damage_id);
}
@@ -5497,7 +5873,7 @@ static int skill_castend_damage_id(struct block_list *src, struct block_list *bl
break;
case SU_SV_STEMSPEAR:
- skill->attack(skill->get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
+ skill->attack(skill->get_type(skill_id, skill_lv), src, src, bl, skill_id, skill_lv, tick, flag);
if (status->get_lv(src) >= 30 && (rnd() % 100 < (int)(status->get_lv(src) / 30) + 10)) // TODO: Need activation chance.
skill->addtimerskill(src, tick + skill->get_delay(skill_id, skill_lv), bl->id, 0, 0, skill_id, skill_lv, (skill_id == SU_SV_STEMSPEAR) ? BF_MAGIC : BF_WEAPON, flag);
break;
@@ -5557,7 +5933,7 @@ static bool skill_castend_damage_id_unknown(struct block_list *src, struct block
ShowWarning("skill_castend_damage_id: Unknown skill used:%d\n", *skill_id);
clif->skill_damage(src, bl, *tick, status_get_amotion(src), tstatus->dmotion,
0, abs(skill->get_num(*skill_id, *skill_lv)),
- *skill_id, *skill_lv, skill->get_hit(*skill_id));
+ *skill_id, *skill_lv, skill->get_hit(*skill_id, *skill_lv));
map->freeblock_unlock();
return true;
}
@@ -5657,8 +6033,9 @@ static int skill_castend_id(int tid, int64 tick, int id, intptr_t data)
}
if(ud->skill_id == RG_BACKSTAP) {
- uint8 dir = map->calc_dir(src,target->x,target->y),t_dir = unit->getdir(target);
- if(check_distance_bl(src, target, 0) || map->check_dir(dir,t_dir)) {
+ enum unit_dir dir = map->calc_dir(src, target->x, target->y);
+ enum unit_dir t_dir = unit->getdir(target);
+ if (check_distance_bl(src, target, 0) || map->check_dir(dir, t_dir) != 0) {
break;
}
}
@@ -5775,7 +6152,7 @@ static int skill_castend_id(int tid, int64 tick, int id, intptr_t data)
if (ud->walktimer != INVALID_TIMER && ud->skill_id != TK_RUN && ud->skill_id != RA_WUGDASH)
unit->stop_walking(src, STOPWALKING_FLAG_FIXPOS);
- if( !sd || sd->skillitem != ud->skill_id || skill->get_delay(ud->skill_id,ud->skill_lv) )
+ if (sd == NULL || sd->auto_cast_current.skill_id != ud->skill_id || skill->get_delay(ud->skill_id, ud->skill_lv) != 0)
ud->canact_tick = tick + skill->delay_fix(src, ud->skill_id, ud->skill_lv); // Tests show wings don't overwrite the delay but skill scrolls do. [Inkfish]
if (sd) { // Cooldown application
int i, cooldown = skill->get_cooldown(ud->skill_id, ud->skill_lv);
@@ -5808,7 +6185,7 @@ static int skill_castend_id(int tid, int64 tick, int id, intptr_t data)
break;
}
}
- if (skill->get_state(ud->skill_id) != ST_MOVE_ENABLE)
+ if (skill->get_state(ud->skill_id, ud->skill_lv) != ST_MOVE_ENABLE)
unit->set_walkdelay(src, tick, battle_config.default_walk_delay+skill->get_walkdelay(ud->skill_id, ud->skill_lv), 1);
if(battle_config.skill_log && battle_config.skill_log&src->type)
@@ -5818,7 +6195,7 @@ static int skill_castend_id(int tid, int64 tick, int id, intptr_t data)
map->freeblock_lock();
// SC_MAGICPOWER needs to switch states before any damage is actually dealt
- skill->toggle_magicpower(src, ud->skill_id);
+ skill->toggle_magicpower(src, ud->skill_id, ud->skill_lv);
#if 0 // On aegis damage skills are also increase by camouflage. Need confirmation on kRO.
if( ud->skill_id != RA_CAMOUFLAGE ) // only normal attack and auto cast skills benefit from its bonuses
@@ -5843,8 +6220,10 @@ static int skill_castend_id(int tid, int64 tick, int id, intptr_t data)
skill->blockpc_start(sd,BD_ADAPTATION,3000);
}
- if( sd && ud->skill_id != SA_ABRACADABRA && ud->skill_id != WM_RANDOMIZESPELL ) // they just set the data so leave it as it is.[Inkfish]
- sd->skillitem = sd->skillitemlv = 0;
+ if (sd != NULL && ud->skill_id != SA_ABRACADABRA && ud->skill_id != WM_RANDOMIZESPELL
+ && ud->skill_id == sd->auto_cast_current.skill_id) { // they just set the data so leave it as it is.[Inkfish]
+ pc->autocast_remove(sd, sd->auto_cast_current.type, ud->skill_id, ud->skill_lv);
+ }
if (ud->skilltimer == INVALID_TIMER) {
if(md) md->skill_idx = -1;
@@ -5854,7 +6233,7 @@ static int skill_castend_id(int tid, int64 tick, int id, intptr_t data)
// Asura Strike caster doesn't look to their target in the end
if (src->id != target->id && !is_asura)
- unit->setdir(src, map->calc_dir(src, target->x, target->y));
+ unit->set_dir(src, map->calc_dir(src, target->x, target->y));
map->freeblock_unlock();
return 1;
@@ -5877,25 +6256,13 @@ static int skill_castend_id(int tid, int64 tick, int id, intptr_t data)
}
if (target && target->m == src->m) {
//Move character to target anyway.
- int dir, x, y;
+ enum unit_dir dir = map->calc_dir(src, target->x, target->y);
+ Assert_ret(dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX);
int dist = 3; // number of cells that asura caster will walk
+ int x = dist * dirx[dir];
+ int y = dist * diry[dir];
- dir = map->calc_dir(src,target->x,target->y);
- if (dir > 0 && dir < 4)
- x = -dist;
- else if (dir > 4)
- x = dist;
- else
- x = 0;
-
- if (dir > 2 && dir < 6)
- y = -dist;
- else if (dir == 7 || dir < 2)
- y = dist;
- else
- y = 0;
-
- if (unit->movepos(src, src->x + x, src->y + y, 1, 1) == 1) {
+ if (unit->movepos(src, src->x + x, src->y + y, 1, 1) != 0) {
//Display movement + animation.
clif->slide(src, src->x, src->y);
clif->spiritball(src);
@@ -5905,16 +6272,20 @@ static int skill_castend_id(int tid, int64 tick, int id, intptr_t data)
}
}
- if( !sd || sd->skillitem != ud->skill_id || skill->get_delay(ud->skill_id,ud->skill_lv) )
+ if (sd == NULL || sd->auto_cast_current.skill_id != ud->skill_id || skill->get_delay(ud->skill_id, ud->skill_lv) != 0)
ud->canact_tick = tick;
- ud->skill_id = ud->skill_lv = ud->skilltarget = 0;
//You can't place a skill failed packet here because it would be
//sent in ALL cases, even cases where skill_check_condition fails
//which would lead to double 'skill failed' messages u.u [Skotlex]
- if(sd)
- sd->skillitem = sd->skillitemlv = 0;
+ if (sd != NULL && ud->skill_id == sd->auto_cast_current.skill_id)
+ pc->autocast_remove(sd, sd->auto_cast_current.type, ud->skill_id, ud->skill_lv);
else if(md)
md->skill_idx = -1;
+
+ ud->skill_id = 0;
+ ud->skill_lv = 0;
+ ud->skilltarget = 0;
+
return 0;
}
@@ -6096,7 +6467,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
if (skill->castend_nodamage_id_undead_unknown(src, bl, &skill_id, &skill_lv, &tick, &flag))
{
//Skill is actually ground placed.
- if (src == bl && skill->get_unit_id(skill_id,0))
+ if (src == bl && skill->get_unit_id(skill_id, skill_lv, 0) != 0)
return skill->castend_pos2(src,bl->x,bl->y,skill_id,skill_lv,tick,0);
}
break;
@@ -6294,9 +6665,12 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
if (sd) {
// player-casted
- sd->state.abra_flag = 1;
- sd->skillitem = abra_skill_id;
- sd->skillitemlv = abra_skill_lv;
+ pc->autocast_clear(sd);
+ sd->auto_cast_current.type = AUTOCAST_ABRA;
+ sd->auto_cast_current.skill_id = abra_skill_id;
+ sd->auto_cast_current.skill_lv = abra_skill_lv;
+ VECTOR_ENSURE(sd->auto_cast, 1, 1);
+ VECTOR_PUSH(sd->auto_cast, sd->auto_cast_current);
clif->item_skill(sd, abra_skill_id, abra_skill_lv);
} else {
// mob-casted
@@ -7344,7 +7718,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
int rate = 100 * (100 - (tstatus->int_ / 2 + tstatus->vit / 3 + tstatus->luk / 10));
int duration = skill->get_time2(skill_id, skill_lv);
- duration *= (100 - (tstatus->int_ + tstatus->vit) / 2) / 100;
+ duration = duration * (100 - (tstatus->int_ + tstatus->vit) / 2) / 100;
status->change_start(src, bl, SC_BLIND, rate, 1, 0, 0, 0, duration, SCFLAG_NONE);
}
@@ -7425,7 +7799,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
map->freeblock_unlock();
return 1;
}
- if( sd->skillitem != skill_id )
+ if (sd->auto_cast_current.type == AUTOCAST_NONE)
status_zap(src, 0, skill->get_sp(skill_id, skill_lv)); // consume sp only if succeeded
}
break;
@@ -7462,7 +7836,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
break;
}
- if( sd->state.autocast || ( (sd->skillitem == AL_TELEPORT || battle_config.skip_teleport_lv1_menu) && skill_lv == 1 ) || skill_lv == 3 )
+ if (sd->auto_cast_current.type == AUTOCAST_TEMP || ((sd->auto_cast_current.skill_id == AL_TELEPORT || battle_config.skip_teleport_lv1_menu) && skill_lv == 1) || skill_lv == 3)
{
if( skill_lv == 1 )
pc->randomwarp(sd,CLR_TELEPORT);
@@ -7603,7 +7977,14 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
}
if( sd ) {
int bonus = 100, potion = min(500+skill_lv,505);
- int item_idx = (skill_lv - 1) % MAX_SKILL_ITEM_REQUIRE;
+ int item_idx = skill->get_item_index(skill_id, skill_lv);
+
+ if (item_idx == INDEX_NOT_FOUND) {
+ clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
+ map->freeblock_unlock();
+ return 1;
+ }
+
int item_id = skill->get_itemid(skill_id, item_idx);
int inventory_idx = pc->search_inventory(sd, item_id);
if (inventory_idx == INDEX_NOT_FOUND || item_id <= 0) {
@@ -7611,7 +7992,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
map->freeblock_unlock();
return 1;
}
- if (sd->inventory_data[inventory_idx] == NULL || sd->status.inventory[inventory_idx].amount < skill->get_itemqty(skill_id, item_idx)) {
+ if (sd->inventory_data[inventory_idx] == NULL || sd->status.inventory[inventory_idx].amount < skill->get_itemqty(skill_id, item_idx, skill_lv)) {
clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
map->freeblock_unlock();
return 1;
@@ -7835,7 +8216,9 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
case TK_HIGHJUMP:
{
- int x,y, dir = unit->getdir(src);
+ int x;
+ int y;
+ enum unit_dir dir = unit->getdir(src);
//Fails on noteleport maps, except for GvG and BG maps [Skotlex]
if( map->list[src->m].flag.noteleport
@@ -8084,11 +8467,19 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
case NPC_RUN:
{
- const int mask[8][2] = {{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1}};
- uint8 dir = (bl == src)?unit->getdir(src):map->calc_dir(src,bl->x,bl->y); //If cast on self, run forward, else run away.
+ enum unit_dir dir;
+ if (bl == src) //If cast on self, run forward, else run away.
+ dir = unit->getdir(src);
+ else
+ dir = map->calc_dir(src, bl->x, bl->y);
+ if (Assert_chk(dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX)) {
+ map->freeblock_unlock(); // unblock before assert-returning
+ return 0;
+ }
unit->stop_attack(src);
//Run skillv tiles overriding the can-move check.
- if (unit->walktoxy(src, src->x + skill_lv * mask[dir][0], src->y + skill_lv * mask[dir][1], 2) && md)
+ if (unit->walk_toxy(src, src->x + skill_lv * -dirx[dir], src->y + skill_lv * -diry[dir], 2) == 0
+ && md != NULL)
md->state.skillstate = MSS_WALK; //Otherwise it isn't updated in the AI.
}
break;
@@ -8229,7 +8620,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
if (nameid > 0) {
int success;
struct item item_tmp = { 0 };
- int amount = skill->get_itemqty(su->group->skill_id, i);
+ int amount = skill->get_itemqty(su->group->skill_id, i, skill_lv);
item_tmp.nameid = nameid;
item_tmp.identify = 1;
if ((success = pc->additem(sd, &item_tmp, amount, LOG_TYPE_SKILL)) != 0) {
@@ -9449,7 +9840,9 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
case NC_F_SIDESLIDE:
case NC_B_SIDESLIDE:
{
- uint8 dir = (skill_id == NC_F_SIDESLIDE) ? (unit->getdir(src)+4)%8 : unit->getdir(src);
+ enum unit_dir dir = unit->getdir(src);
+ if (skill_id == NC_F_SIDESLIDE)
+ dir = unit_get_opposite_dir(dir);
skill->blown(src,bl,skill->get_blewcount(skill_id,skill_lv),dir,0);
clif->slide(src,src->x,src->y);
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
@@ -10024,9 +10417,12 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
clif->skill_nodamage (src, bl, skill_id, skill_lv, 1);
if (sd != NULL) {
- sd->state.abra_flag = 2;
- sd->skillitem = improv_skill_id;
- sd->skillitemlv = improv_skill_lv;
+ pc->autocast_clear(sd);
+ sd->auto_cast_current.type = AUTOCAST_IMPROVISE;
+ sd->auto_cast_current.skill_id = improv_skill_id;
+ sd->auto_cast_current.skill_lv = improv_skill_lv;
+ VECTOR_ENSURE(sd->auto_cast, 1, 1);
+ VECTOR_PUSH(sd->auto_cast, sd->auto_cast_current);
clif->item_skill(sd, improv_skill_id, improv_skill_lv);
} else {
struct unit_data *ud = unit->bl2ud(src);
@@ -10419,7 +10815,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
case KO_KAZEHU_SEIRAN:
case KO_DOHU_KOUKAI:
if(sd) {
- int ttype = skill->get_ele(skill_id, skill_lv);
+ enum spirit_charm_types ttype = skill->get_ele(skill_id, skill_lv);
clif->skill_nodamage(src, bl, skill_id, skill_lv, 1);
pc->add_charm(sd, skill->get_time(skill_id, skill_lv), MAX_SPIRITCHARM, ttype); // replace existing charms of other type
}
@@ -10795,7 +11191,7 @@ static int skill_castend_pos(int tid, int64 tick, int id, intptr_t data)
if (ud->walktimer != INVALID_TIMER)
unit->stop_walking(src, STOPWALKING_FLAG_FIXPOS);
- if( !sd || sd->skillitem != ud->skill_id || skill->get_delay(ud->skill_id,ud->skill_lv) )
+ if (sd == NULL || sd->auto_cast_current.skill_id != ud->skill_id || skill->get_delay(ud->skill_id, ud->skill_lv) != 0)
ud->canact_tick = tick + skill->delay_fix(src, ud->skill_id, ud->skill_lv);
if (sd) { //Cooldown application
int i, cooldown = skill->get_cooldown(ud->skill_id, ud->skill_lv);
@@ -10824,10 +11220,10 @@ static int skill_castend_pos(int tid, int64 tick, int id, intptr_t data)
map->freeblock_lock();
skill->castend_pos2(src,ud->skillx,ud->skilly,ud->skill_id,ud->skill_lv,tick,0);
- if( sd && sd->skillitem != AL_WARP ) // Warp-Portal thru items will clear data in skill_castend_map. [Inkfish]
- sd->skillitem = sd->skillitemlv = 0;
+ if (sd != NULL && ud->skill_id != AL_WARP && ud->skill_id == sd->auto_cast_current.skill_id) // Warp-Portal thru items will clear data in skill_castend_map. [Inkfish]
+ pc->autocast_remove(sd, sd->auto_cast_current.type, ud->skill_id, ud->skill_lv);
- unit->setdir(src, map->calc_dir(src, ud->skillx, ud->skilly));
+ unit->set_dir(src, map->calc_dir(src, ud->skillx, ud->skilly));
if (ud->skilltimer == INVALID_TIMER) {
if (md) md->skill_idx = -1;
@@ -10839,13 +11235,17 @@ static int skill_castend_pos(int tid, int64 tick, int id, intptr_t data)
return 1;
} while(0);
- if( !sd || sd->skillitem != ud->skill_id || skill->get_delay(ud->skill_id,ud->skill_lv) )
+ if (sd == NULL || sd->auto_cast_current.skill_id != ud->skill_id || skill->get_delay(ud->skill_id, ud->skill_lv) != 0)
ud->canact_tick = tick;
- ud->skill_id = ud->skill_lv = 0;
- if(sd)
- sd->skillitem = sd->skillitemlv = 0;
+
+ if (sd != NULL && ud->skill_id == sd->auto_cast_current.skill_id)
+ pc->autocast_remove(sd, sd->auto_cast_current.type, ud->skill_id, ud->skill_lv);
else if(md)
md->skill_idx = -1;
+
+ ud->skill_id = 0;
+ ud->skill_lv = 0;
+
return 0;
}
@@ -10876,6 +11276,37 @@ static int skill_count_wos(struct block_list *bl, va_list ap)
return 0;
}
+/**
+ * Returns the linked song/dance skill ID, if any (for the Bard/Dancer Soul Link).
+ *
+ * @param skill_id The skill ID to look up
+ *
+ * @return The linked song or dance's skill ID if any
+ * @retval 0 if the given skill_id doesn't have a linked skill ID
+ */
+static int skill_get_linked_song_dance_id(int skill_id)
+{
+ switch (skill_id) {
+ case BA_WHISTLE:
+ return DC_HUMMING;
+ case BA_ASSASSINCROSS:
+ return DC_DONTFORGETME;
+ case BA_POEMBRAGI:
+ return DC_FORTUNEKISS;
+ case BA_APPLEIDUN:
+ return DC_SERVICEFORYOU;
+ case DC_HUMMING:
+ return BA_WHISTLE;
+ case DC_DONTFORGETME:
+ return BA_ASSASSINCROSS;
+ case DC_FORTUNEKISS:
+ return BA_POEMBRAGI;
+ case DC_SERVICEFORYOU:
+ return BA_APPLEIDUN;
+ }
+ return 0;
+}
+
/*==========================================
*
*------------------------------------------*/
@@ -10928,17 +11359,21 @@ static int skill_castend_map(struct map_session_data *sd, uint16 skill_id, const
return 0;
}
- switch(skill_id) {
+ switch (skill_id) {
case AL_TELEPORT:
- // The storage window is closed automatically by the client when there's
- // any kind of map change, so we need to restore it automatically
- // issue: 8027
- if(strcmp(mapname,"Random")==0)
- pc->randomwarp(sd,CLR_TELEPORT);
- else if (sd->menuskill_val > 1) //Need lv2 to be able to warp here.
- pc->setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,CLR_TELEPORT);
-
- clif->refresh_storagewindow(sd);
+ if (strcmp(mapname, "Random") == 0)
+ pc->randomwarp(sd, CLR_TELEPORT);
+ else if (sd->menuskill_val > 1) // Need lv2 to be able to warp here.
+ pc->setpos(sd, sd->status.save_point.map, sd->status.save_point.x, sd->status.save_point.y, CLR_TELEPORT);
+
+ if (battle_config.teleport_close_storage == 1 && sd->state.storage_flag != STORAGE_FLAG_CLOSED) {
+ if (sd->state.storage_flag == STORAGE_FLAG_NORMAL)
+ storage->close(sd);
+ if (sd->state.storage_flag == STORAGE_FLAG_GUILD)
+ gstorage->close(sd);
+ } else {
+ clif->refresh_storagewindow(sd);
+ }
break;
case AL_WARP:
@@ -10973,7 +11408,7 @@ static int skill_castend_map(struct map_session_data *sd, uint16 skill_id, const
}
}
- lv = sd->skillitem==skill_id?sd->skillitemlv:pc->checkskill(sd,skill_id);
+ lv = (sd->auto_cast_current.type > AUTOCAST_TEMP) ? sd->auto_cast_current.skill_lv : pc->checkskill(sd, skill_id);
wx = sd->menuskill_val>>16;
wy = sd->menuskill_val&0xffff;
@@ -10996,7 +11431,10 @@ static int skill_castend_map(struct map_session_data *sd, uint16 skill_id, const
}
skill->consume_requirement(sd,sd->menuskill_id,lv,2);
- sd->skillitem = sd->skillitemlv = 0; // Clear data that's skipped in 'skill_castend_pos' [Inkfish]
+
+ // Clear data which was skipped in skill_castend_pos().
+ pc->autocast_remove(sd, sd->auto_cast_current.type, sd->auto_cast_current.skill_id,
+ sd->auto_cast_current.skill_lv);
if((group=skill->unitsetting(&sd->bl,skill_id,lv,wx,wy,0))==NULL) {
skill_failed(sd);
@@ -11057,7 +11495,7 @@ static int skill_castend_pos2(struct block_list *src, int x, int y, uint16 skill
}
// SC_MAGICPOWER needs to switch states before any damage is actually dealt
- skill->toggle_magicpower(src, skill_id);
+ skill->toggle_magicpower(src, skill_id, skill_lv);
switch(skill_id) {
case PR_BENEDICTIO:
@@ -11245,7 +11683,7 @@ static int skill_castend_pos2(struct block_list *src, int x, int y, uint16 skill
FALLTHROUGH
case GS_GROUNDDRIFT: //Ammo should be deleted right away.
if ( skill_id == WM_SEVERE_RAINSTORM )
- sc_start(src,src,SC_NO_SWITCH_EQUIP,100,0,skill->get_time(skill_id,skill_lv));
+ sc_start(src, src, type, 100, 0, skill->get_time(skill_id, skill_lv));
skill->unitsetting(src,skill_id,skill_lv,x,y,0);
break;
case WZ_ICEWALL:
@@ -11410,13 +11848,19 @@ static int skill_castend_pos2(struct block_list *src, int x, int y, uint16 skill
// Slim Pitcher [Celest]
case CR_SLIMPITCHER:
if (sd) {
- int item_idx = (skill_lv - 1) % MAX_SKILL_ITEM_REQUIRE;
+ int item_idx = skill->get_item_index(skill_id, skill_lv);
+
+ if (item_idx == INDEX_NOT_FOUND) {
+ clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
+ return 1;
+ }
+
int item_id = skill->get_itemid(skill_id, item_idx);
int inventory_idx = pc->search_inventory(sd, item_id);
int bonus;
if (inventory_idx == INDEX_NOT_FOUND || item_id <= 0
|| sd->inventory_data[inventory_idx] == NULL
- || sd->status.inventory[inventory_idx].amount < skill->get_itemqty(skill_id, item_idx)
+ || sd->status.inventory[inventory_idx].amount < skill->get_itemqty(skill_id, item_idx, skill_lv)
) {
clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
return 1;
@@ -11443,7 +11887,11 @@ static int skill_castend_pos2(struct block_list *src, int x, int y, uint16 skill
skill->castend_nodamage_id);
}
} else {
- int item_idx = (skill_lv - 1) % MAX_SKILL_ITEM_REQUIRE;
+ int item_idx = skill->get_item_index(skill_id, skill_lv);
+
+ if (item_idx == INDEX_NOT_FOUND)
+ return 1;
+
int item_id = skill->get_itemid(skill_id, item_idx);
struct item_data *item = itemdb->search(item_id);
int bonus;
@@ -11606,17 +12054,16 @@ static int skill_castend_pos2(struct block_list *src, int x, int y, uint16 skill
case WL_EARTHSTRAIN:
{
- int i, wave = skill_lv + 4, dir = map->calc_dir(src,x,y);
+ int i;
+ int wave = skill_lv + 4;
+ enum unit_dir dir = map->calc_dir(src, x, y);
+ Assert_ret(dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX);
int sx = x = src->x, sy = y = src->y; // Store first caster's location to avoid glitch on unit setting
- for( i = 1; i <= wave; i++ )
- {
- switch( dir ){
- case 0: case 1: case 7: sy = y + i; break;
- case 3: case 4: case 5: sy = y - i; break;
- case 2: sx = x - i; break;
- case 6: sx = x + i; break;
- }
+ for (i = 1; i <= wave; i++) {
+ sy = y + i * diry[dir];
+ if (dir == UNIT_DIR_WEST || dir == UNIT_DIR_EAST)
+ sx = x + i * dirx[dir];
skill->addtimerskill(src,timer->gettick() + (140 * i),0,sx,sy,skill_id,skill_lv,dir,flag&2);
}
}
@@ -11663,7 +12110,7 @@ static int skill_castend_pos2(struct block_list *src, int x, int y, uint16 skill
skill->unitsetting(src, skill_id, skill_lv, x, y, 0); // Set bomb on current Position
clif->skill_nodamage(src, src, skill_id, skill_lv, 1);
if( skill->blown(src, src, 3 * skill_lv, unit->getdir(src), 0) && sc) {
- sc_start(src, src, SC__FEINTBOMB_MASTER, 100, 0, skill->get_unit_interval(SC_FEINTBOMB));
+ sc_start(src, src, SC__FEINTBOMB_MASTER, 100, 0, skill->get_unit_interval(SC_FEINTBOMB, skill_lv));
}
break;
@@ -11676,7 +12123,7 @@ static int skill_castend_pos2(struct block_list *src, int x, int y, uint16 skill
case LG_OVERBRAND:
skill->area_temp[1] = 0;
map->foreachinpath(skill->attack_area,src->m,src->x,src->y,x,y,1,5,BL_CHAR,
- skill->get_type(skill_id),src,src,skill_id,skill_lv,tick,flag,BCT_ENEMY);
+ skill->get_type(skill_id, skill_lv), src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY);
skill->addtimerskill(src,timer->gettick() + status_get_amotion(src), 0, x, y, LG_OVERBRAND_BRANDISH, skill_lv, 0, flag);
break;
@@ -11713,7 +12160,7 @@ static int skill_castend_pos2(struct block_list *src, int x, int y, uint16 skill
int tmpx = x - area + rnd()%(area * 2 + 1);
int tmpy = y - area + rnd()%(area * 2 + 1);
- skill->addtimerskill(src,tick+r*250,0,tmpx,tmpy,GN_CRAZYWEED_ATK,skill_lv,-1,0);
+ skill->addtimerskill(src, tick + (int64)r * 250, 0, tmpx, tmpy, GN_CRAZYWEED_ATK, skill_lv, 0, 0);
}
}
break;
@@ -11910,10 +12357,10 @@ static bool skill_dance_switch(struct skill_unit *su, int flag)
// replace
group->skill_id = skill_id;
group->skill_lv = 1;
- group->unit_id = skill->get_unit_id(skill_id,0);
- group->target_flag = skill->get_unit_target(skill_id);
- group->bl_flag = skill->get_unit_bl_target(skill_id);
- group->interval = skill->get_unit_interval(skill_id);
+ group->unit_id = skill->get_unit_id(skill_id, 1, 0);
+ group->target_flag = skill->get_unit_target(skill_id, 1);
+ group->bl_flag = skill->get_unit_bl_target(skill_id, 1);
+ group->interval = skill->get_unit_interval(skill_id, 1);
} else {
//Restore
group->skill_id = backup.skill_id;
@@ -11946,8 +12393,8 @@ static struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16
limit = skill->get_time(skill_id,skill_lv);
range = skill->get_unit_range(skill_id,skill_lv);
- interval = skill->get_unit_interval(skill_id);
- target = skill->get_unit_target(skill_id);
+ interval = skill->get_unit_interval(skill_id, skill_lv);
+ target = skill->get_unit_target(skill_id, skill_lv);
unit_flag = skill->get_unit_flag(skill_id);
layout = skill->get_unit_layout(skill_id,skill_lv,src,x,y);
@@ -12311,12 +12758,12 @@ static struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16
}
nullpo_retr(NULL, layout);
- nullpo_retr(NULL, group=skill->init_unitgroup(src,layout->count,skill_id,skill_lv,skill->get_unit_id(skill_id,flag&1)+subunt, limit, interval));
+ nullpo_retr(NULL, group = skill->init_unitgroup(src, layout->count, skill_id, skill_lv, skill->get_unit_id(skill_id, skill_lv, flag & 1) + subunt, limit, interval));
group->val1=val1;
group->val2=val2;
group->val3=val3;
group->target_flag=target;
- group->bl_flag= skill->get_unit_bl_target(skill_id);
+ group->bl_flag= skill->get_unit_bl_target(skill_id, skill_lv);
group->state.ammo_consume = (sd && sd->state.arrow_atk && skill_id != GS_GROUNDDRIFT); //Store if this skill needs to consume ammo.
group->state.song_dance = ((unit_flag&(UF_DANCE|UF_SONG)) ? 1 : 0)|((unit_flag&UF_ENSEMBLE) ? 2 : 0); //Signals if this is a song/dance/duet
group->state.guildaura = ( skill_id >= GD_LEADERSHIP && skill_id <= GD_HAWKEYES )?1:0;
@@ -12437,7 +12884,7 @@ static struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16
if (!group->alive_count) {
//No cells? Something that was blocked completely by Land Protector?
- skill->del_unitgroup(group,ALC_MARK);
+ skill->del_unitgroup(group);
return NULL;
}
@@ -12485,7 +12932,7 @@ static int skill_unit_onplace(struct skill_unit *src, struct block_list *bl, int
nullpo_ret(sg=src->group);
nullpo_ret(ss=map->id2bl(sg->src_id));
- if (skill->get_type(sg->skill_id) == BF_MAGIC && map->getcell(src->bl.m, &src->bl, src->bl.x, src->bl.y, CELL_CHKLANDPROTECTOR) && sg->skill_id != SA_LANDPROTECTOR)
+ if (skill->get_type(sg->skill_id, sg->skill_lv) == BF_MAGIC && map->getcell(src->bl.m, &src->bl, src->bl.x, src->bl.y, CELL_CHKLANDPROTECTOR) != 0 && sg->skill_id != SA_LANDPROTECTOR)
return 0; //AoE skills are ineffective. [Skotlex]
sc = status->get_sc(bl);
@@ -12553,7 +13000,7 @@ static int skill_unit_onplace(struct skill_unit *src, struct block_list *bl, int
unsigned short m = sg->val3;
if( --count <= 0 )
- skill->del_unitgroup(sg,ALC_MARK);
+ skill->del_unitgroup(sg);
if ( map->mapindex2mapid(sg->val3) == sd->bl.m && x == sd->bl.x && y == sd->bl.y )
working = 1;/* we break it because officials break it, lovely stuff. */
@@ -12684,7 +13131,7 @@ static int skill_unit_onplace(struct skill_unit *src, struct block_list *bl, int
if( status_get_mode(bl)&MD_BOSS )
break; // iRO Wiki says that this skill don't affect to Boss monsters.
if( map_flag_vs(bl->m) || bl->id == src->bl.id || battle->check_target(&src->bl,bl, BCT_ENEMY) == 1 )
- skill->attack(skill->get_type(sg->skill_id), ss, &src->bl, bl, sg->skill_id, sg->skill_lv, tick, 0);
+ skill->attack(skill->get_type(sg->skill_id, sg->skill_lv), ss, &src->bl, bl, sg->skill_id, sg->skill_lv, tick, 0);
break;
case UNT_REVERBERATION:
@@ -12859,7 +13306,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
sg->val1--;
}
if (sg->val1 <= 0)
- skill->del_unitgroup(sg, ALC_MARK);
+ skill->del_unitgroup(sg);
break;
case UNT_EVILLAND:
@@ -12920,7 +13367,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
case WZ_STORMGUST: //SG counter does not reset per stormgust. IE: One hit from a SG and two hits from another will freeze you.
if (tsc)
tsc->sg_counter++; //SG hit counter.
- if (skill->attack(skill->get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0) <= 0 && tsc)
+ if (skill->attack(skill->get_type(sg->skill_id, sg->skill_lv), ss, &src->bl, bl, sg->skill_id, sg->skill_lv, tick, 0) <= 0 && tsc != NULL)
tsc->sg_counter=0; //Attack absorbed.
break;
#endif
@@ -12929,7 +13376,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
skill->attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
break;
default:
- skill->attack(skill->get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
+ skill->attack(skill->get_type(sg->skill_id, sg->skill_lv), ss, &src->bl, bl, sg->skill_id, sg->skill_lv, tick, 0);
}
break;
@@ -13250,7 +13697,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
case UNT_PSYCHIC_WAVE:
case UNT_MAGMA_ERUPTION:
case UNT_MAKIBISHI:
- skill->attack(skill->get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
+ skill->attack(skill->get_type(sg->skill_id, sg->skill_lv), ss, &src->bl, bl, sg->skill_id, sg->skill_lv, tick, 0);
break;
case UNT_GROUNDDRIFT_WIND:
@@ -13351,7 +13798,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
sec = 3000; // Couldn't trap it?
sg->limit = DIFF_TICK32(tick, sg->tick) + sec;
} else if( tsc->data[SC_THORNS_TRAP] && bl->id == sg->val2 )
- skill->attack(skill->get_type(GN_THORNS_TRAP), ss, ss, bl, sg->skill_id, sg->skill_lv, tick, SD_LEVEL|SD_ANIMATION);
+ skill->attack(skill->get_type(GN_THORNS_TRAP, sg->skill_lv), ss, ss, bl, sg->skill_id, sg->skill_lv, tick, SD_LEVEL|SD_ANIMATION);
}
break;
@@ -13363,11 +13810,11 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
default:
sc_start4(ss, bl, SC_BURNING, 4 + 4 * sg->skill_lv, sg->skill_lv, 0, ss->id, 0,
skill->get_time2(sg->skill_id, sg->skill_lv));
- skill->attack(skill->get_type(sg->skill_id), ss, &src->bl, bl,
+ skill->attack(skill->get_type(sg->skill_id, sg->skill_lv), ss, &src->bl, bl,
sg->skill_id, sg->skill_lv + 10 * sg->val2, tick, 0);
break;
case 3:
- skill->attack(skill->get_type(CR_ACIDDEMONSTRATION), ss, &src->bl, bl,
+ skill->attack(skill->get_type(CR_ACIDDEMONSTRATION, sg->skill_lv), ss, &src->bl, bl,
CR_ACIDDEMONSTRATION, sd ? pc->checkskill(sd, CR_ACIDDEMONSTRATION) : sg->skill_lv, tick, 0);
break;
@@ -13385,7 +13832,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
case UNT_HELLS_PLANT:
if( battle->check_target(&src->bl,bl,BCT_ENEMY) > 0 )
- skill->attack(skill->get_type(GN_HELLS_PLANT_ATK), ss, &src->bl, bl, GN_HELLS_PLANT_ATK, sg->skill_lv, tick, 0);
+ skill->attack(skill->get_type(GN_HELLS_PLANT_ATK, sg->skill_lv), ss, &src->bl, bl, GN_HELLS_PLANT_ATK, sg->skill_lv, tick, 0);
if( ss != bl) //The caster is the only one who can step on the Plants, without destroying them
sg->limit = DIFF_TICK32(tick, sg->tick) + 100;
break;
@@ -13393,7 +13840,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
case UNT_CLOUD_KILL:
if(tsc && !tsc->data[type])
status->change_start(ss,bl,type,10000,sg->skill_lv,sg->group_id,0,0,skill->get_time2(sg->skill_id,sg->skill_lv),SCFLAG_FIXEDRATE);
- skill->attack(skill->get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
+ skill->attack(skill->get_type(sg->skill_id, sg->skill_lv), ss, &src->bl, bl, sg->skill_id, sg->skill_lv, tick, 0);
break;
case UNT_WARMER:
@@ -13518,7 +13965,7 @@ static int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *b
}
sg->limit = DIFF_TICK32(tick, sg->tick) + sec;
} else if (tsc->data[type] && bl->id == sg->val2) {
- skill->attack(skill->get_type(SU_SV_ROOTTWIST_ATK), ss, &src->bl, bl, SU_SV_ROOTTWIST_ATK, sg->skill_lv, tick, SD_LEVEL|SD_ANIMATION);
+ skill->attack(skill->get_type(SU_SV_ROOTTWIST_ATK, sg->skill_lv), ss, &src->bl, bl, SU_SV_ROOTTWIST_ATK, sg->skill_lv, tick, SD_LEVEL|SD_ANIMATION);
}
}
break;
@@ -13835,12 +14282,14 @@ static int skill_check_condition_char_sub(struct block_list *bl, va_list ap)
} else {
switch(skill_id) {
- case PR_BENEDICTIO: {
- uint8 dir = map->calc_dir(&sd->bl,tsd->bl.x,tsd->bl.y);
- dir = (unit->getdir(&sd->bl) + dir)%8; //This adjusts dir to account for the direction the sd is facing.
- if ((tsd->job & MAPID_BASEMASK) == MAPID_ACOLYTE && (dir == 2 || dir == 6) //Must be standing to the left/right of Priest.
- && sd->status.sp >= 10)
+ case PR_BENEDICTIO:
+ {
+ enum unit_dir dir = map->calc_dir(&sd->bl, tsd->bl.x, tsd->bl.y);
+ dir = (unit->getdir(&sd->bl) + dir) % UNIT_DIR_MAX; //This adjusts dir to account for the direction the sd is facing.
+ if ((tsd->job & MAPID_BASEMASK) == MAPID_ACOLYTE && (dir == UNIT_DIR_WEST || dir == UNIT_DIR_EAST) //Must be standing to the left/right of Priest.
+ && sd->status.sp >= 10) {
p_sd[(*c)++]=tsd->bl.id;
+ }
return 1;
}
case AB_ADORAMUS:
@@ -13970,16 +14419,16 @@ static int skill_check_condition_mob_master_sub(struct block_list *bl, va_list a
* Determines if a given skill should be made to consume ammo
* when used by the player. [Skotlex]
*------------------------------------------*/
-static int skill_isammotype(struct map_session_data *sd, int skill_id)
+static int skill_isammotype(struct map_session_data *sd, int skill_id, int skill_lv)
{
nullpo_ret(sd);
return (
battle_config.arrow_decrement==2 &&
(sd->weapontype == W_BOW || (sd->weapontype >= W_REVOLVER && sd->weapontype <= W_GRENADE)) &&
skill_id != HT_PHANTASMIC &&
- skill->get_type(skill_id) == BF_WEAPON &&
+ skill->get_type(skill_id, skill_lv) == BF_WEAPON &&
!(skill->get_nk(skill_id)&NK_NO_DAMAGE) &&
- !skill->get_spiritball(skill_id,1) //Assume spirit spheres are used as ammo instead.
+ !skill->get_spiritball(skill_id, skill_lv) //Assume spirit spheres are used as ammo instead.
);
}
@@ -13995,19 +14444,87 @@ static bool skill_is_combo(int skill_id)
}
/**
- * Checks if a skill is casted by an item (itemskill() script command).
+ * Checks if a skill's equipment requirements are fulfilled.
*
- * @param sd The charcater's session data.
+ * @param sd The character who casts the skill.
* @param skill_id The skill's ID.
* @param skill_lv The skill's level.
- * @return true if skill is casted by an item, otherwise false.
- */
-static bool skill_is_item_skill(struct map_session_data *sd, int skill_id, int skill_lv)
+ * @return 0 on success or 1 in case of error.
+ *
+ **/
+static int skill_check_condition_required_equip(struct map_session_data *sd, int skill_id, int skill_lv)
{
- nullpo_retr(false, sd);
+ nullpo_retr(1, sd);
+
+ struct skill_condition req = skill->get_requirement(sd, skill_id, skill_lv);
+ bool any_equip_flag = skill->get_equip_any_flag(skill_id, skill_lv);
+ bool any_equip_found = false;
+ int fail_id = 0;
+ int fail_amount = 0;
+
+ for (int i = 0; i < MAX_SKILL_ITEM_REQUIRE; i++) {
+ if (req.equip_id[i] == 0)
+ continue;
+
+ int req_id = req.equip_id[i];
+ int req_amount = req.equip_amount[i];
+ int found_amount = 0;
+
+ for (int j = 0; j < EQI_MAX; j++) {
+ int inv_idx = sd->equip_index[j];
+
+ if (inv_idx == INDEX_NOT_FOUND || sd->inventory_data[inv_idx] == NULL)
+ continue;
+
+ if ((j == EQI_HAND_R && sd->equip_index[EQI_HAND_L] == inv_idx)
+ || (j == EQI_HEAD_MID && sd->equip_index[EQI_HEAD_LOW] == inv_idx)
+ || (j == EQI_HEAD_TOP && sd->equip_index[EQI_HEAD_MID] == inv_idx)
+ || (j == EQI_HEAD_TOP && sd->equip_index[EQI_HEAD_LOW] == inv_idx)
+ || (j == EQI_COSTUME_MID && sd->equip_index[EQI_COSTUME_LOW] == inv_idx)
+ || (j == EQI_COSTUME_TOP && sd->equip_index[EQI_COSTUME_MID] == inv_idx)
+ || (j == EQI_COSTUME_TOP && sd->equip_index[EQI_COSTUME_LOW] == inv_idx)) {
+ continue; // Equipment uses more than one slot; only process it once!
+ }
+
+ if (itemdb_type(req_id) != IT_CARD) {
+ if (sd->inventory_data[inv_idx]->nameid != req_id)
+ continue;
+
+ if (itemdb_type(req_id) == IT_AMMO)
+ found_amount += sd->status.inventory[inv_idx].amount;
+ else
+ found_amount++;
+ } else {
+ if (itemdb_isspecial(sd->status.inventory[inv_idx].card[0]))
+ continue;
+
+ for (int k = 0; k < sd->inventory_data[inv_idx]->slot; k++) {
+ if (sd->status.inventory[inv_idx].card[k] == req_id)
+ found_amount++;
+ }
+ }
+ }
- return (sd->skillitem == skill_id && sd->skillitemlv == skill_lv
- && sd->itemskill_id == skill_id && sd->itemskill_lv == skill_lv);
+ if (any_equip_flag) {
+ if (found_amount >= req_amount) {
+ any_equip_found = true;
+ break;
+ } else if (fail_id == 0) { // Save ID/amount of first missing equipment for skill fail message.
+ fail_id = req_id;
+ fail_amount = req_amount;
+ }
+ } else if (found_amount < req_amount) {
+ clif->skill_fail(sd, skill_id, USESKILL_FAIL_NEED_EQUIPMENT, req_amount, req_id);
+ return 1;
+ }
+ }
+
+ if (any_equip_flag && !any_equip_found) {
+ clif->skill_fail(sd, skill_id, USESKILL_FAIL_NEED_EQUIPMENT, fail_amount, fail_id);
+ return 1;
+ }
+
+ return 0;
}
static int skill_check_condition_castbegin(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv)
@@ -14024,13 +14541,13 @@ static int skill_check_condition_castbegin(struct map_session_data *sd, uint16 s
if (sd->chat_id != 0)
return 0;
- if ((sd->state.itemskill_conditions_checked == 1 || sd->state.itemskill_no_conditions == 1)
- && skill->is_item_skill(sd, skill_id, skill_lv)) {
+ if (((sd->auto_cast_current.itemskill_conditions_checked || !sd->auto_cast_current.itemskill_check_conditions)
+ && sd->auto_cast_current.type == AUTOCAST_ITEM) || sd->auto_cast_current.type == AUTOCAST_IMPROVISE) {
return 1;
}
- if (pc_has_permission(sd, PC_PERM_SKILL_UNCONDITIONAL) && sd->skillitem != skill_id) {
- //GMs don't override the skillItem check, otherwise they can use items without them being consumed! [Skotlex]
+ if (pc_has_permission(sd, PC_PERM_SKILL_UNCONDITIONAL) && sd->auto_cast_current.type != AUTOCAST_ITEM) {
+ // GMs don't override the AUTOCAST_ITEM check, otherwise they can use items without them being consumed!
sd->state.arrow_atk = skill->get_ammotype(skill_id)?1:0; //Need to do arrow state check.
sd->spiritball_old = sd->spiritball; //Need to do Spiritball check.
return 1;
@@ -14061,30 +14578,7 @@ static int skill_check_condition_castbegin(struct map_session_data *sd, uint16 s
if( !sc->count )
sc = NULL;
- if( sd->skillitem == skill_id ) {
- if( sd->state.abra_flag ) // Hocus-Pocus was used. [Inkfish]
- sd->state.abra_flag = 0;
- else {
- int i;
- // When a target was selected, consume items that were skipped in pc_use_item [Skotlex]
- if( (i = sd->itemindex) == -1 ||
- sd->status.inventory[i].nameid != sd->itemid ||
- sd->inventory_data[i] == NULL ||
- sd->status.inventory[i].amount < 1
- ) {
- //Something went wrong, item exploit?
- sd->itemid = sd->itemindex = -1;
- return 0;
- }
-
- //Consume
- sd->itemid = sd->itemindex = -1;
- if (sd->status.inventory[i].expire_time == 0 && sd->inventory_data[i]->flag.delay_consume == 1) // Rental usable items are not consumed until expiration
- pc->delitem(sd, i, 1, 0, DELITEM_NORMAL, LOG_TYPE_CONSUME);
- }
- }
-
- if (pc_is90overweight(sd) && sd->skillitem != skill_id) { /// Skill casting items ignore the overweight restriction. [Kenpachi]
+ if (pc_is90overweight(sd) && sd->auto_cast_current.type != AUTOCAST_ITEM) { // Skill casting items ignore the overweight restriction.
clif->skill_fail(sd, skill_id, USESKILL_FAIL_WEIGHTOVER, 0, 0);
return 0;
}
@@ -14732,22 +15226,6 @@ static int skill_check_condition_castbegin(struct map_session_data *sd, uint16 s
require.sp -= require.sp * 20 * count / 100; // -20% each W/M in the party.
}
break;
- case NC_PILEBUNKER:
- if (sd->equip_index[EQI_HAND_R] < 0
- || !itemid_is_pilebunker(sd->status.inventory[sd->equip_index[EQI_HAND_R]].nameid)
- ) {
- clif->skill_fail(sd, skill_id, USESKILL_FAIL_THIS_WEAPON, 0, 0);
- return 0;
- }
- break;
- case NC_HOVERING:
- if (( sd->equip_index[EQI_ACC_L] >= 0 && sd->status.inventory[sd->equip_index[EQI_ACC_L]].nameid == ITEMID_HOVERING_BOOSTER ) ||
- ( sd->equip_index[EQI_ACC_R] >= 0 && sd->status.inventory[sd->equip_index[EQI_ACC_R]].nameid == ITEMID_HOVERING_BOOSTER ));
- else {
- clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
- return 0;
- }
- break;
case SO_FIREWALK:
case SO_ELECTRICWALK: // Can't be casted until you've walked all cells.
if( sc && sc->data[SC_PROPERTYWALK] &&
@@ -14950,12 +15428,20 @@ static int skill_check_condition_castbegin(struct map_session_data *sd, uint16 s
return 0;
}
+ if (require.msp > 0 && get_percentage(st->sp, st->max_sp) > require.msp) {
+ clif->skill_fail(sd, skill_id, USESKILL_FAIL_SP_INSUFFICIENT, 0, 0);
+ return 0;
+ }
+
if( require.weapon && !pc_check_weapontype(sd,require.weapon) ) {
clif->skill_fail(sd, skill_id, USESKILL_FAIL_THIS_WEAPON, 0, 0);
return 0;
}
- if (require.sp > 0 && st->sp < (unsigned int)require.sp && sd->skillitem != skill_id) { /// Skill casting items and Hocus-Pocus skills don't consume SP. [Kenpachi]
+ if (skill->check_condition_required_equip(sd, skill_id, skill_lv) != 0)
+ return 0;
+
+ if (require.sp > 0 && st->sp < (unsigned int)require.sp && sd->auto_cast_current.type == AUTOCAST_NONE) { // Auto-cast skills don't consume SP.
clif->skill_fail(sd, skill_id, USESKILL_FAIL_SP_INSUFFICIENT, 0, 0);
return 0;
}
@@ -15001,25 +15487,140 @@ static int skill_check_condition_castbegin_unknown(struct status_change *sc, uin
return -1;
}
+/**
+ * Checks if a skill's item requirements are fulfilled.
+ *
+ * @param sd The character who casts the skill.
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return 0 on success or 1 in case of error.
+ *
+ **/
+static int skill_check_condition_required_items(struct map_session_data *sd, int skill_id, int skill_lv)
+{
+ nullpo_retr(1, sd);
+
+ struct skill_condition req = skill->get_requirement(sd, skill_id, skill_lv);
+
+ if (skill->get_item_any_flag(skill_id, skill_lv)) {
+ for (int i = 0; i < MAX_SKILL_ITEM_REQUIRE; i++) {
+ if (req.itemid[i] == 0)
+ continue;
+
+ int inv_idx = pc->search_inventory(sd, req.itemid[i]);
+
+ if (inv_idx == INDEX_NOT_FOUND)
+ continue;
+
+ if ((req.amount[i] > 0 && sd->status.inventory[inv_idx].amount >= req.amount[i])
+ || (req.amount[i] == 0 && sd->status.inventory[inv_idx].amount > 0)) {
+ return 0;
+ }
+ }
+ }
+
+ /**
+ * Find first missing item and show skill failed message if item any-flag is false
+ * or item any-flag check didn't find an item with sufficient amount.
+ *
+ **/
+ for (int i = 0; i < MAX_SKILL_ITEM_REQUIRE; i++) {
+ if (req.itemid[i] == 0)
+ continue;
+
+ int inv_idx = pc->search_inventory(sd, req.itemid[i]);
+
+ if (inv_idx == INDEX_NOT_FOUND || sd->status.inventory[inv_idx].amount < req.amount[i]) {
+ useskill_fail_cause cause = USESKILL_FAIL_NEED_ITEM;
+
+ switch (skill_id) {
+ case NC_SILVERSNIPER:
+ case NC_MAGICDECOY:
+ cause = USESKILL_FAIL_STUFF_INSUFFICIENT;
+ break;
+ default:
+ switch (req.itemid[i]) {
+ case ITEMID_RED_GEMSTONE:
+ cause = USESKILL_FAIL_REDJAMSTONE;
+ break;
+ case ITEMID_BLUE_GEMSTONE:
+ cause = USESKILL_FAIL_BLUEJAMSTONE;
+ break;
+ case ITEMID_HOLY_WATER:
+ cause = USESKILL_FAIL_HOLYWATER;
+ break;
+ case ITEMID_ANSILA:
+ cause = USESKILL_FAIL_ANCILLA;
+ break;
+ case ITEMID_ACCELERATOR:
+ case ITEMID_HOVERING_BOOSTER:
+ case ITEMID_SUICIDAL_DEVICE:
+ case ITEMID_SHAPE_SHIFTER:
+ case ITEMID_COOLING_DEVICE:
+ case ITEMID_MAGNETIC_FIELD_GENERATOR:
+ case ITEMID_BARRIER_BUILDER:
+ case ITEMID_CAMOUFLAGE_GENERATOR:
+ case ITEMID_REPAIR_KIT:
+ case ITEMID_MONKEY_SPANNER:
+ cause = USESKILL_FAIL_NEED_EQUIPMENT;
+ FALLTHROUGH
+ default:
+ clif->skill_fail(sd, skill_id, cause, max(1, req.amount[i]), req.itemid[i]);
+ return 1;
+ }
+
+ break;
+ }
+
+ clif->skill_fail(sd, skill_id, cause, 0, 0);
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * Checks if a skill has item requirements.
+ *
+ * @param sd The character who casts the skill.
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return True if skill has item requirements, otherwise false.
+ *
+ **/
+static bool skill_items_required(struct map_session_data *sd, int skill_id, int skill_lv)
+{
+ nullpo_retr(false, sd);
+
+ struct skill_condition req = skill->get_requirement(sd, skill_id, skill_lv);
+
+ for (int i = 0; i < MAX_SKILL_ITEM_REQUIRE; i++) {
+ if (req.itemid[i] != 0)
+ return true;
+ }
+
+ return false;
+}
+
static int skill_check_condition_castend(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv)
{
struct skill_condition require;
struct status_data *st;
int i;
- int index[MAX_SKILL_ITEM_REQUIRE];
nullpo_ret(sd);
if (sd->chat_id != 0)
return 0;
- if ((sd->state.itemskill_conditions_checked == 1 || sd->state.itemskill_no_conditions == 1)
- && skill->is_item_skill(sd, skill_id, skill_lv)) {
+ if (((sd->auto_cast_current.itemskill_conditions_checked || !sd->auto_cast_current.itemskill_check_conditions)
+ && sd->auto_cast_current.type == AUTOCAST_ITEM) || sd->auto_cast_current.type == AUTOCAST_IMPROVISE) {
return 1;
}
- if( pc_has_permission(sd, PC_PERM_SKILL_UNCONDITIONAL) && sd->skillitem != skill_id ) {
- //GMs don't override the skillItem check, otherwise they can use items without them being consumed! [Skotlex]
+ if (pc_has_permission(sd, PC_PERM_SKILL_UNCONDITIONAL) && sd->auto_cast_current.type != AUTOCAST_ITEM) {
+ // GMs don't override the AUTOCAST_ITEM check, otherwise they can use items without them being consumed!
sd->state.arrow_atk = skill->get_ammotype(skill_id)?1:0; //Need to do arrow state check.
sd->spiritball_old = sd->spiritball; //Need to do Spiritball check.
return 1;
@@ -15046,7 +15647,7 @@ static int skill_check_condition_castend(struct map_session_data *sd, uint16 ski
break;
}
- if (pc_is90overweight(sd) && sd->skillitem != skill_id) { /// Skill casting items ignore the overweight restriction. [Kenpachi]
+ if (pc_is90overweight(sd) && sd->auto_cast_current.type != AUTOCAST_ITEM) { // Skill casting items ignore the overweight restriction.
clif->skill_fail(sd, skill_id, USESKILL_FAIL_WEIGHTOVER, 0, 0);
return 0;
}
@@ -15152,56 +15753,16 @@ static int skill_check_condition_castend(struct map_session_data *sd, uint16 ski
clif->messagecolor_self(sd->fd, COLOR_RED, e_msg);
return 0;
}
- if (!(require.ammo&1<<sd->inventory_data[i]->subtype)) { //Ammo type check. Send the "wrong weapon type" message
- //which is the closest we have to wrong ammo type. [Skotlex]
- clif->arrow_fail(sd,0); //Haplo suggested we just send the equip-arrows message instead. [Skotlex]
- //clif->skill_fail(sd, skill_id, USESKILL_FAIL_THIS_WEAPON, 0, 0);
+ if ((require.ammo & (1 << sd->inventory_data[i]->subtype)) == 0 || !battle->check_arrows(sd)) { // Ammo type check.
+ clif->arrow_fail(sd, 0); // "Please equip the proper ammunition first."
return 0;
}
}
- for( i = 0; i < MAX_SKILL_ITEM_REQUIRE; ++i ) {
- if( !require.itemid[i] )
- continue;
- index[i] = pc->search_inventory(sd,require.itemid[i]);
- if (index[i] == INDEX_NOT_FOUND || sd->status.inventory[index[i]].amount < require.amount[i]) {
- useskill_fail_cause cause = USESKILL_FAIL_NEED_ITEM;
- switch( skill_id ){
- case NC_SILVERSNIPER:
- case NC_MAGICDECOY:
- cause = USESKILL_FAIL_STUFF_INSUFFICIENT;
- break;
- default:
- switch(require.itemid[i]){
- case ITEMID_RED_GEMSTONE:
- cause = USESKILL_FAIL_REDJAMSTONE; break;
- case ITEMID_BLUE_GEMSTONE:
- cause = USESKILL_FAIL_BLUEJAMSTONE; break;
- case ITEMID_HOLY_WATER:
- cause = USESKILL_FAIL_HOLYWATER; break;
- case ITEMID_ANSILA:
- cause = USESKILL_FAIL_ANCILLA; break;
- case ITEMID_ACCELERATOR:
- case ITEMID_HOVERING_BOOSTER:
- case ITEMID_SUICIDAL_DEVICE:
- case ITEMID_SHAPE_SHIFTER:
- case ITEMID_COOLING_DEVICE:
- case ITEMID_MAGNETIC_FIELD_GENERATOR:
- case ITEMID_BARRIER_BUILDER:
- case ITEMID_CAMOUFLAGE_GENERATOR:
- case ITEMID_REPAIR_KIT:
- case ITEMID_MONKEY_SPANNER:
- cause = USESKILL_FAIL_NEED_EQUIPMENT;
- /* Fall through */
- default:
- clif->skill_fail(sd, skill_id, cause, max(1, require.amount[i]), require.itemid[i]);
- return 0;
- }
- }
- clif->skill_fail(sd, skill_id, cause, 0, 0);
- return 0;
- }
- }
+ bool items_required = skill->items_required(sd, skill_id, skill_lv);
+
+ if (items_required && skill->check_condition_required_items(sd, skill_id, skill_lv) != 0)
+ return 0;
return 1;
}
@@ -15211,6 +15772,43 @@ static bool skill_check_condition_castend_unknown(struct map_session_data *sd, u
return false;
}
+/**
+ * Gets the array index of the first required item with sufficient amount.
+ *
+ * @param sd The character who casts the skill.
+ * @param skill_id The skill's ID.
+ * @param skill_lv The skill's level.
+ * @return A number greater than or equal to 0 on success, otherwise INDEX_NOT_FOUND (-1).
+ *
+ **/
+static int skill_get_any_item_index(struct map_session_data *sd, int skill_id, int skill_lv)
+{
+ nullpo_retr(INDEX_NOT_FOUND, sd);
+
+ int any_item_index = INDEX_NOT_FOUND;
+
+ if (skill->get_item_any_flag(skill_id, skill_lv)) {
+ struct skill_condition req = skill->get_requirement(sd, skill_id, skill_lv);
+
+ for (int i = 0; i < MAX_SKILL_ITEM_REQUIRE; i++) {
+ if (req.itemid[i] == 0)
+ continue;
+
+ int inv_idx = pc->search_inventory(sd, req.itemid[i]);
+
+ if (inv_idx == INDEX_NOT_FOUND)
+ continue;
+
+ if (req.amount[i] == 0 || sd->status.inventory[inv_idx].amount >= req.amount[i]) {
+ any_item_index = i;
+ break;
+ }
+ }
+ }
+
+ return any_item_index;
+}
+
// type&2: consume items (after skill was used)
// type&1: consume the others (before skill was used)
static int skill_consume_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv, short type)
@@ -15219,8 +15817,10 @@ static int skill_consume_requirement(struct map_session_data *sd, uint16 skill_i
nullpo_ret(sd);
- if (sd->state.itemskill_no_conditions == 1 && skill->is_item_skill(sd, skill_id, skill_lv))
+ if ((!sd->auto_cast_current.itemskill_check_conditions && sd->auto_cast_current.type == AUTOCAST_ITEM)
+ || sd->auto_cast_current.type == AUTOCAST_IMPROVISE) {
return 1;
+ }
req = skill->get_requirement(sd,skill_id,skill_lv);
@@ -15236,7 +15836,7 @@ static int skill_consume_requirement(struct map_session_data *sd, uint16 skill_i
break;
default:
- if (sd->state.autocast == 1 || sd->skillitem == skill_id) /// Skill casting items and Hocus-Pocus skills don't consume SP. [Kenpachi]
+ if (sd->auto_cast_current.type != AUTOCAST_NONE) // Auto-cast skills don't consume SP.
req.sp = 0;
break;
@@ -15261,16 +15861,24 @@ static int skill_consume_requirement(struct map_session_data *sd, uint16 skill_i
if( type&2 )
{
struct status_change *sc = &sd->sc;
- int n,i;
+ int n;
if( !sc->count )
sc = NULL;
- for( i = 0; i < MAX_SKILL_ITEM_REQUIRE; ++i )
- {
+ bool items_required = skill->items_required(sd, skill_id, skill_lv);
+ int any_item_index = INDEX_NOT_FOUND;
+
+ if (items_required)
+ any_item_index = skill->get_any_item_index(sd, skill_id, skill_lv);
+
+ for (int i = 0; i < MAX_SKILL_ITEM_REQUIRE && items_required; i++) {
if( !req.itemid[i] )
continue;
+ if (any_item_index != INDEX_NOT_FOUND && any_item_index != i)
+ continue;
+
if( itemid_isgemstone(req.itemid[i]) && skill_id != HW_GANBANTEIN && sc && sc->data[SC_SOULLINK] && sc->data[SC_SOULLINK]->val2 == SL_WIZARD )
continue; //Gemstones are checked, but not subtracted from inventory.
@@ -15408,61 +16016,36 @@ static struct skill_condition skill_get_requirement(struct map_session_data *sd,
req.spiritball = skill->dbs->db[idx].spiritball[skill_lv-1];
- req.state = skill->dbs->db[idx].state;
+ req.state = skill->dbs->db[idx].state[skill_lv - 1];
req.mhp = skill->dbs->db[idx].mhp[skill_lv-1];
+ req.msp = skill->get_msp(skill_id, skill_lv);
+
req.weapon = skill->dbs->db[idx].weapon;
req.ammo_qty = skill->dbs->db[idx].ammo_qty[skill_lv-1];
if (req.ammo_qty)
req.ammo = skill->dbs->db[idx].ammo;
- if (!req.ammo && skill_id && skill->isammotype(sd, skill_id)) {
+ if (req.ammo == 0 && skill_id != 0 && skill->isammotype(sd, skill_id, skill_lv)) {
//Assume this skill is using the weapon, therefore it requires arrows.
req.ammo = 0xFFFFFFFF; //Enable use on all ammo types.
req.ammo_qty = 1;
}
for( i = 0; i < MAX_SKILL_ITEM_REQUIRE; i++ ) {
- int item_idx = (skill_lv - 1) % MAX_SKILL_ITEM_REQUIRE;
- if ((skill_id == AM_POTIONPITCHER || skill_id == CR_SLIMPITCHER || skill_id == CR_CULTIVATION) && i != item_idx)
- continue;
-
switch( skill_id ) {
case AM_CALLHOMUN:
if (sd->status.hom_id) //Don't delete items when hom is already out.
continue;
break;
- case NC_SHAPESHIFT:
- if( i < 4 )
- continue;
- break;
- case WZ_FIREPILLAR: // celest
- if (skill_lv <= 5) // no gems required at level 1-5
- continue;
- break;
case AB_ADORAMUS:
- if( itemid_isgemstone(skill->dbs->db[idx].itemid[i]) && skill->check_pc_partner(sd,skill_id,&skill_lv, 1, 2) )
+ if (itemid_isgemstone(skill->get_itemid(skill_id, i)) && skill->check_pc_partner(sd, skill_id, &skill_lv, 1, 2) != 0)
continue;
break;
case WL_COMET:
- if( itemid_isgemstone(skill->dbs->db[idx].itemid[i]) && skill->check_pc_partner(sd,skill_id,&skill_lv, 1, 0) )
- continue;
- break;
- case GN_FIRE_EXPANSION:
- if( i < 5 )
- continue;
- break;
- case SO_SUMMON_AGNI:
- case SO_SUMMON_AQUA:
- case SO_SUMMON_VENTUS:
- case SO_SUMMON_TERA:
- case SO_WATER_INSIGNIA:
- case SO_FIRE_INSIGNIA:
- case SO_WIND_INSIGNIA:
- case SO_EARTH_INSIGNIA:
- if( i < 3 )
+ if (itemid_isgemstone(skill->get_itemid(skill_id, i)) && skill->check_pc_partner(sd, skill_id, &skill_lv, 1, 0) != 0)
continue;
break;
default:
@@ -15473,8 +16056,17 @@ static struct skill_condition skill_get_requirement(struct map_session_data *sd,
}
}
- req.itemid[i] = skill->dbs->db[idx].itemid[i];
- req.amount[i] = skill->dbs->db[idx].amount[i];
+ int amount;
+
+ if ((amount = skill->get_itemqty(skill_id, i, skill_lv)) >= 0) {
+ req.itemid[i] = skill->get_itemid(skill_id, i);
+ req.amount[i] = amount;
+ }
+
+ if ((amount = skill->get_equip_amount(skill_id, i, skill_lv)) > 0) {
+ req.equip_id[i] = skill->get_equip_id(skill_id, i);
+ req.equip_amount[i] = amount;
+ }
if (itemid_isgemstone(req.itemid[i]) && skill_id != HW_GANBANTEIN) {
if (sd->special_state.no_gemstone) {
@@ -15506,39 +16098,6 @@ static struct skill_condition skill_get_requirement(struct map_session_data *sd,
}
}
- /* requirements are level-dependent */
- switch( skill_id ) {
- case NC_SHAPESHIFT:
- case GN_FIRE_EXPANSION:
- case SO_SUMMON_AGNI:
- case SO_SUMMON_AQUA:
- case SO_SUMMON_VENTUS:
- case SO_SUMMON_TERA:
- case SO_WATER_INSIGNIA:
- case SO_FIRE_INSIGNIA:
- case SO_WIND_INSIGNIA:
- case SO_EARTH_INSIGNIA:
- req.itemid[skill_lv-1] = skill->dbs->db[idx].itemid[skill_lv-1];
- req.amount[skill_lv-1] = skill->dbs->db[idx].amount[skill_lv-1];
- break;
- }
- if (skill_id == NC_REPAIR) {
- switch(skill_lv) {
- case 1:
- case 2:
- req.itemid[1] = ITEMID_REPAIRA;
- break;
- case 3:
- case 4:
- req.itemid[1] = ITEMID_REPAIRB;
- break;
- case 5:
- req.itemid[1] = ITEMID_REPAIRC;
- break;
- }
- req.amount[1] = 1;
- }
-
// Check for cost reductions due to skills & SCs
switch(skill_id) {
case MC_MAMMONITE:
@@ -15724,6 +16283,8 @@ static int skill_castfix_sc(struct block_list *bl, int time)
}
if (sc->data[SC_POEMBRAGI])
time -= time * sc->data[SC_POEMBRAGI]->val2 / 100;
+ if (sc->data[SC_SKF_CAST] != NULL)
+ time -= time * sc->data[SC_SKF_CAST]->val1 / 100;
if (sc->data[SC_IZAYOI])
time -= time * 50 / 100;
}
@@ -15825,6 +16386,8 @@ static int skill_vfcastfix(struct block_list *bl, double time, uint16 skill_id,
}
if (sc->data[SC_MYSTICSCROLL])
VARCAST_REDUCTION(sc->data[SC_MYSTICSCROLL]->val1);
+ if (sc->data[SC_SKF_CAST] != NULL)
+ VARCAST_REDUCTION(sc->data[SC_SKF_CAST]->val1);
// Fixed cast reduction bonuses
if( sc->data[SC__LAZINESS] )
@@ -15976,11 +16539,11 @@ struct square {
int val2[5];
};
-static void skill_brandishspear_first(struct square *tc, uint8 dir, int16 x, int16 y)
+static void skill_brandishspear_first(struct square *tc, enum unit_dir dir, int16 x, int16 y)
{
nullpo_retv(tc);
- if(dir == 0){
+ if (dir == UNIT_DIR_NORTH) {
tc->val1[0]=x-2;
tc->val1[1]=x-1;
tc->val1[2]=x;
@@ -15991,7 +16554,7 @@ static void skill_brandishspear_first(struct square *tc, uint8 dir, int16 x, int
tc->val2[2]=
tc->val2[3]=
tc->val2[4]=y-1;
- } else if(dir==2){
+ } else if (dir == UNIT_DIR_WEST) {
tc->val1[0]=
tc->val1[1]=
tc->val1[2]=
@@ -16002,7 +16565,7 @@ static void skill_brandishspear_first(struct square *tc, uint8 dir, int16 x, int
tc->val2[2]=y;
tc->val2[3]=y-1;
tc->val2[4]=y-2;
- } else if(dir==4){
+ } else if (dir == UNIT_DIR_SOUTH) {
tc->val1[0]=x-2;
tc->val1[1]=x-1;
tc->val1[2]=x;
@@ -16013,7 +16576,7 @@ static void skill_brandishspear_first(struct square *tc, uint8 dir, int16 x, int
tc->val2[2]=
tc->val2[3]=
tc->val2[4]=y+1;
- } else if(dir==6){
+ } else if (dir == UNIT_DIR_EAST) {
tc->val1[0]=
tc->val1[1]=
tc->val1[2]=
@@ -16024,7 +16587,7 @@ static void skill_brandishspear_first(struct square *tc, uint8 dir, int16 x, int
tc->val2[2]=y;
tc->val2[3]=y-1;
tc->val2[4]=y-2;
- } else if(dir==1){
+ } else if (dir == UNIT_DIR_NORTHWEST) {
tc->val1[0]=x-1;
tc->val1[1]=x;
tc->val1[2]=x+1;
@@ -16035,7 +16598,7 @@ static void skill_brandishspear_first(struct square *tc, uint8 dir, int16 x, int
tc->val2[2]=y-1;
tc->val2[3]=y;
tc->val2[4]=y+1;
- } else if(dir==3){
+ } else if (dir == UNIT_DIR_SOUTHWEST) {
tc->val1[0]=x+3;
tc->val1[1]=x+2;
tc->val1[2]=x+1;
@@ -16046,7 +16609,7 @@ static void skill_brandishspear_first(struct square *tc, uint8 dir, int16 x, int
tc->val2[2]=y+1;
tc->val2[3]=y+2;
tc->val2[4]=y+3;
- } else if(dir==5){
+ } else if (dir == UNIT_DIR_SOUTHEAST) {
tc->val1[0]=x+1;
tc->val1[1]=x;
tc->val1[2]=x-1;
@@ -16057,7 +16620,7 @@ static void skill_brandishspear_first(struct square *tc, uint8 dir, int16 x, int
tc->val2[2]=y+1;
tc->val2[3]=y;
tc->val2[4]=y-1;
- } else if(dir==7){
+ } else if (dir == UNIT_DIR_NORTHEAST) {
tc->val1[0]=x-3;
tc->val1[1]=x-2;
tc->val1[2]=x-1;
@@ -16072,36 +16635,27 @@ static void skill_brandishspear_first(struct square *tc, uint8 dir, int16 x, int
}
-static void skill_brandishspear_dir(struct square *tc, uint8 dir, int are)
+static void skill_brandishspear_dir(struct square *tc, enum unit_dir dir, int are)
{
- int c;
nullpo_retv(tc);
+ Assert_retv(dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX);
- for( c = 0; c < 5; c++ ) {
- switch( dir ) {
- case 0: tc->val2[c]+=are; break;
- case 1: tc->val1[c]-=are; tc->val2[c]+=are; break;
- case 2: tc->val1[c]-=are; break;
- case 3: tc->val1[c]-=are; tc->val2[c]-=are; break;
- case 4: tc->val2[c]-=are; break;
- case 5: tc->val1[c]+=are; tc->val2[c]-=are; break;
- case 6: tc->val1[c]+=are; break;
- case 7: tc->val1[c]+=are; tc->val2[c]+=are; break;
- }
+ for (int c = 0; c < 5; c++) {
+ tc->val1[c] += dirx[dir] * are;
+ tc->val2[c] += diry[dir] * are;
}
}
static void skill_brandishspear(struct block_list *src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int64 tick, int flag)
{
int c,n=4;
- uint8 dir;
struct square tc;
int x, y;
nullpo_retv(bl);
x = bl->x;
y = bl->y;
- dir = map->calc_dir(src, x, y);
+ enum unit_dir dir = map->calc_dir(src, x, y);
skill->brandishspear_first(&tc,dir,x,y);
skill->brandishspear_dir(&tc,dir,4);
skill->area_temp[1] = bl->id;
@@ -16588,7 +17142,7 @@ static int skill_clear_group(struct block_list *bl, int flag)
}
for (i=0;i<count;i++)
- skill->del_unitgroup(group[i],ALC_MARK);
+ skill->del_unitgroup(group[i]);
return count;
}
@@ -16947,7 +17501,7 @@ static int skill_trap_splash(struct block_list *bl, va_list ap)
}
/* Fall through */
default:
- skill->attack(skill->get_type(sg->skill_id), ss, src, bl, sg->skill_id, sg->skill_lv, tick, enemy_count);
+ skill->attack(skill->get_type(sg->skill_id, sg->skill_lv), ss, src, bl, sg->skill_id, sg->skill_lv, tick, enemy_count);
break;
}
return 1;
@@ -17236,7 +17790,7 @@ static int skill_delunit(struct skill_unit *su)
map->deliddb(&su->bl);
idb_remove(skill->unit_db, su->bl.id);
if(--group->alive_count==0)
- skill->del_unitgroup(group,ALC_MARK);
+ skill->del_unitgroup(group);
return 0;
}
@@ -17273,13 +17827,20 @@ static int skill_get_new_group_id(void)
static struct skill_unit_group *skill_initunitgroup(struct block_list *src, int count, uint16 skill_id, uint16 skill_lv, int unit_id, int limit, int interval)
{
- struct unit_data* ud = unit->bl2ud( src );
struct skill_unit_group* group;
int i;
if(!(skill_id && skill_lv)) return 0;
nullpo_retr(NULL, src);
+
+ struct unit_data *ud;
+
+ if (src->type == BL_NPC)
+ ud = unit->bl2ud2(src);
+ else
+ ud = unit->bl2ud(src);
+
nullpo_retr(NULL, ud);
// find a free spot to store the new unit group
@@ -17295,7 +17856,7 @@ static struct skill_unit_group *skill_initunitgroup(struct block_list *src, int
j = i;
}
}
- skill->del_unitgroup(ud->skillunit[j],ALC_MARK);
+ skill->del_unitgroup(ud->skillunit[j]);
//Since elements must have shifted, we use the last slot.
i = MAX_SKILLUNITGROUP-1;
}
@@ -17334,18 +17895,13 @@ static struct skill_unit_group *skill_initunitgroup(struct block_list *src, int
/*==========================================
*
*------------------------------------------*/
-static int skill_delunitgroup(struct skill_unit_group *group, const char *file, int line, const char *func)
+static int skill_delunitgroup(struct skill_unit_group *group)
{
struct block_list* src;
struct unit_data *ud;
int i,j;
struct map_session_data *sd = NULL;
- if( group == NULL ) {
- ShowDebug("skill_delunitgroup: group is NULL (source=%s:%d, %s)! Please report this! (#3504)\n", file, line, func);
- return 0;
- }
-
src = map->id2bl(group->src_id);
ud = unit->bl2ud(src);
sd = BL_CAST(BL_PC, src);
@@ -17477,7 +18033,7 @@ static int skill_clear_unitgroup(struct block_list *src)
nullpo_ret(ud);
while (ud->skillunit[0])
- skill->del_unitgroup(ud->skillunit[0],ALC_MARK);
+ skill->del_unitgroup(ud->skillunit[0]);
return 1;
}
@@ -17636,7 +18192,7 @@ static int skill_unit_timer_sub(union DBKey key, struct DBData *data, va_list ap
case UNT_WARP_ACTIVE:
// warp portal opens (morph to a UNT_WARP_WAITING cell)
- group->unit_id = skill->get_unit_id(group->skill_id, 1); // UNT_WARP_WAITING
+ group->unit_id = skill->get_unit_id(group->skill_id, group->skill_lv, 1); // UNT_WARP_WAITING
clif->changelook(&su->bl, LOOK_BASE, group->unit_id);
// restart timers
group->limit = skill->get_time(group->skill_id,group->skill_lv);
@@ -18763,12 +19319,12 @@ static int skill_poisoningweapon(struct map_session_data *sd, int nameid)
return 0;
}
-static void skill_toggle_magicpower(struct block_list *bl, uint16 skill_id)
+static void skill_toggle_magicpower(struct block_list *bl, uint16 skill_id, int skill_lv)
{
struct status_change *sc = status->get_sc(bl);
// non-offensive and non-magic skills do not affect the status
- if (skill->get_nk(skill_id)&NK_NO_DAMAGE || !(skill->get_type(skill_id)&BF_MAGIC))
+ if ((skill->get_nk(skill_id) & NK_NO_DAMAGE) != 0 || (skill->get_type(skill_id, skill_lv) & BF_MAGIC) == 0)
return;
if (sc && sc->count && sc->data[SC_MAGICPOWER]) {
@@ -18902,14 +19458,20 @@ static int skill_select_menu(struct map_session_data *sd, uint16 skill_id)
idx = skill->get_index(skill_id);
- if( skill_id >= GS_GLITTERING || skill->get_type(skill_id) != BF_MAGIC ||
- (id = sd->status.skill[idx].id) == 0 || sd->status.skill[idx].flag != SKILL_FLAG_PLAGIARIZED ) {
+ if (skill_id >= GS_GLITTERING || (id = sd->status.skill[idx].id) == 0
+ || sd->status.skill[idx].flag != SKILL_FLAG_PLAGIARIZED) {
clif->skill_fail(sd, SC_AUTOSHADOWSPELL, 0, 0, 0);
return 0;
}
lv = (aslvl + 1) / 2; // The level the skill will be autocasted
- lv = min(lv,sd->status.skill[idx].lv);
+ lv = min(lv, sd->status.skill[idx].lv);
+
+ if (skill->get_type(skill_id, lv) != BF_MAGIC) {
+ clif->skill_fail(sd, SC_AUTOSHADOWSPELL, 0, 0, 0);
+ return 0;
+ }
+
prob = (aslvl == 10) ? 15 : (32 - 2 * aslvl); // Probability at level 10 was increased to 15.
sc_start4(&sd->bl,&sd->bl,SC__AUTOSHADOWSPELL,100,id,lv,prob,0,skill->get_time(SC_AUTOSHADOWSPELL,aslvl));
return 0;
@@ -20050,9 +20612,6 @@ static bool skill_parse_row_changematerialdb(char *split[], int columns, int cur
return true;
}
-#define skilldb_duplicate_warning(name, setting, skill) (ShowError("skill_read_skilldb: Duplicate entry '%s' in setting '%s' for Skill Id %d in '%s', skipping...\n", name, setting, skill, "db/"DBPATH"skill_db.conf"))
-#define skilldb_invalid_error(name, setting, skill) (ShowError("skill_read_skilldb: Invalid entry '%s' in setting '%s' for Skill Id %d in '%s', skipping...\n", name, setting, skill, "db/"DBPATH"skill_db.conf"))
-
/**
* Sets Level based configuration for skill groups from skill_db.conf [ Smokexyz/Hercules ]
* @param *conf pointer to config setting.
@@ -20097,295 +20656,549 @@ static void skill_level_set_value(int *arr, int value)
}
}
-static void skill_validate_hittype(struct config_setting_t *conf, struct s_skill_db *sk)
+/**
+ * Validates a skill's ID when reading the skill DB.
+ * If validating fails, the ID is set to 0.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the ID should be set it.
+ * @param conf_index The 1-based index of the currently processed libconfig settings block.
+ *
+ **/
+static void skill_validate_id(struct config_setting_t *conf, struct s_skill_db *sk, int conf_index)
{
- const char *type = NULL;
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+ sk->nameid = 0;
+
+ int id;
+
+ if (libconfig->setting_lookup_int(conf, "Id", &id) == CONFIG_FALSE)
+ ShowError("%s: No skill ID specified in entry %d in %s! Skipping skill...\n",
+ __func__, conf_index, conf->file);
+ else if (id <= 0)
+ ShowError("%s: Invalid skill ID %d specified in entry %d in %s! Skipping skill...\n",
+ __func__, id, conf_index, conf->file);
+ else if(skill->get_index(id) == 0)
+ ShowError("%s: Skill ID %d in entry %d in %s is out of range, or within a reserved range (for guild, homunculus, mercenary or elemental skills)! Skipping skill...\n",
+ __func__, id, conf_index, conf->file);
+ else if (*skill->get_name(id) != '\0')
+ ShowError("%s: Duplicate skill ID %d in entry %d in %s! Skipping skill...\n",
+ __func__, id, conf_index, conf->file);
+ else
+ sk->nameid = id;
+}
+
+/**
+ * Validates if a skill's name contains invalid characters when reading the skill DB.
+ *
+ * @param name The name to validate.
+ * @return True if the passed name is a NULL pointer or contains at least one invalid character, otherwise false.
+ *
+ **/
+static bool skill_name_contains_invalid_character(const char *name)
+{
+ nullpo_retr(true, name);
+
+ for (int i = 0; i < MAX_SKILL_NAME_LENGTH && name[i] != '\0'; i++) {
+ if (ISALNUM(name[i]) == 0 && name[i] != '_')
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Validates a skill's name when reading the skill DB.
+ * If validating fails, the name is set to an enpty string.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the name should be set it.
+ *
+ **/
+static void skill_validate_name(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
nullpo_retv(sk);
- if (libconfig->setting_lookup_string(conf, "Hit", &type)) {
- if (strcmpi(type, "BDT_SKILL") == 0) {
- sk->hit = BDT_SKILL;
- } else if (strcmpi(type, "BDT_MULTIHIT") == 0) {
- sk->hit = BDT_MULTIHIT;
- } else if (strcmpi(type, "BDT_NORMAL") == 0) {
- sk->hit = BDT_NORMAL;
- } else {
- skilldb_invalid_error(type, "Hit", sk->nameid);
+
+ *sk->name = '\0';
+
+ const char *name;
+
+ if (libconfig->setting_lookup_string(conf, "Name", &name) == CONFIG_FALSE || *name == '\0')
+ ShowError("%s: No name specified for skill ID %d in %s! Skipping skill...\n",
+ __func__, sk->nameid, conf->file);
+ else if (strlen(name) >= sizeof(sk->name))
+ ShowError("%s: Specified name %s for skill ID %d in %s is too long: %d! Maximum is %d. Skipping skill...\n",
+ __func__, name, sk->nameid, conf->file, (int)strlen(name), (int)sizeof(sk->name) - 1);
+ else if (skill->name_contains_invalid_character(name))
+ ShowError("%s: Specified name %s for skill ID %d in %s contains invalid characters! Allowed characters are letters, numbers and underscores. Skipping skill...\n",
+ __func__, name, sk->nameid, conf->file);
+ else if (skill->name2id(name) != 0)
+ ShowError("%s: Duplicate name %s for skill ID %d in %s! Skipping skill...\n",
+ __func__, name, sk->nameid, conf->file);
+ else
+ safestrncpy(sk->name, name, sizeof(sk->name));
+}
+
+/**
+ * Validates a skill's maximum level when reading the skill DB.
+ * If validating fails, the maximum level is set to 0.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the maximum level should be set it.
+ *
+ **/
+static void skill_validate_max_level(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ sk->max = 0;
+
+ int max_level;
+
+ if (libconfig->setting_lookup_int(conf, "MaxLevel", &max_level) == CONFIG_FALSE)
+ ShowError("%s: No maximum level specified for skill ID %d in %s! Skipping skill...\n",
+ __func__, sk->nameid, conf->file);
+ else if (max_level < 1 || max_level > MAX_SKILL_LEVEL)
+ ShowError("%s: Invalid maximum level %d specified for skill ID %d in %s! Minimum is 1, maximum is %d. Skipping skill...\n",
+ __func__, max_level, sk->nameid, conf->file, MAX_SKILL_LEVEL);
+ else
+ sk->max = max_level;
+}
+
+/**
+ * Validates a skill's description when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the description should be set it.
+ *
+ **/
+static void skill_validate_description(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ *sk->desc = '\0';
+
+ const char *description;
+
+ if (libconfig->setting_lookup_string(conf, "Description", &description) == CONFIG_TRUE && *description != '\0') {
+ if (strlen(description) >= sizeof(sk->desc))
+ ShowWarning("%s: Specified description '%s' for skill ID %d in %s is too long: %d! Maximum is %d. Trimming...\n",
+ __func__, description, sk->nameid, conf->file, (int)strlen(description), (int)sizeof(sk->desc) - 1);
+
+ safestrncpy(sk->desc, description, sizeof(sk->desc));
+ }
+}
+
+/**
+ * Validates a skill's range when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the range should be set it.
+ *
+ **/
+static void skill_validate_range(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->range, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Range");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int range;
+
+ if (libconfig->setting_lookup_int(t, lv, &range) == CONFIG_TRUE) {
+ if (range >= SHRT_MIN && range <= SHRT_MAX)
+ sk->range[i] = range;
+ else
+ ShowWarning("%s: Invalid range %d specified in level %d for skill ID %d in %s! Minimum is %d, maximum is %d. Defaulting to 0...\n",
+ __func__, range, i + 1, sk->nameid, conf->file, SHRT_MIN, SHRT_MAX);
+ }
+ }
+
+ return;
+ }
+
+ int range;
+
+ if (libconfig->setting_lookup_int(conf, "Range", &range) == CONFIG_TRUE) {
+ if (range >= SHRT_MIN && range <= SHRT_MAX)
+ skill->level_set_value(sk->range, range);
+ else
+ ShowWarning("%s: Invalid range %d specified for skill ID %d in %s! Minimum is %d, maximum is %d. Defaulting to 0...\n",
+ __func__, range, sk->nameid, conf->file, SHRT_MIN, SHRT_MAX);
+ }
+}
+
+/**
+ * Validates a skill's hit type when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the hit type should be set it.
+ *
+ **/
+static void skill_validate_hittype(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->hit, BDT_NORMAL);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Hit");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ const char *hit_type;
+
+ if (libconfig->setting_lookup_string(t, lv, &hit_type) == CONFIG_TRUE) {
+ if (strcmpi(hit_type, "BDT_SKILL") == 0)
+ sk->hit[i] = BDT_SKILL;
+ else if (strcmpi(hit_type, "BDT_MULTIHIT") == 0)
+ sk->hit[i] = BDT_MULTIHIT;
+ else if (strcmpi(hit_type, "BDT_NORMAL") != 0)
+ ShowWarning("%s: Invalid hit type %s specified in level %d for skill ID %d in %s! Defaulting to BDT_NORMAL...\n",
+ __func__, hit_type, i + 1, sk->nameid, conf->file);
+ }
+ }
+
+ return;
+ }
+
+ const char *hit_type;
+
+ if (libconfig->setting_lookup_string(conf, "Hit", &hit_type) == CONFIG_TRUE) {
+ int hit = BDT_NORMAL;
+
+ if (strcmpi(hit_type, "BDT_SKILL") == 0) {
+ hit = BDT_SKILL;
+ } else if (strcmpi(hit_type, "BDT_MULTIHIT") == 0) {
+ hit = BDT_MULTIHIT;
+ } else if (strcmpi(hit_type, "BDT_NORMAL") != 0) {
+ ShowWarning("%s: Invalid hit type %s specified for skill ID %d in %s! Defaulting to BDT_NORMAL...\n",
+ __func__, hit_type, sk->nameid, conf->file);
return;
}
+
+ skill->level_set_value(sk->hit, hit);
}
}
/**
- * Validates "SkillType" when reading skill_db.conf
- * @param conf struct, pointer to skill configuration
- * @param sk struct, pointer to s_skill_db
- * @return (void)
- */
+ * Validates a skill's types when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the types should be set it.
+ *
+ **/
static void skill_validate_skilltype(struct config_setting_t *conf, struct s_skill_db *sk)
{
- struct config_setting_t *t = NULL, *tt = NULL;
-
+ nullpo_retv(conf);
nullpo_retv(sk);
- if((t=libconfig->setting_get_member(conf, "SkillType")) && config_setting_is_group(t)) {
- int j=0;
- while ((tt = libconfig->setting_get_elem(t, j++))) {
- const char *type = config_setting_name(tt);
+
+ sk->inf = INF_NONE;
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "SkillType");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ struct config_setting_t *tt;
+ int i = 0;
+
+ while ((tt = libconfig->setting_get_elem(t, i++)) != NULL) {
+ const char *skill_type = config_setting_name(tt);
bool on = libconfig->setting_get_bool_real(tt);
- if (strcmpi(type, "Enemy") == 0) {
- if (on) {
+ if (strcmpi(skill_type, "Enemy") == 0) {
+ if (on)
sk->inf |= INF_ATTACK_SKILL;
- } else {
+ else
sk->inf &= ~INF_ATTACK_SKILL;
- }
- } else if (strcmpi(type, "Place") == 0) {
- if (on) {
+ } else if (strcmpi(skill_type, "Place") == 0) {
+ if (on)
sk->inf |= INF_GROUND_SKILL;
- } else {
+ else
sk->inf &= ~INF_GROUND_SKILL;
- }
- } else if (strcmpi(type, "Self") == 0) {
- if (on) {
+ } else if (strcmpi(skill_type, "Self") == 0) {
+ if (on)
sk->inf |= INF_SELF_SKILL;
- } else {
+ else
sk->inf &= ~INF_SELF_SKILL;
- }
- } else if (strcmpi(type, "Friend") == 0) {
- if (on) {
+ } else if (strcmpi(skill_type, "Friend") == 0) {
+ if (on)
sk->inf |= INF_SUPPORT_SKILL;
- } else {
+ else
sk->inf &= ~INF_SUPPORT_SKILL;
- }
- } else if (strcmpi(type, "Trap") == 0) {
- if (on) {
+ } else if (strcmpi(skill_type, "Trap") == 0) {
+ if (on)
sk->inf |= INF_TARGET_TRAP;
- } else {
+ else
sk->inf &= ~INF_TARGET_TRAP;
- }
- } else if (strcmpi(type, "Passive") != 0) {
- skilldb_invalid_error(type, config_setting_name(t), sk->nameid);
+ } else if (strcmpi(skill_type, "Passive") != 0) {
+ ShowWarning("%s: Invalid skill type %s specified for skill ID %d in %s! Skipping type...\n",
+ __func__, skill_type, sk->nameid, conf->file);
}
}
}
}
/**
- * Validates "SkillInfo" when reading skill_db.conf
- * @param conf struct, pointer to skill configuration
- * @param sk struct, pointer to s_skill_db
- * @return (void)
- */
+ * Validates a skill's sub-types when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the sub-types should be set it.
+ *
+ **/
static void skill_validate_skillinfo(struct config_setting_t *conf, struct s_skill_db *sk)
{
- struct config_setting_t *t = NULL, *tt = NULL;
-
+ nullpo_retv(conf);
nullpo_retv(sk);
- if ((t=libconfig->setting_get_member(conf, "SkillInfo")) && config_setting_is_group(t)) {
- int j=0;
- while ((tt = libconfig->setting_get_elem(t, j++))) {
- const char *type = config_setting_name(tt);
+
+ sk->inf2 = INF2_NONE;
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "SkillInfo");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ struct config_setting_t *tt;
+ int i = 0;
+
+ while ((tt = libconfig->setting_get_elem(t, i++)) != NULL) {
+ const char *skill_info = config_setting_name(tt);
bool on = libconfig->setting_get_bool_real(tt);
- if (strcmpi(type, "Quest") == 0) {
- if (on) {
+ if (strcmpi(skill_info, "Quest") == 0) {
+ if (on)
sk->inf2 |= INF2_QUEST_SKILL;
- } else {
+ else
sk->inf2 &= ~INF2_QUEST_SKILL;
- }
- } else if (strcmpi(type, "NPC") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "NPC") == 0) {
+ if (on)
sk->inf2 |= INF2_NPC_SKILL;
- } else {
+ else
sk->inf2 &= ~INF2_NPC_SKILL;
- }
- } else if (strcmpi(type, "Wedding") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "Wedding") == 0) {
+ if (on)
sk->inf2 |= INF2_WEDDING_SKILL;
- } else {
+ else
sk->inf2 &= ~INF2_WEDDING_SKILL;
- }
- } else if (strcmpi(type, "Spirit") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "Spirit") == 0) {
+ if (on)
sk->inf2 |= INF2_SPIRIT_SKILL;
- } else {
+ else
sk->inf2 &= ~INF2_SPIRIT_SKILL;
- }
- } else if (strcmpi(type, "Guild") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "Guild") == 0) {
+ if (on)
sk->inf2 |= INF2_GUILD_SKILL;
- } else {
+ else
sk->inf2 &= ~INF2_GUILD_SKILL;
- }
- } else if (strcmpi(type, "Song") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "Song") == 0) {
+ if (on)
sk->inf2 |= INF2_SONG_DANCE;
- } else {
+ else
sk->inf2 &= ~INF2_SONG_DANCE;
- }
- } else if (strcmpi(type, "Ensemble") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "Ensemble") == 0) {
+ if (on)
sk->inf2 |= INF2_ENSEMBLE_SKILL;
- } else {
+ else
sk->inf2 &= ~INF2_ENSEMBLE_SKILL;
- }
- } else if (strcmpi(type, "Trap") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "Trap") == 0) {
+ if (on)
sk->inf2 |= INF2_TRAP;
- } else {
+ else
sk->inf2 &= ~INF2_TRAP;
- }
- } else if (strcmpi(type, "TargetSelf") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "TargetSelf") == 0) {
+ if (on)
sk->inf2 |= INF2_TARGET_SELF;
- } else {
+ else
sk->inf2 &= ~INF2_TARGET_SELF;
- }
- } else if (strcmpi(type, "NoCastSelf") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "NoCastSelf") == 0) {
+ if (on)
sk->inf2 |= INF2_NO_TARGET_SELF;
- } else {
+ else
sk->inf2 &= ~INF2_NO_TARGET_SELF;
- }
- } else if (strcmpi(type, "PartyOnly") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "PartyOnly") == 0) {
+ if (on)
sk->inf2 |= INF2_PARTY_ONLY;
- } else {
+ else
sk->inf2 &= ~INF2_PARTY_ONLY;
- }
- } else if (strcmpi(type, "GuildOnly") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "GuildOnly") == 0) {
+ if (on)
sk->inf2 |= INF2_GUILD_ONLY;
- } else {
+ else
sk->inf2 &= ~INF2_GUILD_ONLY;
- }
- } else if (strcmpi(type, "NoEnemy") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "NoEnemy") == 0) {
+ if (on)
sk->inf2 |= INF2_NO_ENEMY;
- } else {
+ else
sk->inf2 &= ~INF2_NO_ENEMY;
- }
- } else if (strcmpi(type, "IgnoreLandProtector") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "IgnoreLandProtector") == 0) {
+ if (on)
sk->inf2 |= INF2_NOLP;
- } else {
+ else
sk->inf2 &= ~INF2_NOLP;
- }
- } else if (strcmpi(type, "Chorus") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "Chorus") == 0) {
+ if (on)
sk->inf2 |= INF2_CHORUS_SKILL;
- } else {
+ else
sk->inf2 &= ~INF2_CHORUS_SKILL;
- }
- } else if (strcmpi(type, "FreeCastNormal") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "FreeCastNormal") == 0) {
+ if (on)
sk->inf2 |= INF2_FREE_CAST_NORMAL;
- } else {
+ else
sk->inf2 &= ~INF2_FREE_CAST_NORMAL;
- }
- } else if (strcmpi(type, "FreeCastReduced") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "FreeCastReduced") == 0) {
+ if (on)
sk->inf2 |= INF2_FREE_CAST_REDUCED;
- } else {
+ else
sk->inf2 &= ~INF2_FREE_CAST_REDUCED;
- }
- } else if (strcmpi(type, "ShowSkillScale") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "ShowSkillScale") == 0) {
+ if (on)
sk->inf2 |= INF2_SHOW_SKILL_SCALE;
- } else {
+ else
sk->inf2 &= ~INF2_SHOW_SKILL_SCALE;
- }
- } else if (strcmpi(type, "AllowReproduce") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "AllowReproduce") == 0) {
+ if (on)
sk->inf2 |= INF2_ALLOW_REPRODUCE;
- } else {
+ else
sk->inf2 &= ~INF2_ALLOW_REPRODUCE;
- }
- } else if (strcmpi(type, "HiddenTrap") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "HiddenTrap") == 0) {
+ if (on)
sk->inf2 |= INF2_HIDDEN_TRAP;
- } else {
+ else
sk->inf2 &= ~INF2_HIDDEN_TRAP;
- }
- } else if (strcmpi(type, "IsCombo") == 0) {
- if (on) {
+ } else if (strcmpi(skill_info, "IsCombo") == 0) {
+ if (on)
sk->inf2 |= INF2_IS_COMBO_SKILL;
- } else {
+ else
sk->inf2 &= ~INF2_IS_COMBO_SKILL;
- }
- } else if (strcmpi(type, "None") != 0) {
- skilldb_invalid_error(type, config_setting_name(t), sk->nameid);
+ } else if (strcmpi(skill_info, "None") != 0) {
+ ShowWarning("%s: Invalid sub-type %s specified for skill ID %d in %s! Skipping sub-type...\n",
+ __func__, skill_info, sk->nameid, conf->file);
}
}
}
}
/**
- * Validates "AttackType" when reading skill_db.conf
- * @param conf struct, pointer to skill configuration
- * @param sk struct, pointer to s_skill_db
- * @return (void)
- */
+ * Validates a skill's attack type when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the attack type should be set it.
+ *
+ **/
static void skill_validate_attacktype(struct config_setting_t *conf, struct s_skill_db *sk)
{
- const char *type = NULL;
-
+ nullpo_retv(conf);
nullpo_retv(sk);
- if (libconfig->setting_lookup_string(conf, "AttackType", &type)) {
- if (!strcmpi(type, "Weapon")) {
- sk->skill_type = BF_WEAPON;
- } else if (!strcmpi(type, "Magic")) {
- sk->skill_type = BF_MAGIC;
- } else if (!strcmpi(type, "Misc")) {
- sk->skill_type = BF_MISC;
- } else {
- skilldb_invalid_error(type, "AttackType", sk->nameid);
+
+ skill->level_set_value(sk->skill_type, BF_NONE);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "AttackType");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ const char *attack_type;
+
+ if (libconfig->setting_lookup_string(t, lv, &attack_type) == CONFIG_TRUE) {
+ if (strcmpi(attack_type, "Weapon") == 0)
+ sk->skill_type[i] = BF_WEAPON;
+ else if (strcmpi(attack_type, "Magic") == 0)
+ sk->skill_type[i] = BF_MAGIC;
+ else if (strcmpi(attack_type, "Misc") == 0)
+ sk->skill_type[i] = BF_MISC;
+ else if (strcmpi(attack_type, "None") != 0)
+ ShowWarning("%s: Invalid attack type %s specified in level %d for skill ID %d in %s! Defaulting to None...\n",
+ __func__, attack_type, i + 1, sk->nameid, conf->file);
+ }
+ }
+
+ return;
+ }
+
+ const char *attack_type;
+
+ if (libconfig->setting_lookup_string(conf, "AttackType", &attack_type) == CONFIG_TRUE) {
+ int attack = BF_NONE;
+
+ if (strcmpi(attack_type, "Weapon") == 0) {
+ attack = BF_WEAPON;
+ } else if (strcmpi(attack_type, "Magic") == 0) {
+ attack = BF_MAGIC;
+ } else if (strcmpi(attack_type, "Misc") == 0) {
+ attack = BF_MISC;
+ } else if (strcmpi(attack_type, "None") != 0) {
+ ShowWarning("%s: Invalid attack type %s specified for skill ID %d in %s! Defaulting to None...\n",
+ __func__, attack_type, sk->nameid, conf->file);
return;
}
+
+ skill->level_set_value(sk->skill_type, attack);
}
}
/**
- * Validates "Element" when reading skill_db.conf
- * @param ele_t struct, pointer to skill configuration
- * @param sk struct, pointer to s_skill_db
- * @return (void)
- */
+ * Validates a skill's element when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the element should be set it.
+ *
+ **/
static void skill_validate_element(struct config_setting_t *conf, struct s_skill_db *sk)
{
- const char *type = NULL;
- struct config_setting_t *t = NULL;
-
+ nullpo_retv(conf);
nullpo_retv(sk);
- if ((t=libconfig->setting_get_member(conf, "Element")) && config_setting_is_group(t)) {
- int j = 0;
- char lv[6]; // enough to contain "Lv100" in case of custom MAX_SKILL_LEVEL
- for (j=0; j < MAX_SKILL_LEVEL; j++) {
- sprintf(lv, "Lv%d",j+1);
- if (libconfig->setting_lookup_string(t, lv, &type)) {
- if (strcmpi(type,"Ele_Weapon") == 0)
- sk->element[j] = -1;
- else if (strcmpi(type,"Ele_Endowed") == 0)
- sk->element[j] = -2;
- else if (strcmpi(type,"Ele_Random") == 0)
- sk->element[j] = -3;
- else if (!script->get_constant(type,&sk->element[j]))
- skilldb_invalid_error(type, config_setting_name(conf), sk->nameid);
+ skill->level_set_value(sk->element, ELE_NEUTRAL);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Element");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ const char *element;
+
+ if (libconfig->setting_lookup_string(t, lv, &element) == CONFIG_TRUE) {
+ if (strcmpi(element, "Ele_Weapon") == 0)
+ sk->element[i] = -1;
+ else if (strcmpi(element, "Ele_Endowed") == 0)
+ sk->element[i] = -2;
+ else if (strcmpi(element, "Ele_Random") == 0)
+ sk->element[i] = -3;
+ else if (!script->get_constant(element, &sk->element[i]))
+ ShowWarning("%s: Invalid element %s specified in level %d for skill ID %d in %s! Defaulting to Ele_Neutral...\n",
+ __func__, element, i + 1, sk->nameid, conf->file);
}
}
- } else if (libconfig->setting_lookup_string(conf, "Element", &type)) {
- int ele = 0;
+ return;
+ }
+
+ const char *element;
+
+ if (libconfig->setting_lookup_string(conf, "Element", &element) == CONFIG_TRUE) {
+ int ele = ELE_NEUTRAL;
- if (strcmpi(type,"Ele_Weapon") == 0)
+ if (strcmpi(element, "Ele_Weapon") == 0) {
ele = -1;
- else if (strcmpi(type,"Ele_Endowed") == 0)
+ } else if (strcmpi(element, "Ele_Endowed") == 0) {
ele = -2;
- else if (strcmpi(type,"Ele_Random") == 0)
+ } else if (strcmpi(element, "Ele_Random") == 0) {
ele = -3;
- else if (!script->get_constant(type, &ele)) {
- skilldb_invalid_error(type, config_setting_name(conf), sk->nameid);
+ } else if (!script->get_constant(element, &ele)) {
+ ShowWarning("%s: Invalid element %s specified for skill ID %d in %s! Defaulting to Ele_Neutral...\n",
+ __func__, element, sk->nameid, conf->file);
return;
}
@@ -20394,696 +21207,2513 @@ static void skill_validate_element(struct config_setting_t *conf, struct s_skill
}
/**
- * Validates "DamageType" when reading skill_db.conf
- * @param conf struct, pointer to skill configuration
- * @param sk struct, pointer to s_skill_db
- * @return (void)
- */
+ * Validates a skill's damage types when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the damage types should be set it.
+ *
+ **/
static void skill_validate_damagetype(struct config_setting_t *conf, struct s_skill_db *sk)
{
- struct config_setting_t *t = NULL, *tt = NULL;
-
+ nullpo_retv(conf);
nullpo_retv(sk);
- if ((t=libconfig->setting_get_member(conf, "DamageType")) && config_setting_is_group(t)) {
- int j=0;
- while ((tt = libconfig->setting_get_elem(t, j++))) {
- const char *type = config_setting_name(tt);
+
+ sk->nk = NK_NONE;
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "DamageType");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ struct config_setting_t *tt;
+ int i = 0;
+
+ while ((tt = libconfig->setting_get_elem(t, i++)) != NULL) {
+ const char *damage_type = config_setting_name(tt);
bool on = libconfig->setting_get_bool_real(tt);
- if (strcmpi(type, "NoDamage") == 0) {
- if (on) {
+ if (strcmpi(damage_type, "NoDamage") == 0) {
+ if (on)
sk->nk |= NK_NO_DAMAGE;
- } else {
+ else
sk->nk &= ~NK_NO_DAMAGE;
- }
- } else if (strcmpi(type, "SplashArea") == 0) {
- if (on) {
+ } else if (strcmpi(damage_type, "SplashArea") == 0) {
+ if (on)
sk->nk |= NK_SPLASH_ONLY;
- } else {
+ else
sk->nk &= ~NK_SPLASH_ONLY;
- }
- } else if (strcmpi(type, "SplitDamage") == 0) {
- if (on) {
+ } else if (strcmpi(damage_type, "SplitDamage") == 0) {
+ if (on)
sk->nk |= NK_SPLASHSPLIT;
- } else {
+ else
sk->nk &= ~NK_SPLASHSPLIT;
- }
- } else if (strcmpi(type, "IgnoreCards") == 0) {
- if (on) {
+ } else if (strcmpi(damage_type, "IgnoreCards") == 0) {
+ if (on)
sk->nk |= NK_NO_CARDFIX_ATK;
- } else {
+ else
sk->nk &= ~NK_NO_CARDFIX_ATK;
- }
- } else if (strcmpi(type, "IgnoreElement") == 0) {
- if (on) {
+ } else if (strcmpi(damage_type, "IgnoreElement") == 0) {
+ if (on)
sk->nk |= NK_NO_ELEFIX;
- } else {
+ else
sk->nk &= ~NK_NO_ELEFIX;
- }
- } else if (strcmpi(type, "IgnoreDefense") == 0) {
- if (on) {
+ } else if (strcmpi(damage_type, "IgnoreDefense") == 0) {
+ if (on)
sk->nk |= NK_IGNORE_DEF;
- } else {
+ else
sk->nk &= ~NK_IGNORE_DEF;
- }
- } else if (strcmpi(type, "IgnoreFlee") == 0) {
- if (on) {
+ } else if (strcmpi(damage_type, "IgnoreFlee") == 0) {
+ if (on)
sk->nk |= NK_IGNORE_FLEE;
- } else {
+ else
sk->nk &= ~NK_IGNORE_FLEE;
- }
- } else if (strcmpi(type, "IgnoreDefCards") == 0) {
- if (on) {
+ } else if (strcmpi(damage_type, "IgnoreDefCards") == 0) {
+ if (on)
sk->nk |= NK_NO_CARDFIX_DEF;
- } else {
+ else
sk->nk &= ~NK_NO_CARDFIX_DEF;
- }
} else {
- skilldb_invalid_error(type, config_setting_name(t), sk->nameid);
+ ShowWarning("%s: Invalid damage type %s specified for skill ID %d in %s! Skipping damage type...\n",
+ __func__, damage_type, sk->nameid, conf->file);
}
}
}
}
/**
- * Validates "SkillCast/DelayOptions" when reading skill_db.conf
- * @param conf struct, pointer to skill configuration
- * @param sk struct, pointer to s_skill_db
- * @param delay boolean, switch for cast/delay setting
- * @return (void)
- */
-static void skill_validate_castnodex(struct config_setting_t *conf, struct s_skill_db *sk, bool delay)
+ * Validates a skill's splash range when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the splash range should be set it.
+ *
+ **/
+static void skill_validate_splash_range(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->splash, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "SplashRange");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int splash_range;
+
+ if (libconfig->setting_lookup_int(t, lv, &splash_range) == CONFIG_TRUE) {
+ if (splash_range >= SHRT_MIN && splash_range <= SHRT_MAX)
+ sk->splash[i] = splash_range;
+ else
+ ShowWarning("%s: Invalid splash range %d specified in level %d for skill ID %d in %s! Minimum is %d, maximum is %d. Defaulting to 0...\n",
+ __func__, splash_range, i + 1, sk->nameid, conf->file, SHRT_MIN, SHRT_MAX);
+ }
+ }
+
+ return;
+ }
+
+ int splash_range;
+
+ if (libconfig->setting_lookup_int(conf, "SplashRange", &splash_range) == CONFIG_TRUE) {
+ if (splash_range >= SHRT_MIN && splash_range <= SHRT_MAX)
+ skill->level_set_value(sk->splash, splash_range);
+ else
+ ShowWarning("%s: Invalid splash range %d specified for skill ID %d in %s! Minimum is %d, maximum is %d. Defaulting to 0...\n",
+ __func__, splash_range, sk->nameid, conf->file, SHRT_MIN, SHRT_MAX);
+ }
+}
+
+/**
+ * Validates a skill's number of hits when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the number of hits should be set it.
+ *
+ **/
+static void skill_validate_number_of_hits(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->num, 1);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "NumberOfHits");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int number_of_hits;
+
+ if (libconfig->setting_lookup_int(t, lv, &number_of_hits) == CONFIG_TRUE) {
+ if (number_of_hits >= SHRT_MIN && number_of_hits <= SHRT_MAX)
+ sk->num[i] = number_of_hits;
+ else
+ ShowWarning("%s: Invalid number of hits %d specified in level %d for skill ID %d in %s! Minimum is %d, maximum is %d. Defaulting to 1...\n",
+ __func__, number_of_hits, i + 1, sk->nameid, conf->file, SHRT_MIN, SHRT_MAX);
+ }
+ }
+
+ return;
+ }
+
+ int number_of_hits;
+
+ if (libconfig->setting_lookup_int(conf, "NumberOfHits", &number_of_hits) == CONFIG_TRUE) {
+ if (number_of_hits >= SHRT_MIN && number_of_hits <= SHRT_MAX)
+ skill->level_set_value(sk->num, number_of_hits);
+ else
+ ShowWarning("%s: Invalid number of hits %d specified for skill ID %d in %s! Minimum is %d, maximum is %d. Defaulting to 1...\n",
+ __func__, number_of_hits, sk->nameid, conf->file, SHRT_MIN, SHRT_MAX);
+ }
+}
+
+/**
+ * Validates a skill's cast interruptibility when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the cast interruptibility should be set it.
+ *
+ **/
+static void skill_validate_interrupt_cast(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->castcancel, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "InterruptCast");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int interrupt_cast;
+
+ if (libconfig->setting_lookup_bool(t, lv, &interrupt_cast) == CONFIG_TRUE)
+ sk->castcancel[i] = (interrupt_cast != 0) ? 1 : 0;
+ }
+
+ return;
+ }
+
+ int interrupt_cast;
+
+ if (libconfig->setting_lookup_bool(conf, "InterruptCast", &interrupt_cast) == CONFIG_TRUE) {
+ if (interrupt_cast != 0)
+ skill->level_set_value(sk->castcancel, 1);
+ }
+}
+
+/**
+ * Validates a skill's cast defence rate when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the cast defence rate should be set it.
+ *
+ **/
+static void skill_validate_cast_def_rate(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->cast_def_rate, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "CastDefRate");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int cast_def_rate;
+
+ if (libconfig->setting_lookup_int(t, lv, &cast_def_rate) == CONFIG_TRUE) {
+ if (cast_def_rate >= SHRT_MIN && cast_def_rate <= SHRT_MAX)
+ sk->cast_def_rate[i] = cast_def_rate;
+ else
+ ShowWarning("%s: Invalid cast defence rate %d specified in level %d for skill ID %d in %s! Minimum is %d, maximum is %d. Defaulting to 0...\n",
+ __func__, cast_def_rate, i + 1, sk->nameid, conf->file, SHRT_MIN, SHRT_MAX);
+ }
+ }
+
+ return;
+ }
+
+ int cast_def_rate;
+
+ if (libconfig->setting_lookup_int(conf, "CastDefRate", &cast_def_rate) == CONFIG_TRUE) {
+ if (cast_def_rate >= SHRT_MIN && cast_def_rate <= SHRT_MAX)
+ skill->level_set_value(sk->cast_def_rate, cast_def_rate);
+ else
+ ShowWarning("%s: Invalid cast defence rate %d specified for skill ID %d in %s! Minimum is %d, maximum is %d. Defaulting to 0...\n",
+ __func__, cast_def_rate, sk->nameid, conf->file, SHRT_MIN, SHRT_MAX);
+ }
+}
+
+/**
+ * Validates a skill's number of instances when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the number of instances should be set it.
+ *
+ **/
+static void skill_validate_number_of_instances(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->maxcount, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "SkillInstances");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int number_of_instances;
+
+ if (libconfig->setting_lookup_int(t, lv, &number_of_instances) == CONFIG_TRUE) {
+ if (number_of_instances >= 0 && number_of_instances <= MAX_SKILLUNITGROUP)
+ sk->maxcount[i] = number_of_instances;
+ else
+ ShowWarning("%s: Invalid number of instances %d specified in level %d for skill ID %d in %s! Minimum is 0, maximum is %d. Defaulting to 0...\n",
+ __func__, number_of_instances, i + 1, sk->nameid, conf->file, MAX_SKILLUNITGROUP);
+ }
+ }
+
+ return;
+ }
+
+ int number_of_instances;
+
+ if (libconfig->setting_lookup_int(conf, "SkillInstances", &number_of_instances) == CONFIG_TRUE) {
+ if (number_of_instances >= 0 && number_of_instances <= MAX_SKILLUNITGROUP)
+ skill->level_set_value(sk->maxcount, number_of_instances);
+ else
+ ShowWarning("%s: Invalid number of instances %d specified for skill ID %d in %s! Minimum is 0, maximum is %d. Defaulting to 0...\n",
+ __func__, number_of_instances, sk->nameid, conf->file, MAX_SKILLUNITGROUP);
+ }
+}
+
+/**
+ * Validates a skill's number of knock back tiles when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the number of knock back tiles should be set it.
+ *
+ **/
+static void skill_validate_knock_back_tiles(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->blewcount, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "KnockBackTiles");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int knock_back_tiles;
+
+ if (libconfig->setting_lookup_int(t, lv, &knock_back_tiles) == CONFIG_TRUE) {
+ if (knock_back_tiles >= 0)
+ sk->blewcount[i] = knock_back_tiles;
+ else
+ ShowWarning("%s: Invalid number of knock back tiles %d specified in level %d for skill ID %d in %s! Must be greater than or equal to 0. Defaulting to 0...\n",
+ __func__, knock_back_tiles, i + 1, sk->nameid, conf->file);
+ }
+ }
+
+ return;
+ }
+
+ int knock_back_tiles;
+
+ if (libconfig->setting_lookup_int(conf, "KnockBackTiles", &knock_back_tiles) == CONFIG_TRUE) {
+ if (knock_back_tiles >= 0)
+ skill->level_set_value(sk->blewcount, knock_back_tiles);
+ else
+ ShowWarning("%s: Invalid number of knock back tiles %d specified for skill ID %d in %s! Must be greater than or equal to 0. Defaulting to 0...\n",
+ __func__, knock_back_tiles, sk->nameid, conf->file);
+ }
+}
+
+/**
+ * Validates a skill's cast time when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the cast time should be set it.
+ *
+ **/
+static void skill_validate_cast_time(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->cast, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "CastTime");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int cast_time;
+
+ if (libconfig->setting_lookup_int(t, lv, &cast_time) == CONFIG_TRUE) {
+ if (cast_time >= 0)
+ sk->cast[i] = cast_time;
+ else
+ ShowWarning("%s: Invalid cast time %d specified in level %d for skill ID %d in %s! Must be greater than or equal to 0. Defaulting to 0...\n",
+ __func__, cast_time, i + 1, sk->nameid, conf->file);
+ }
+ }
+
+ return;
+ }
+
+ int cast_time;
+
+ if (libconfig->setting_lookup_int(conf, "CastTime", &cast_time) == CONFIG_TRUE) {
+ if (cast_time >= 0)
+ skill->level_set_value(sk->cast, cast_time);
+ else
+ ShowWarning("%s: Invalid cast time %d specified for skill ID %d in %s! Must be greater than or equal to 0. Defaulting to 0...\n",
+ __func__, cast_time, sk->nameid, conf->file);
+ }
+}
+
+/**
+ * Validates a skill's after cast act delay when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the after cast act delay should be set it.
+ *
+ **/
+static void skill_validate_act_delay(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->delay, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "AfterCastActDelay");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int act_delay;
+
+ if (libconfig->setting_lookup_int(t, lv, &act_delay) == CONFIG_TRUE) {
+ if (act_delay >= 0)
+ sk->delay[i] = act_delay;
+ else
+ ShowWarning("%s: Invalid after cast act delay %d specified in level %d for skill ID %d in %s! Must be greater than or equal to 0. Defaulting to 0...\n",
+ __func__, act_delay, i + 1, sk->nameid, conf->file);
+ }
+ }
+
+ return;
+ }
+
+ int act_delay;
+
+ if (libconfig->setting_lookup_int(conf, "AfterCastActDelay", &act_delay) == CONFIG_TRUE) {
+ if (act_delay >= 0)
+ skill->level_set_value(sk->delay, act_delay);
+ else
+ ShowWarning("%s: Invalid after cast act delay %d specified for skill ID %d in %s! Must be greater than or equal to 0. Defaulting to 0...\n",
+ __func__, act_delay, sk->nameid, conf->file);
+ }
+}
+
+/**
+ * Validates a skill's after cast walk delay when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the after cast walk delay should be set it.
+ *
+ **/
+static void skill_validate_walk_delay(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->walkdelay, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "AfterCastWalkDelay");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int walk_delay;
+
+ if (libconfig->setting_lookup_int(t, lv, &walk_delay) == CONFIG_TRUE) {
+ if (walk_delay >= 0)
+ sk->walkdelay[i] = walk_delay;
+ else
+ ShowWarning("%s: Invalid after cast walk delay %d specified in level %d for skill ID %d in %s! Must be greater than or equal to 0. Defaulting to 0...\n",
+ __func__, walk_delay, i + 1, sk->nameid, conf->file);
+ }
+ }
+
+ return;
+ }
+
+ int walk_delay;
+
+ if (libconfig->setting_lookup_int(conf, "AfterCastWalkDelay", &walk_delay) == CONFIG_TRUE) {
+ if (walk_delay >= 0)
+ skill->level_set_value(sk->walkdelay, walk_delay);
+ else
+ ShowWarning("%s: Invalid after cast walk delay %d specified for skill ID %d in %s! Must be greater than or equal to 0. Defaulting to 0...\n",
+ __func__, walk_delay, sk->nameid, conf->file);
+ }
+}
+
+/**
+ * Validates a skill's stay duration when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the stay duration should be set it.
+ *
+ **/
+static void skill_validate_skill_data1(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->upkeep_time, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "SkillData1");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int skill_data1;
+
+ if (libconfig->setting_lookup_int(t, lv, &skill_data1) == CONFIG_TRUE) {
+ if (skill_data1 >= INFINITE_DURATION)
+ sk->upkeep_time[i] = skill_data1;
+ else
+ ShowWarning("%s: Invalid stay duration %d specified in level %d for skill ID %d in %s! Must be greater than or equal to %d. Defaulting to 0...\n",
+ __func__, skill_data1, i + 1, sk->nameid, conf->file, INFINITE_DURATION);
+ }
+ }
+
+ return;
+ }
+
+ int skill_data1;
+
+ if (libconfig->setting_lookup_int(conf, "SkillData1", &skill_data1) == CONFIG_TRUE) {
+ if (skill_data1 >= INFINITE_DURATION)
+ skill->level_set_value(sk->upkeep_time, skill_data1);
+ else
+ ShowWarning("%s: Invalid stay duration %d specified for skill ID %d in %s! Must be greater than or equal to %d. Defaulting to 0...\n",
+ __func__, skill_data1, sk->nameid, conf->file, INFINITE_DURATION);
+ }
+}
+
+/**
+ * Validates a skill's effect duration when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the effect duration should be set it.
+ *
+ **/
+static void skill_validate_skill_data2(struct config_setting_t *conf, struct s_skill_db *sk)
{
- struct config_setting_t *t = NULL, *tt = NULL;
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->upkeep_time2, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "SkillData2");
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int skill_data2;
+
+ if (libconfig->setting_lookup_int(t, lv, &skill_data2) == CONFIG_TRUE) {
+ if (skill_data2 >= INFINITE_DURATION)
+ sk->upkeep_time2[i] = skill_data2;
+ else
+ ShowWarning("%s: Invalid effect duration %d specified in level %d for skill ID %d in %s! Must be greater than or equal to %d. Defaulting to 0...\n",
+ __func__, skill_data2, i + 1, sk->nameid, conf->file, INFINITE_DURATION);
+ }
+ }
+
+ return;
+ }
+
+ int skill_data2;
+
+ if (libconfig->setting_lookup_int(conf, "SkillData2", &skill_data2) == CONFIG_TRUE) {
+ if (skill_data2 >= INFINITE_DURATION)
+ skill->level_set_value(sk->upkeep_time2, skill_data2);
+ else
+ ShowWarning("%s: Invalid effect duration %d specified for skill ID %d in %s! Must be greater than or equal to %d. Defaulting to 0...\n",
+ __func__, skill_data2, sk->nameid, conf->file, INFINITE_DURATION);
+ }
+}
+
+/**
+ * Validates a skill's cooldown when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the cooldown should be set it.
+ *
+ **/
+static void skill_validate_cooldown(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
nullpo_retv(sk);
- if ((t=libconfig->setting_get_member(conf, delay?"SkillDelayOptions":"CastTimeOptions")) && config_setting_is_group(t)) {
- int j = 0, tmpopt = 0;
- while ((tt = libconfig->setting_get_elem(t, j++)) && j < 4) {
- const char *type = config_setting_name(tt);
+
+ skill->level_set_value(sk->cooldown, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "CoolDown");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int cooldown;
+
+ if (libconfig->setting_lookup_int(t, lv, &cooldown) == CONFIG_TRUE) {
+ if (cooldown >= 0)
+ sk->cooldown[i] = cooldown;
+ else
+ ShowWarning("%s: Invalid cooldown %d specified in level %d for skill ID %d in %s! Must be greater than or equal to 0. Defaulting to 0...\n",
+ __func__, cooldown, i + 1, sk->nameid, conf->file);
+ }
+ }
+
+ return;
+ }
+
+ int cooldown;
+
+ if (libconfig->setting_lookup_int(conf, "CoolDown", &cooldown) == CONFIG_TRUE) {
+ if (cooldown >= 0)
+ skill->level_set_value(sk->cooldown, cooldown);
+ else
+ ShowWarning("%s: Invalid cooldown %d specified for skill ID %d in %s! Must be greater than or equal to 0. Defaulting to 0...\n",
+ __func__, cooldown, sk->nameid, conf->file);
+ }
+}
+
+/**
+ * Validates a skill's fixed cast time when reading the skill DB.
+ * If RENEWAL_CAST is not defined, nothing is done.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the fixed cast time should be set it.
+ *
+ **/
+static void skill_validate_fixed_cast_time(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+#ifdef RENEWAL_CAST
+ skill->level_set_value(sk->fixed_cast, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "FixedCastTime");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int fixed_cast_time;
+
+ if (libconfig->setting_lookup_int(t, lv, &fixed_cast_time) == CONFIG_TRUE) {
+ if (fixed_cast_time >= INFINITE_DURATION)
+ sk->fixed_cast[i] = fixed_cast_time;
+ else
+ ShowWarning("%s: Invalid fixed cast time %d specified in level %d for skill ID %d in %s! Must be greater than or equal to %d. Defaulting to 0...\n",
+ __func__, fixed_cast_time, i + 1, sk->nameid, conf->file, INFINITE_DURATION);
+ }
+ }
+
+ return;
+ }
+
+ int fixed_cast_time;
+
+ if (libconfig->setting_lookup_int(conf, "FixedCastTime", &fixed_cast_time) == CONFIG_TRUE) {
+ if (fixed_cast_time >= INFINITE_DURATION)
+ skill->level_set_value(sk->fixed_cast, fixed_cast_time);
+ else
+ ShowWarning("%s: Invalid fixed cast time %d specified for skill ID %d in %s! Must be greater than or equal to %d. Defaulting to 0...\n",
+ __func__, fixed_cast_time, sk->nameid, conf->file, INFINITE_DURATION);
+ }
+#else
+#ifndef RENEWAL /** Check pre-RE skill DB for FixedCastTime. **/
+ if (libconfig->setting_get_member(conf, "FixedCastTime") != NULL)
+ ShowWarning("%s: Fixed cast time was specified for skill ID %d in %s without RENEWAL_CAST being defined! Skipping...\n", __func__, sk->nameid, conf->file);
+#endif /** RENEWAL **/
+#endif /** RENEWAL_CAST **/
+}
+
+/**
+ * Validates a skill's cast time or delay options when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the cast time or delay options should be set it.
+ * @param delay If true, the skill's delay options are validated, otherwise its cast time options.
+ *
+ **/
+static void skill_validate_castnodex(struct config_setting_t *conf, struct s_skill_db *sk, bool delay)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(delay ? sk->delaynodex : sk->castnodex, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, delay ? "SkillDelayOptions" : "CastTimeOptions");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ struct config_setting_t *tt;
+ int i = 0;
+ int options = 0;
+
+ while ((tt = libconfig->setting_get_elem(t, i++)) != NULL) {
+ const char *value = config_setting_name(tt);
bool on = libconfig->setting_get_bool_real(tt);
- if (strcmpi(type, "IgnoreDex") == 0) {
- if (on) {
- tmpopt |= 1<<0;
- } else {
- tmpopt &= ~(1<<0);
- }
- } else if (strcmpi(type, "IgnoreStatusEffect") == 0) {
- if (on) {
- tmpopt |= 1<<1;
- } else {
- tmpopt &= ~(1<<1);
- }
- } else if (strcmpi(type, "IgnoreItemBonus") == 0) {
- if (on) {
- tmpopt |= 1<<2;
- } else {
- tmpopt &= ~(1<<2);
- }
+ if (strcmpi(value, "IgnoreDex") == 0) {
+ if (on)
+ options |= 1;
+ else
+ options &= ~1;
+ } else if (strcmpi(value, "IgnoreStatusEffect") == 0) {
+ if (on)
+ options |= 2;
+ else
+ options &= ~2;
+ } else if (strcmpi(value, "IgnoreItemBonus") == 0) {
+ if (on)
+ options |= 4;
+ else
+ options &= ~4;
} else {
- skilldb_invalid_error(type, config_setting_name(t), sk->nameid);
- return;
+ const char *option_string = delay ? "skill delay" : "cast time";
+ ShowWarning("%s: Invalid %s option %s specified for skill ID %d in %s! Skipping option...\n",
+ __func__, option_string, value, sk->nameid, conf->file);
+ }
+ }
+
+ skill->level_set_value(delay ? sk->delaynodex : sk->castnodex, options);
+ }
+}
+
+/**
+ * Validates a skill's HP cost when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the HP cost should be set it.
+ *
+ **/
+static void skill_validate_hp_cost(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->hp, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "HPCost");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int hp_cost;
+
+ if (libconfig->setting_lookup_int(t, lv, &hp_cost) == CONFIG_TRUE) {
+ if (hp_cost >= 0 && hp_cost <= battle_config.max_hp)
+ sk->hp[i] = hp_cost;
+ else
+ ShowWarning("%s: Invalid HP cost %d specified in level %d for skill ID %d in %s! Minimum is 0, maximum is %d. Defaulting to 0...\n",
+ __func__, hp_cost, i + 1, sk->nameid, conf->file, battle_config.max_hp);
}
+ }
+
+ return;
+ }
+
+ int hp_cost;
+
+ if (libconfig->setting_lookup_int(conf, "HPCost", &hp_cost) == CONFIG_TRUE) {
+ if (hp_cost >= 0 && hp_cost <= battle_config.max_hp)
+ skill->level_set_value(sk->hp, hp_cost);
+ else
+ ShowWarning("%s: Invalid HP cost %d specified for skill ID %d in %s! Minimum is 0, maximum is %d. Defaulting to 0...\n",
+ __func__, hp_cost, sk->nameid, conf->file, battle_config.max_hp);
+ }
+}
+
+/**
+ * Validates a skill's SP cost when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the SP cost should be set it.
+ *
+ **/
+static void skill_validate_sp_cost(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+ skill->level_set_value(sk->sp, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "SPCost");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int sp_cost;
+
+ if (libconfig->setting_lookup_int(t, lv, &sp_cost) == CONFIG_TRUE) {
+ if (sp_cost >= 0 && sp_cost <= battle_config.max_sp)
+ sk->sp[i] = sp_cost;
+ else
+ ShowWarning("%s: Invalid SP cost %d specified in level %d for skill ID %d in %s! Minimum is 0, maximum is %d. Defaulting to 0...\n",
+ __func__, sp_cost, i + 1, sk->nameid, conf->file, battle_config.max_sp);
+ }
}
- skill->level_set_value(delay?sk->delaynodex:sk->castnodex, tmpopt);
+
+ return;
+ }
+
+ int sp_cost;
+
+ if (libconfig->setting_lookup_int(conf, "SPCost", &sp_cost) == CONFIG_TRUE) {
+ if (sp_cost >= 0 && sp_cost <= battle_config.max_sp)
+ skill->level_set_value(sk->sp, sp_cost);
+ else
+ ShowWarning("%s: Invalid SP cost %d specified for skill ID %d in %s! Minimum is 0, maximum is %d. Defaulting to 0...\n",
+ __func__, sp_cost, sk->nameid, conf->file, battle_config.max_sp);
}
}
/**
- * Validates the "WeaponTypes" flag
- * when parsing skill_db.conf
- * @param *type const char, weapon type flag
- * @param on boolean, switch for the flag
- * @param *sk struct, pointer to s_skill_db
- * @return void
- */
+ * Validates a skill's HP rate cost when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the HP rate cost should be set it.
+ *
+ **/
+static void skill_validate_hp_rate_cost(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->hp_rate, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "HPRateCost");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int hp_rate_cost;
+
+ if (libconfig->setting_lookup_int(t, lv, &hp_rate_cost) == CONFIG_TRUE) {
+ if (hp_rate_cost >= -100 && hp_rate_cost <= 100)
+ sk->hp_rate[i] = hp_rate_cost;
+ else
+ ShowWarning("%s: Invalid HP rate cost %d specified in level %d for skill ID %d in %s! Minimum is -100, maximum is 100. Defaulting to 0...\n",
+ __func__, hp_rate_cost, i + 1, sk->nameid, conf->file);
+ }
+ }
+
+ return;
+ }
+
+ int hp_rate_cost;
+
+ if (libconfig->setting_lookup_int(conf, "HPRateCost", &hp_rate_cost) == CONFIG_TRUE) {
+ if (hp_rate_cost >= -100 && hp_rate_cost <= 100)
+ skill->level_set_value(sk->hp_rate, hp_rate_cost);
+ else
+ ShowWarning("%s: Invalid HP rate cost %d specified for skill ID %d in %s! Minimum is -100, maximum is 100. Defaulting to 0...\n",
+ __func__, hp_rate_cost, sk->nameid, conf->file);
+ }
+}
+
+/**
+ * Validates a skill's SP rate cost when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the SP rate cost should be set it.
+ *
+ **/
+static void skill_validate_sp_rate_cost(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->sp_rate, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "SPRateCost");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int sp_rate_cost;
+
+ if (libconfig->setting_lookup_int(t, lv, &sp_rate_cost) == CONFIG_TRUE) {
+ if (sp_rate_cost >= -100 && sp_rate_cost <= 100)
+ sk->sp_rate[i] = sp_rate_cost;
+ else
+ ShowWarning("%s: Invalid SP rate cost %d specified in level %d for skill ID %d in %s! Minimum is -100, maximum is 100. Defaulting to 0...\n",
+ __func__, sp_rate_cost, i + 1, sk->nameid, conf->file);
+ }
+ }
+
+ return;
+ }
+
+ int sp_rate_cost;
+
+ if (libconfig->setting_lookup_int(conf, "SPRateCost", &sp_rate_cost) == CONFIG_TRUE) {
+ if (sp_rate_cost >= -100 && sp_rate_cost <= 100)
+ skill->level_set_value(sk->sp_rate, sp_rate_cost);
+ else
+ ShowWarning("%s: Invalid SP rate cost %d specified for skill ID %d in %s! Minimum is -100, maximum is 100. Defaulting to 0...\n",
+ __func__, sp_rate_cost, sk->nameid, conf->file);
+ }
+}
+
+/**
+ * Validates a skill's maximum HP trigger when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the maximum HP trigger should be set it.
+ *
+ **/
+static void skill_validate_max_hp_trigger(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->mhp, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "MaxHPTrigger");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int max_hp_trigger;
+
+ if (libconfig->setting_lookup_int(t, lv, &max_hp_trigger) == CONFIG_TRUE) {
+ if (max_hp_trigger >= 0 && max_hp_trigger <= 100)
+ sk->mhp[i] = max_hp_trigger;
+ else
+ ShowWarning("%s: Invalid maximum HP trigger %d specified in level %d for skill ID %d in %s! Minimum is 0, maximum is 100. Defaulting to 0...\n",
+ __func__, max_hp_trigger, i + 1, sk->nameid, conf->file);
+ }
+ }
+
+ return;
+ }
+
+ int max_hp_trigger;
+
+ if (libconfig->setting_lookup_int(conf, "MaxHPTrigger", &max_hp_trigger) == CONFIG_TRUE) {
+ if (max_hp_trigger >= 0 && max_hp_trigger <= 100)
+ skill->level_set_value(sk->mhp, max_hp_trigger);
+ else
+ ShowWarning("%s: Invalid maximum HP trigger %d specified for skill ID %d in %s! Minimum is 0, maximum is 100. Defaulting to 0...\n",
+ __func__, max_hp_trigger, sk->nameid, conf->file);
+ }
+}
+
+/**
+ * Validates a skill's maximum SP trigger when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the maximum SP trigger should be set it.
+ *
+ **/
+static void skill_validate_max_sp_trigger(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->msp, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "MaxSPTrigger");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int max_sp_trigger;
+
+ if (libconfig->setting_lookup_int(t, lv, &max_sp_trigger) == CONFIG_TRUE) {
+ if (max_sp_trigger >= 0 && max_sp_trigger <= 100)
+ sk->msp[i] = max_sp_trigger;
+ else
+ ShowWarning("%s: Invalid maximum SP trigger %d specified in level %d for skill ID %d in %s! Minimum is 0, maximum is 100. Defaulting to 0...\n",
+ __func__, max_sp_trigger, i + 1, sk->nameid, conf->file);
+ }
+ }
+
+ return;
+ }
+
+ int max_sp_trigger;
+
+ if (libconfig->setting_lookup_int(conf, "MaxSPTrigger", &max_sp_trigger) == CONFIG_TRUE) {
+ if (max_sp_trigger >= 0 && max_sp_trigger <= 100)
+ skill->level_set_value(sk->msp, max_sp_trigger);
+ else
+ ShowWarning("%s: Invalid maximum SP trigger %d specified for skill ID %d in %s! Minimum is 0, maximum is 100. Defaulting to 0...\n",
+ __func__, max_sp_trigger, sk->nameid, conf->file);
+ }
+}
+
+/**
+ * Validates a skill's Zeny cost when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the Zeny cost should be set it.
+ *
+ **/
+static void skill_validate_zeny_cost(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->zeny, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "ZenyCost");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int zeny_cost;
+
+ if (libconfig->setting_lookup_int(t, lv, &zeny_cost) == CONFIG_TRUE) {
+ if (zeny_cost >= 0 && zeny_cost <= MAX_ZENY)
+ sk->zeny[i] = zeny_cost;
+ else
+ ShowWarning("%s: Invalid Zeny cost %d specified in level %d for skill ID %d in %s! Minimum is 0, maximum is %d. Defaulting to 0...\n",
+ __func__, zeny_cost, i + 1, sk->nameid, conf->file, MAX_ZENY);
+ }
+ }
+
+ return;
+ }
+
+ int zeny_cost;
+
+ if (libconfig->setting_lookup_int(conf, "ZenyCost", &zeny_cost) == CONFIG_TRUE) {
+ if (zeny_cost >= 0 && zeny_cost <= MAX_ZENY)
+ skill->level_set_value(sk->zeny, zeny_cost);
+ else
+ ShowWarning("%s: Invalid Zeny cost %d specified for skill ID %d in %s! Minimum is 0, maximum is %d. Defaulting to 0...\n",
+ __func__, zeny_cost, sk->nameid, conf->file, MAX_ZENY);
+ }
+}
+
+/**
+ * Validates a single weapon type when reading the skill DB.
+ *
+ * @param type The weapon type to validate.
+ * @param on Whether the weapon type is required for the skill.
+ * @param sk The s_skill_db struct where the weapon type should be set it.
+ * @return 0 if the passed weapon type is valid, otherwise 1.
+ *
+ **/
static int skill_validate_weapontype_sub(const char *type, bool on, struct s_skill_db *sk)
{
- nullpo_ret(sk);
+ nullpo_retr(1, type);
+ nullpo_retr(1, sk);
+
if (strcmpi(type, "NoWeapon") == 0) {
- if (on) {
- sk->weapon |= 1<<W_FIST;
- } else {
- sk->weapon &= ~(1<<W_FIST);
- }
+ if (on)
+ sk->weapon |= (1 << W_FIST);
+ else
+ sk->weapon &= ~(1 << W_FIST);
} else if (strcmpi(type, "Daggers") == 0) {
- if (on) {
- sk->weapon |= 1<<W_DAGGER;
- } else {
- sk->weapon &= ~(1<<W_DAGGER);
- }
+ if (on)
+ sk->weapon |= (1 << W_DAGGER);
+ else
+ sk->weapon &= ~(1 << W_DAGGER);
} else if (strcmpi(type, "1HSwords") == 0) {
- if (on) {
- sk->weapon |= 1<<W_1HSWORD;
- } else {
- sk->weapon &= ~(1<<W_1HSWORD);
- }
+ if (on)
+ sk->weapon |= (1 << W_1HSWORD);
+ else
+ sk->weapon &= ~(1 << W_1HSWORD);
} else if (strcmpi(type, "2HSwords") == 0) {
- if (on) {
- sk->weapon |= 1<<W_2HSWORD;
- } else {
- sk->weapon &= ~(1<<W_2HSWORD);
- }
+ if (on)
+ sk->weapon |= (1 << W_2HSWORD);
+ else
+ sk->weapon &= ~(1 << W_2HSWORD);
} else if (strcmpi(type, "1HSpears") == 0) {
- if (on) {
- sk->weapon |= 1<<W_1HSPEAR;
- } else {
- sk->weapon &= ~(1<<W_1HSPEAR);
- }
+ if (on)
+ sk->weapon |= (1 << W_1HSPEAR);
+ else
+ sk->weapon &= ~(1 << W_1HSPEAR);
} else if (strcmpi(type, "2HSpears") == 0) {
- if (on) {
- sk->weapon |= 1<<W_2HSPEAR;
- } else {
- sk->weapon &= ~(1<<W_2HSPEAR);
- }
+ if (on)
+ sk->weapon |= (1 << W_2HSPEAR);
+ else
+ sk->weapon &= ~(1 << W_2HSPEAR);
} else if (strcmpi(type, "1HAxes") == 0) {
- if (on) {
- sk->weapon |= 1<<W_1HAXE;
- } else {
- sk->weapon &= ~(1<<W_1HAXE);
- }
+ if (on)
+ sk->weapon |= (1 << W_1HAXE);
+ else
+ sk->weapon &= ~(1 << W_1HAXE);
} else if (strcmpi(type, "2HAxes") == 0) {
- if (on) {
- sk->weapon |= 1<<W_2HAXE;
- } else {
- sk->weapon &= ~(1<<W_2HAXE);
- }
+ if (on)
+ sk->weapon |= (1 << W_2HAXE);
+ else
+ sk->weapon &= ~(1 << W_2HAXE);
} else if (strcmpi(type, "Maces") == 0) {
- if (on) {
- sk->weapon |= 1<<W_MACE;
- } else {
- sk->weapon &= ~(1<<W_MACE);
- }
+ if (on)
+ sk->weapon |= (1 << W_MACE);
+ else
+ sk->weapon &= ~(1 << W_MACE);
} else if (strcmpi(type, "2HMaces") == 0) {
- if (on) {
- sk->weapon |= 1<<W_2HMACE;
- } else {
- sk->weapon &= ~(1<<W_2HMACE);
- }
+ if (on)
+ sk->weapon |= (1 << W_2HMACE);
+ else
+ sk->weapon &= ~(1 << W_2HMACE);
} else if (strcmpi(type, "Staves") == 0) {
- if (on) {
- sk->weapon |= 1<<W_STAFF;
- } else {
- sk->weapon &= ~(1<<W_STAFF);
- }
+ if (on)
+ sk->weapon |= (1 << W_STAFF);
+ else
+ sk->weapon &= ~(1 << W_STAFF);
} else if (strcmpi(type, "Bows") == 0) {
- if (on) {
- sk->weapon |= 1<<W_BOW;
- } else {
- sk->weapon &= ~(1<<W_BOW);
- }
+ if (on)
+ sk->weapon |= (1 << W_BOW);
+ else
+ sk->weapon &= ~(1 << W_BOW);
} else if (strcmpi(type, "Knuckles") == 0) {
- if (on) {
- sk->weapon |= 1<<W_KNUCKLE;
- } else {
- sk->weapon &= ~(1<<W_KNUCKLE);
- }
+ if (on)
+ sk->weapon |= (1 << W_KNUCKLE);
+ else
+ sk->weapon &= ~(1 << W_KNUCKLE);
} else if (strcmpi(type, "Instruments") == 0) {
- if (on) {
- sk->weapon |= 1<<W_MUSICAL;
- } else {
- sk->weapon &= ~(1<<W_MUSICAL);
- }
+ if (on)
+ sk->weapon |= (1 << W_MUSICAL);
+ else
+ sk->weapon &= ~(1 << W_MUSICAL);
} else if (strcmpi(type, "Whips") == 0) {
- if (on) {
- sk->weapon |= 1<<W_WHIP;
- } else {
- sk->weapon &= ~(1<<W_WHIP);
- }
+ if (on)
+ sk->weapon |= (1 << W_WHIP);
+ else
+ sk->weapon &= ~(1 << W_WHIP);
} else if (strcmpi(type, "Books") == 0) {
- if (on) {
- sk->weapon |= 1<<W_BOOK;
- } else {
- sk->weapon &= ~(1<<W_BOOK);
- }
+ if (on)
+ sk->weapon |= (1 << W_BOOK);
+ else
+ sk->weapon &= ~(1 << W_BOOK);
} else if (strcmpi(type, "Katars") == 0) {
- if (on) {
- sk->weapon |= 1<<W_KATAR;
- } else {
- sk->weapon &= ~(1<<W_KATAR);
- }
+ if (on)
+ sk->weapon |= (1 << W_KATAR);
+ else
+ sk->weapon &= ~(1 << W_KATAR);
} else if (strcmpi(type, "Revolvers") == 0) {
- if (on) {
- sk->weapon |= 1<<W_REVOLVER;
- } else {
- sk->weapon &= ~(1<<W_REVOLVER);
- }
+ if (on)
+ sk->weapon |= (1 << W_REVOLVER);
+ else
+ sk->weapon &= ~(1 << W_REVOLVER);
} else if (strcmpi(type, "Rifles") == 0) {
- if (on) {
- sk->weapon |= 1<<W_RIFLE;
- } else {
- sk->weapon &= ~(1<<W_RIFLE);
- }
+ if (on)
+ sk->weapon |= (1 << W_RIFLE);
+ else
+ sk->weapon &= ~(1 << W_RIFLE);
} else if (strcmpi(type, "GatlingGuns") == 0) {
- if (on) {
- sk->weapon |= 1<<W_GATLING;
- } else {
- sk->weapon &= ~(1<<W_GATLING);
- }
+ if (on)
+ sk->weapon |= (1 << W_GATLING);
+ else
+ sk->weapon &= ~(1 << W_GATLING);
} else if (strcmpi(type, "Shotguns") == 0) {
- if (on) {
- sk->weapon |= 1<<W_SHOTGUN;
- } else {
- sk->weapon &= ~(1<<W_SHOTGUN);
- }
+ if (on)
+ sk->weapon |= (1 << W_SHOTGUN);
+ else
+ sk->weapon &= ~(1 << W_SHOTGUN);
} else if (strcmpi(type, "GrenadeLaunchers") == 0) {
- if (on) {
- sk->weapon |= 1<<W_GRENADE;
- } else {
- sk->weapon &= ~(1<<W_GRENADE);
- }
+ if (on)
+ sk->weapon |= (1 << W_GRENADE);
+ else
+ sk->weapon &= ~(1 << W_GRENADE);
} else if (strcmpi(type, "FuumaShurikens") == 0) {
- if (on) {
- sk->weapon |= 1<<W_HUUMA;
- } else {
- sk->weapon &= ~(1<<W_HUUMA);
- }
+ if (on)
+ sk->weapon |= (1 << W_HUUMA);
+ else
+ sk->weapon &= ~(1 << W_HUUMA);
} else if (strcmpi(type, "2HStaves") == 0) {
- if (on) {
- sk->weapon |= 1<<W_2HSTAFF;
- } else {
- sk->weapon &= ~(1<<W_2HSTAFF);
- }
- }
- /* MAX_SINGLE_WEAPON_TYPE excluded */
- else if (strcmpi(type, "DWDaggers") == 0) {
- if (on) {
- sk->weapon |= 1<<W_DOUBLE_DD;
- } else {
- sk->weapon &= ~(1<<W_DOUBLE_DD);
- }
+ if (on)
+ sk->weapon |= (1 << W_2HSTAFF);
+ else
+ sk->weapon &= ~(1 << W_2HSTAFF);
+ } else if (strcmpi(type, "DWDaggers") == 0) {
+ if (on)
+ sk->weapon |= (1 << W_DOUBLE_DD);
+ else
+ sk->weapon &= ~(1 << W_DOUBLE_DD);
} else if (strcmpi(type, "DWSwords") == 0) {
- if (on) {
- sk->weapon |= 1<<W_DOUBLE_SS;
- } else {
- sk->weapon &= ~(1<<W_DOUBLE_SS);
- }
+ if (on)
+ sk->weapon |= (1 << W_DOUBLE_SS);
+ else
+ sk->weapon &= ~(1 << W_DOUBLE_SS);
} else if (strcmpi(type, "DWAxes") == 0) {
- if (on) {
- sk->weapon |= 1<<W_DOUBLE_AA;
- } else {
- sk->weapon &= ~(1<<W_DOUBLE_AA);
- }
+ if (on)
+ sk->weapon |= (1 << W_DOUBLE_AA);
+ else
+ sk->weapon &= ~(1 << W_DOUBLE_AA);
} else if (strcmpi(type, "DWDaggerSword") == 0) {
- if (on) {
- sk->weapon |= 1<<W_DOUBLE_DS;
- } else {
- sk->weapon &= ~(1<<W_DOUBLE_DS);
- }
+ if (on)
+ sk->weapon |= (1 << W_DOUBLE_DS);
+ else
+ sk->weapon &= ~(1 << W_DOUBLE_DS);
} else if (strcmpi(type, "DWDaggerAxe") == 0) {
- if (on) {
- sk->weapon |= 1<<W_DOUBLE_DA;
- } else {
- sk->weapon &= ~(1<<W_DOUBLE_DA);
- }
+ if (on)
+ sk->weapon |= (1 << W_DOUBLE_DA);
+ else
+ sk->weapon &= ~(1 << W_DOUBLE_DA);
} else if (strcmpi(type, "DWSwordAxe") == 0) {
- if (on) {
- sk->weapon |= 1<<W_DOUBLE_SA;
- } else {
- sk->weapon &= ~(1<<W_DOUBLE_SA);
- }
+ if (on)
+ sk->weapon |= (1 << W_DOUBLE_SA);
+ else
+ sk->weapon &= ~(1 << W_DOUBLE_SA);
} else if (strcmpi(type, "All") == 0) {
sk->weapon = 0;
} else {
- ShowError("Item %d. Unknown weapon type %s\n", sk->nameid, type);
- return 1; // invalid type
+ return 1;
}
return 0;
}
/**
- * Validates "WeaponTypes"
- * when parsing skill_db.conf
- * @param conf struct, pointer to the skill configuration
- * @param sk struct, struct, pointer to s_skill_db
- * @return (void)
- */
+ * Validates a skill's required weapon types when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the required weapon types should be set it.
+ *
+ **/
static void skill_validate_weapontype(struct config_setting_t *conf, struct s_skill_db *sk)
{
- struct config_setting_t *tt = NULL;
- const char *type = NULL;
-
+ nullpo_retv(conf);
nullpo_retv(sk);
- if ((tt = libconfig->setting_get_member(conf, "WeaponTypes")) && config_setting_is_group(tt)) {
- int j = 0;
- struct config_setting_t *wpt = NULL;
- while ((wpt = libconfig->setting_get_elem(tt, j++)) != NULL) {
- if (skill->validate_weapontype_sub(config_setting_name(wpt), libconfig->setting_get_bool_real(wpt), sk))
- skilldb_invalid_error(config_setting_name(wpt), config_setting_name(tt), sk->nameid);
+
+ sk->weapon = 0;
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "WeaponTypes");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ struct config_setting_t *tt;
+ int i = 0;
+
+ while ((tt = libconfig->setting_get_elem(t, i++)) != NULL) {
+ bool on = libconfig->setting_get_bool_real(tt);
+
+ if (skill->validate_weapontype_sub(config_setting_name(tt), on, sk) != 0)
+ ShowWarning("%s: Invalid required weapon type %s specified for skill ID %d in %s! Skipping type...\n",
+ __func__, config_setting_name(tt), sk->nameid, conf->file);
}
- } else if (libconfig->setting_lookup_string(conf, "WeaponTypes", &type)) {
- if (skill->validate_weapontype_sub(type, true, sk))
- skilldb_invalid_error(type, "WeaponTypes", sk->nameid);
+
+ return;
+ }
+
+ const char *weapon_type;
+
+ if (libconfig->setting_lookup_string(conf, "WeaponTypes", &weapon_type) == CONFIG_TRUE) {
+ if (skill->validate_weapontype_sub(weapon_type, true, sk) != 0)
+ ShowWarning("%s: Invalid required weapon type %s specified for skill ID %d in %s! Defaulting to All...\n",
+ __func__, weapon_type, sk->nameid, conf->file);
}
}
/**
- * Validates the "AmmoTypes" flag
- * when parsing skill_db.conf
- * @param type string, ammo type flag
- * @param on boolean, switch for the flag
- * @param sk struct, pointer to s_skill_db
- * @return void
- */
+ * Validates a single ammunition type when reading the skill DB.
+ *
+ * @param type The ammunition type to validate.
+ * @param on Whether the ammunition type is required for the skill.
+ * @param sk The s_skill_db struct where the ammunition type should be set it.
+ * @return 0 if the passed ammunition type is valid, otherwise 1.
+ *
+ **/
static int skill_validate_ammotype_sub(const char *type, bool on, struct s_skill_db *sk)
{
- nullpo_ret(sk);
+ nullpo_retr(1, type);
+ nullpo_retr(1, sk);
+
if (strcmpi(type, "A_ARROW") == 0) {
- if (on) {
- sk->ammo |= 1<<A_ARROW;
- } else {
- sk->ammo &= ~(1<<A_ARROW);
- }
+ if (on)
+ sk->ammo |= (1 << A_ARROW);
+ else
+ sk->ammo &= ~(1 << A_ARROW);
} else if (strcmpi(type, "A_DAGGER") == 0) {
- if (on) {
- sk->ammo |= 1<<A_DAGGER;
- } else {
- sk->ammo &= ~(1<<A_DAGGER);
- }
+ if (on)
+ sk->ammo |= (1 << A_DAGGER);
+ else
+ sk->ammo &= ~(1 << A_DAGGER);
} else if (strcmpi(type, "A_BULLET") == 0) {
- if (on) {
- sk->ammo |= 1<<A_BULLET;
- } else {
- sk->ammo &= ~(1<<A_BULLET);
- }
+ if (on)
+ sk->ammo |= (1 << A_BULLET);
+ else
+ sk->ammo &= ~(1 << A_BULLET);
} else if (strcmpi(type, "A_SHELL") == 0) {
- if (on) {
- sk->ammo |= 1<<A_SHELL;
- } else {
- sk->ammo &= ~(1<<A_SHELL);
- }
+ if (on)
+ sk->ammo |= (1 << A_SHELL);
+ else
+ sk->ammo &= ~(1 << A_SHELL);
} else if (strcmpi(type, "A_GRENADE") == 0) {
- if (on) {
- sk->ammo |= 1<<A_GRENADE;
- } else {
- sk->ammo &= ~(1<<A_GRENADE);
- }
+ if (on)
+ sk->ammo |= (1 << A_GRENADE);
+ else
+ sk->ammo &= ~(1 << A_GRENADE);
} else if (strcmpi(type, "A_SHURIKEN") == 0) {
- if (on) {
- sk->ammo |= 1<<A_SHURIKEN;
- } else {
- sk->ammo &= ~(1<<A_SHURIKEN);
- }
+ if (on)
+ sk->ammo |= (1 << A_SHURIKEN);
+ else
+ sk->ammo &= ~(1 << A_SHURIKEN);
} else if (strcmpi(type, "A_KUNAI") == 0) {
- if (on) {
- sk->ammo |= 1<<A_KUNAI;
- } else {
- sk->ammo &= ~(1<<A_KUNAI);
- }
+ if (on)
+ sk->ammo |= (1 << A_KUNAI);
+ else
+ sk->ammo &= ~(1 << A_KUNAI);
} else if (strcmpi(type, "A_CANNONBALL") == 0) {
- if (on) {
- sk->ammo |= 1<<A_CANNONBALL;
- } else {
- sk->ammo &= ~(1<<A_CANNONBALL);
- }
+ if (on)
+ sk->ammo |= (1 << A_CANNONBALL);
+ else
+ sk->ammo &= ~(1 << A_CANNONBALL);
} else if (strcmpi(type, "A_THROWWEAPON") == 0) {
- if (on) {
- sk->ammo |= 1<<A_THROWWEAPON;
- } else {
- sk->ammo &= ~(1<<A_THROWWEAPON);
- }
+ if (on)
+ sk->ammo |= (1 << A_THROWWEAPON);
+ else
+ sk->ammo &= ~(1 << A_THROWWEAPON);
} else if (strcmpi(type, "All") == 0) {
- if (on) {
+ if (on)
sk->ammo = 0xFFFFFFFF;
- } else {
+ else
sk->ammo = 0;
- }
} else {
- return 1; // Invalid Entry
+ return 1;
}
return 0;
}
/**
- * Validates the "AmmoTypes" flag
- * when parsing skill_db.conf
- * @param conf pointer to the skill configuration
- * @param sk struct, pointer to s_skill_db
- * @return void
- */
+ * Validates a skill's required ammunition types when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the required ammunition types should be set it.
+ *
+ **/
static void skill_validate_ammotype(struct config_setting_t *conf, struct s_skill_db *sk)
{
- struct config_setting_t *tt = NULL;
- const char *tstr = NULL;
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ sk->ammo = 0;
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "AmmoTypes");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ struct config_setting_t *tt;
+ int i = 0;
+
+ while ((tt = libconfig->setting_get_elem(t, i++)) != NULL) {
+ bool on = libconfig->setting_get_bool_real(tt);
+ if (skill->validate_ammotype_sub(config_setting_name(tt), on, sk) != 0)
+ ShowWarning("%s: Invalid required ammunition type %s specified for skill ID %d in %s! Skipping type...\n",
+ __func__, config_setting_name(tt), sk->nameid, conf->file);
+ }
+ }
+
+ const char *ammo_type;
+
+ if (libconfig->setting_lookup_string(conf, "AmmoTypes", &ammo_type) == CONFIG_TRUE) {
+ if (skill->validate_ammotype_sub(ammo_type, true, sk) != 0)
+ ShowWarning("%s: Invalid required ammunition type %s specified for skill ID %d in %s! Defaulting to None...\n",
+ __func__, ammo_type, sk->nameid, conf->file);
+ }
+}
+
+/**
+ * Validates a skill's required ammunition amount when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the required ammunition amount should be set it.
+ *
+ **/
+static void skill_validate_ammo_amount(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
nullpo_retv(sk);
- if ((tt = libconfig->setting_get_member(conf, "AmmoTypes")) && config_setting_is_group(tt)) {
- int j = 0;
- struct config_setting_t *amt = { 0 };
- while ((amt = libconfig->setting_get_elem(tt, j++))) {
- if (skill->validate_ammotype_sub(config_setting_name(amt), libconfig->setting_get_bool_real(amt), sk))
- skilldb_invalid_error(config_setting_name(amt), config_setting_name(tt), sk->nameid);
+
+ skill->level_set_value(sk->ammo_qty, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "AmmoAmount");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int ammo_amount;
+
+ if (libconfig->setting_lookup_int(t, lv, &ammo_amount) == CONFIG_TRUE) {
+ if (ammo_amount >= 0 && ammo_amount <= MAX_AMOUNT)
+ sk->ammo_qty[i] = ammo_amount;
+ else
+ ShowWarning("%s: Invalid required ammunition amount %d specified in level %d for skill ID %d in %s! Minimum is 0, maximum is %d. Defaulting to 0...\n",
+ __func__, ammo_amount, i + 1, sk->nameid, conf->file, MAX_AMOUNT);
+ }
}
- } else if( libconfig->setting_lookup_string(conf, "AmmoTypes", &tstr)) {
- if (skill->validate_ammotype_sub(tstr, true, sk))
- skilldb_invalid_error(tstr, "AmmoTypes", sk->nameid);
+
+ return;
+ }
+
+ int ammo_amount;
+
+ if (libconfig->setting_lookup_int(conf, "AmmoAmount", &ammo_amount) == CONFIG_TRUE) {
+ if (ammo_amount >= 0 && ammo_amount <= MAX_AMOUNT)
+ skill->level_set_value(sk->ammo_qty, ammo_amount);
+ else
+ ShowWarning("%s: Invalid required ammunition amount %d specified for skill ID %d in %s! Minimum is 0, maximum is %d. Defaulting to 0...\n",
+ __func__, ammo_amount, sk->nameid, conf->file, MAX_AMOUNT);
}
}
/**
- * Validates the "State" flag
- * when parsing skill_db.conf
- * @param conf struct, pointer to the skill configuration
- * @param sk struct, pointer to s_skill_db
- * @return void
- */
+ * Validates a single required state when reading the skill DB.
+ *
+ * @param state The required state to validate.
+ * @return A number greater than or equal to 0 if the passed required state is valid, otherwise -1.
+ *
+ **/
+static int skill_validate_state_sub(const char *state)
+{
+ nullpo_retr(-1, state);
+
+ int ret_val = ST_NONE;
+
+ if (strcmpi(state, "Hiding") == 0)
+ ret_val = ST_HIDING;
+ else if (strcmpi(state, "Cloaking") == 0)
+ ret_val = ST_CLOAKING;
+ else if (strcmpi(state, "Hidden") == 0)
+ ret_val = ST_HIDDEN;
+ else if (strcmpi(state, "Riding") == 0)
+ ret_val = ST_RIDING;
+ else if (strcmpi(state, "Falcon") == 0)
+ ret_val = ST_FALCON;
+ else if (strcmpi(state, "Cart") == 0)
+ ret_val = ST_CART;
+ else if (strcmpi(state, "Shield") == 0)
+ ret_val = ST_SHIELD;
+ else if (strcmpi(state, "Sight") == 0)
+ ret_val = ST_SIGHT;
+ else if (strcmpi(state, "ExplosionSpirits") == 0)
+ ret_val = ST_EXPLOSIONSPIRITS;
+ else if (strcmpi(state, "CartBoost") == 0)
+ ret_val = ST_CARTBOOST;
+ else if (strcmpi(state, "NotOverWeight") == 0)
+ ret_val = ST_RECOV_WEIGHT_RATE;
+ else if (strcmpi(state, "Moveable") == 0)
+ ret_val = ST_MOVE_ENABLE;
+ else if (strcmpi(state, "InWater") == 0)
+ ret_val = ST_WATER;
+ else if (strcmpi(state, "Dragon") == 0)
+ ret_val = ST_RIDINGDRAGON;
+ else if (strcmpi(state, "Warg") == 0)
+ ret_val = ST_WUG;
+ else if (strcmpi(state, "RidingWarg") == 0)
+ ret_val = ST_RIDINGWUG;
+ else if (strcmpi(state, "MadoGear") == 0)
+ ret_val = ST_MADO;
+ else if (strcmpi(state, "ElementalSpirit") == 0)
+ ret_val = ST_ELEMENTALSPIRIT;
+ else if (strcmpi(state, "PoisonWeapon") == 0)
+ ret_val = ST_POISONINGWEAPON;
+ else if (strcmpi(state, "RollingCutter") == 0)
+ ret_val = ST_ROLLINGCUTTER;
+ else if (strcmpi(state, "MH_Fighting") == 0)
+ ret_val = ST_MH_FIGHTING;
+ else if (strcmpi(state, "MH_Grappling") == 0)
+ ret_val = ST_MH_GRAPPLING;
+ else if (strcmpi(state, "Peco") == 0)
+ ret_val = ST_PECO;
+ else if (strcmpi(state, "None") != 0)
+ ret_val = -1;
+
+ return ret_val;
+}
+
+/**
+ * Validates a skill's required states when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the required states should be set it.
+ *
+ **/
static void skill_validate_state(struct config_setting_t *conf, struct s_skill_db *sk)
{
- const char *type = NULL;
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->state, ST_NONE);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "State");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ const char *state;
+ if (libconfig->setting_lookup_string(t, lv, &state) == CONFIG_TRUE) {
+ int sta = skill->validate_state_sub(state);
+
+ if (sta > ST_NONE)
+ sk->state[i] = sta;
+ else if (sta == -1)
+ ShowWarning("%s: Invalid required state %s specified in level %d for skill ID %d in %s! Defaulting to None...\n",
+ __func__, state, i + 1, sk->nameid, conf->file);
+ }
+ }
+
+ return;
+ }
+
+ const char *state;
+
+ if (libconfig->setting_lookup_string(conf, "State", &state) == CONFIG_TRUE) {
+ int sta = skill->validate_state_sub(state);
+
+ if (sta > ST_NONE)
+ skill->level_set_value(sk->state, sta);
+ else if (sta == -1)
+ ShowWarning("%s: Invalid required state %s specified for skill ID %d in %s! Defaulting to None...\n",
+ __func__, state, sk->nameid, conf->file);
+ }
+}
+
+/**
+ * Validates a skill's Spirit Sphere cost when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the Spirit Sphere cost should be set it.
+ *
+ **/
+static void skill_validate_spirit_sphere_cost(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
nullpo_retv(sk);
- if (libconfig->setting_lookup_string(conf, "State", &type) && strcmpi(type,"None") != ST_NONE) {
- if ( strcmpi(type,"Hiding") == 0 ) sk->state = ST_HIDING;
- else if (strcmpi(type,"Cloaking") == 0 ) sk->state = ST_CLOAKING;
- else if (strcmpi(type,"Hidden") == 0 ) sk->state = ST_HIDDEN;
- else if (strcmpi(type,"Riding") == 0 ) sk->state = ST_RIDING;
- else if (strcmpi(type,"Falcon") == 0 ) sk->state = ST_FALCON;
- else if (strcmpi(type,"Cart") == 0 ) sk->state = ST_CART;
- else if (strcmpi(type,"Shield") == 0 ) sk->state = ST_SHIELD;
- else if (strcmpi(type,"Sight") == 0 ) sk->state = ST_SIGHT;
- else if (strcmpi(type,"ExplosionSpirits") == 0 ) sk->state = ST_EXPLOSIONSPIRITS;
- else if (strcmpi(type,"CartBoost") == 0 ) sk->state = ST_CARTBOOST;
- else if (strcmpi(type,"NotOverWeight") == 0 ) sk->state = ST_RECOV_WEIGHT_RATE;
- else if (strcmpi(type,"Moveable") == 0 ) sk->state = ST_MOVE_ENABLE;
- else if (strcmpi(type,"InWater") == 0 ) sk->state = ST_WATER;
- else if (strcmpi(type,"Dragon") == 0 ) sk->state = ST_RIDINGDRAGON;
- else if (strcmpi(type,"Warg") == 0 ) sk->state = ST_WUG;
- else if (strcmpi(type,"RidingWarg") == 0 ) sk->state = ST_RIDINGWUG;
- else if (strcmpi(type,"MadoGear") == 0 ) sk->state = ST_MADO;
- else if (strcmpi(type,"ElementalSpirit") == 0 ) sk->state = ST_ELEMENTALSPIRIT;
- else if (strcmpi(type,"PoisonWeapon") == 0 ) sk->state = ST_POISONINGWEAPON;
- else if (strcmpi(type,"RollingCutter") == 0 ) sk->state = ST_ROLLINGCUTTER;
- else if (strcmpi(type,"MH_Fighting") == 0 ) sk->state = ST_MH_FIGHTING;
- else if (strcmpi(type,"MH_Grappling") == 0 ) sk->state = ST_MH_GRAPPLING;
- else if (strcmpi(type,"Peco") == 0 ) sk->state = ST_PECO;
+
+ skill->level_set_value(sk->spiritball, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "SpiritSphereCost");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int spirit_sphere_cost;
+
+ if (libconfig->setting_lookup_int(t, lv, &spirit_sphere_cost) == CONFIG_TRUE) {
+ if (spirit_sphere_cost >= 0 && spirit_sphere_cost <= MAX_SPIRITBALL)
+ sk->spiritball[i] = spirit_sphere_cost;
+ else
+ ShowWarning("%s: Invalid Spirit Sphere cost %d specified in level %d for skill ID %d in %s! Minimum is 0, maximum is %d. Defaulting to 0...\n",
+ __func__, spirit_sphere_cost, i + 1, sk->nameid, conf->file, MAX_SPIRITBALL);
+ }
+ }
+
+ return;
+ }
+
+ int spirit_sphere_cost;
+
+ if (libconfig->setting_lookup_int(conf, "SpiritSphereCost", &spirit_sphere_cost) == CONFIG_TRUE) {
+ if (spirit_sphere_cost >= 0 && spirit_sphere_cost <= MAX_SPIRITBALL)
+ skill->level_set_value(sk->spiritball, spirit_sphere_cost);
else
- skilldb_invalid_error(type, "State", sk->nameid);
+ ShowWarning("%s: Invalid Spirit Sphere cost %d specified for skill ID %d in %s! Minimum is 0, maximum is %d. Defaulting to 0...\n",
+ __func__, spirit_sphere_cost, sk->nameid, conf->file, MAX_SPIRITBALL);
}
}
/**
- * Validates the "Items" flag
- * when parsing skill_db.conf
- * @param conf struct, pointer to the skill configuration
- * @param sk struct, pointer to s_skill_db
- * @return void
- */
+ * Validates a skill's required items amounts when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the required items amounts should be set it.
+ *
+ **/
+static void skill_validate_item_requirements_sub_item_amount(struct config_setting_t *conf, struct s_skill_db *sk, int item_index)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++)
+ sk->req_items.item[item_index].amount[i] = 0;
+
+ if (config_setting_is_group(conf)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int amount;
+
+ if (libconfig->setting_lookup_int(conf, lv, &amount) == CONFIG_TRUE) {
+ if (amount >= 0 && amount <= MAX_AMOUNT)
+ sk->req_items.item[item_index].amount[i] = amount;
+ else
+ ShowWarning("%s: Invalid required item amount %d specified in level %d for skill ID %d in %s! Minimum is 0, maximum is %d. Defaulting to 0...\n",
+ __func__, amount, i + 1, sk->nameid, conf->file, MAX_AMOUNT);
+ } else {
+ // Items is not required for this skill level. (Not even in inventory!)
+ sk->req_items.item[item_index].amount[i] = -1;
+ }
+ }
+
+ return;
+ }
+
+ int amount = libconfig->setting_get_int(conf);
+
+ if (amount >= 0 && amount <= MAX_AMOUNT) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++)
+ sk->req_items.item[item_index].amount[i] = amount;
+ } else {
+ ShowWarning("%s: Invalid required item amount %d specified for skill ID %d in %s! Minimum is 0, maximum is %d. Defaulting to 0...\n",
+ __func__, amount, sk->nameid, conf->file, MAX_AMOUNT);
+ }
+}
+
+/**
+ * Validates a skill's required items when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the required items should be set it.
+ *
+ **/
+static void skill_validate_item_requirements_sub_items(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ for (int i = 0; i < MAX_SKILL_ITEM_REQUIRE; i++) {
+ sk->req_items.item[i].id = 0;
+
+ for (int j = 0; j < MAX_SKILL_LEVEL; j++)
+ sk->req_items.item[i].amount[j] = 0;
+ }
+
+ int item_index = 0;
+ int count = libconfig->setting_length(conf);
+
+ for (int i = 0; i < count; i++) {
+ struct config_setting_t *t = libconfig->setting_get_elem(conf, i);
+
+ if (t != NULL && strcasecmp(config_setting_name(t), "Any") != 0) {
+ if (item_index >= MAX_SKILL_ITEM_REQUIRE) {
+ ShowWarning("%s: Too many required items specified for skill ID %d in %s! Skipping item %s...\n",
+ __func__, sk->nameid, conf->file, config_setting_name(t));
+ continue;
+ }
+
+ int item_id = skill->validate_requirements_item_name(config_setting_name(t));
+
+ if (item_id == 0) {
+ ShowWarning("%s: Invalid required item %s specified for skill ID %d in %s! Skipping item...\n",
+ __func__, config_setting_name(t), sk->nameid, conf->file);
+ continue;
+ }
+
+ int j;
+
+ ARR_FIND(0, MAX_SKILL_ITEM_REQUIRE, j, sk->req_items.item[j].id == item_id);
+
+ if (j < MAX_SKILL_ITEM_REQUIRE) {
+ ShowWarning("%s: Duplicate required item %s specified for skill ID %d in %s! Skipping item...\n",
+ __func__, config_setting_name(t), sk->nameid, conf->file);
+ continue;
+ }
+
+ sk->req_items.item[item_index].id = item_id;
+ skill->validate_item_requirements_sub_item_amount(t, sk, item_index);
+ item_index++;
+ }
+ }
+}
+
+/**
+ * Validates a skill's required items any-flag when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the required items any-flag should be set it.
+ *
+ **/
+static void skill_validate_item_requirements_sub_any_flag(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++)
+ sk->req_items.any[i] = false;
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Any");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int any_flag;
+
+ if (libconfig->setting_lookup_bool(t, lv, &any_flag) == CONFIG_TRUE)
+ sk->req_items.any[i] = (any_flag != 0);
+ }
+
+ return;
+ }
+
+ int any_flag;
+
+ if (libconfig->setting_lookup_bool(conf, "Any", &any_flag) == CONFIG_TRUE && any_flag != 0) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++)
+ sk->req_items.any[i] = true;
+ }
+}
+
+/**
+ * Validates a skill's required items when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the required items should be set it.
+ *
+ **/
static void skill_validate_item_requirements(struct config_setting_t *conf, struct s_skill_db *sk)
{
- struct config_setting_t *tt = NULL;
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Items");
+ if (t != NULL && config_setting_is_group(t)) {
+ skill->validate_item_requirements_sub_any_flag(t, sk);
+ skill->validate_item_requirements_sub_items(t, sk);
+ }
+}
+
+/**
+ * Validates a skill's required equipment amounts when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the required equipment amounts should be set it.
+ *
+ **/
+static void skill_validate_equip_requirements_sub_item_amount(struct config_setting_t *conf, struct s_skill_db *sk, int item_index)
+{
+ nullpo_retv(conf);
nullpo_retv(sk);
- if ((tt=libconfig->setting_get_member(conf, "Items")) && config_setting_is_group(conf)) {
- int itx=-1;
- struct config_setting_t *it;
- while((it=libconfig->setting_get_elem(tt, ++itx)) && itx < MAX_SKILL_ITEM_REQUIRE) {
- const char *type = config_setting_name(it);
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++)
+ sk->req_equip.item[item_index].amount[i] = 0;
- if( type[0] == 'I' && type[1] == 'D' && itemdb->exists(atoi(type+2)) )
- sk->itemid[itx] = atoi(type+2);
- else if(!script->get_constant(type, &sk->itemid[itx])) {
- ShowWarning("skill_read_skilldb: Invalid required Item '%s' given for skill Id %d in '%s', skipping...\n",type, sk->nameid, DBPATH"skill_db.conf");
+ if (config_setting_is_group(conf)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int amount;
+
+ if (libconfig->setting_lookup_int(conf, lv, &amount) == CONFIG_TRUE) {
+ if (amount > 0) {
+ sk->req_equip.item[item_index].amount[i] = amount;
+ } else {
+ ShowWarning("%s: Invalid required equipment amount %d specified in level %d for skill ID %d in %s! Must be greater than 0. Defaulting to 1...\n",
+ __func__, amount, i + 1, sk->nameid, conf->file);
+ sk->req_equip.item[item_index].amount[i] = 1;
+ }
+ }
+ }
+
+ return;
+ }
+
+ int amount = libconfig->setting_get_int(conf);
+
+ if (amount <= 0) {
+ ShowWarning("%s: Invalid required equipment amount %d specified for skill ID %d in %s! Must be greater than 0. Defaulting to 1...\n",
+ __func__, amount, sk->nameid, conf->file);
+ amount = 1;
+ }
+
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++)
+ sk->req_equip.item[item_index].amount[i] = amount;
+}
+
+/**
+ * Validates a skill's required equipment when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the required equipment should be set it.
+ *
+ **/
+static void skill_validate_equip_requirements_sub_items(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ for (int i = 0; i < MAX_SKILL_ITEM_REQUIRE; i++) {
+ sk->req_equip.item[i].id = 0;
+
+ for (int j = 0; j < MAX_SKILL_LEVEL; j++)
+ sk->req_equip.item[i].amount[j] = 0;
+ }
+
+ int item_index = 0;
+ int count = libconfig->setting_length(conf);
+
+ for (int i = 0; i < count; i++) {
+ struct config_setting_t *t = libconfig->setting_get_elem(conf, i);
+
+ if (t != NULL && strcasecmp(config_setting_name(t), "Any") != 0) {
+ if (item_index >= MAX_SKILL_ITEM_REQUIRE) {
+ ShowWarning("%s: Too many required equipment items specified for skill ID %d in %s! Skipping item %s...\n",
+ __func__, sk->nameid, conf->file, config_setting_name(t));
continue;
}
- if (config_setting_is_group(it)) {
- // TODO: Per-level item requirements are not implemented yet!
- // We just take the first level for the time being (old txt behavior)
- sk->amount[itx] = libconfig->setting_get_int_elem(it, 0);
- } else {
- sk->amount[itx] = libconfig->setting_get_int(it);
+ int item_id = skill->validate_requirements_item_name(config_setting_name(t));
+ struct item_data *it = itemdb->exists(item_id);
+
+ if (item_id == 0 || it == NULL) {
+ ShowWarning("%s: Invalid required equipment item %s specified for skill ID %d in %s! Skipping item...\n",
+ __func__, config_setting_name(t), sk->nameid, conf->file);
+ continue;
}
+
+ if (it->type != IT_WEAPON && it->type != IT_AMMO && it->type != IT_ARMOR && it->type != IT_CARD) {
+ ShowWarning("%s: Non-equipment item %s specified for skill ID %d in %s! Skipping item...\n",
+ __func__, config_setting_name(t), sk->nameid, conf->file);
+ continue;
+ }
+
+ int j;
+
+ ARR_FIND(0, MAX_SKILL_ITEM_REQUIRE, j, sk->req_equip.item[j].id == item_id);
+
+ if (j < MAX_SKILL_ITEM_REQUIRE) {
+ ShowWarning("%s: Duplicate required equipment item %s specified for skill ID %d in %s! Skipping item...\n",
+ __func__, config_setting_name(t), sk->nameid, conf->file);
+ continue;
+ }
+
+ sk->req_equip.item[item_index].id = item_id;
+ skill->validate_equip_requirements_sub_item_amount(t, sk, item_index);
+ item_index++;
}
}
}
/**
- * Validates the "Unit > Target" flag
- * when parsing skill_db.conf
- * @param conf struct, pointer to the skill configuration
- * @param sk struct, pointer to s_skill_db
- * @return void
- */
-static void skill_validate_unit_target(struct config_setting_t *conf, struct s_skill_db *sk)
+ * Validates a skill's required equipment any-flag when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the required equipment any-flag should be set it.
+ *
+ **/
+static void skill_validate_equip_requirements_sub_any_flag(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++)
+ sk->req_equip.any[i] = false;
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Any");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int any_flag;
+
+ if (libconfig->setting_lookup_bool(t, lv, &any_flag) == CONFIG_TRUE)
+ sk->req_equip.any[i] = (any_flag != 0);
+ }
+
+ return;
+ }
+
+ int any_flag;
+
+ if (libconfig->setting_lookup_bool(conf, "Any", &any_flag) == CONFIG_TRUE && any_flag != 0) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++)
+ sk->req_equip.any[i] = true;
+ }
+}
+
+/**
+ * Validates a skill's required equipment when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the required equipment should be set it.
+ *
+ **/
+static void skill_validate_equip_requirements(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Equip");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ skill->validate_equip_requirements_sub_any_flag(t, sk);
+ skill->validate_equip_requirements_sub_items(t, sk);
+ }
+}
+
+/**
+ * Validates a required item's config setting name when reading the skill DB.
+ *
+ * @param name The config setting name to validate.
+ * @return The corresponding item ID if the passed config setting name is valid, otherwise 0.
+ *
+ **/
+static int skill_validate_requirements_item_name(const char *name)
{
- const char *type = NULL;
+ nullpo_ret(name);
+
+ int item_id = 0;
+
+ if (strlen(name) > 2 && name[0] == 'I' && name[1] == 'D') {
+ if ((item_id = atoi(name + 2)) == 0)
+ return 0;
+ struct item_data *it = itemdb->exists(item_id);
+
+ if (it == NULL)
+ return 0;
+
+ return it->nameid;
+ }
+
+ if (!script->get_constant(name, &item_id))
+ return 0;
+
+ return item_id;
+}
+
+/**
+ * Validates a skill's requirements when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the requirements should be set it.
+ *
+ **/
+static void skill_validate_requirements(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
nullpo_retv(sk);
- if(libconfig->setting_lookup_string(conf, "Target", &type)) {
- if(!strcmpi(type,"NotEnemy")) sk->unit_target = BCT_NOENEMY;
- else if(!strcmpi(type,"NotParty")) sk->unit_target = BCT_NOPARTY;
- else if (!strcmpi(type,"NotGuild")) sk->unit_target = BCT_NOGUILD;
- else if(!strcmpi(type,"Friend")) sk->unit_target = BCT_NOENEMY;
- else if(!strcmpi(type,"Party")) sk->unit_target = BCT_PARTY;
- else if(!strcmpi(type,"Ally")) sk->unit_target = BCT_PARTY|BCT_GUILD;
- else if(!strcmpi(type,"Guild")) sk->unit_target = BCT_GUILD;
- else if(!strcmpi(type,"All")) sk->unit_target = BCT_ALL;
- else if(!strcmpi(type,"Enemy")) sk->unit_target = BCT_ENEMY;
- else if(!strcmpi(type,"Self")) sk->unit_target = BCT_SELF;
- else if(!strcmpi(type,"SameGuild")) sk->unit_target = BCT_GUILD|BCT_SAMEGUILD;
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Requirements");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ skill->validate_hp_cost(t, sk);
+ skill->validate_sp_cost(t, sk);
+ skill->validate_hp_rate_cost(t, sk);
+ skill->validate_sp_rate_cost(t, sk);
+ skill->validate_max_hp_trigger(t, sk);
+ skill->validate_max_sp_trigger(t, sk);
+ skill->validate_zeny_cost(t, sk);
+ skill->validate_weapontype(t, sk);
+ skill->validate_ammotype(t, sk);
+ skill->validate_ammo_amount(t, sk);
+ skill->validate_state(t, sk);
+ skill->validate_spirit_sphere_cost(t, sk);
+ skill->validate_item_requirements(t, sk);
+ skill->validate_equip_requirements(t, sk);
}
+}
+
+/**
+ * Validates a single unit ID when reading the skill DB.
+ *
+ * @param unit_id The unit ID to validate.
+ * @return A number greater than or equal to 0 if the passed unit ID is valid, otherwise -1.
+ *
+ **/
+static int skill_validate_unit_id_sub(int unit_id)
+{
+ if (unit_id == 0 || (unit_id >= UNT_SAFETYWALL && unit_id <= UNT_SV_ROOTTWIST))
+ return unit_id;
- if (sk->unit_flag & UF_DEFNOTENEMY && battle_config.defnotenemy)
- sk->unit_target = BCT_NOENEMY;
+ return -1;
+}
- //By default, target just characters.
- sk->unit_target |= BL_CHAR;
+/**
+ * Validates a skill's unit IDs if specified as single value when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's unit ID data.
+ * @param sk The s_skill_db struct where the unit IDs should be set it.
+ * @param index The array index to use. (-1 for whole array.)
+ * @param unit_id The unit ID to validate.
+ *
+ **/
+static void skill_validate_unit_id_value(struct config_setting_t *conf, struct s_skill_db *sk, int index, int unit_id)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
- if (sk->unit_flag & UF_NOPC)
- sk->unit_target &= ~BL_PC;
- if (sk->unit_flag & UF_NOMOB)
- sk->unit_target &= ~BL_MOB;
- if (sk->unit_flag & UF_SKILL)
- sk->unit_target |= BL_SKILL;
+ if (skill->validate_unit_id_sub(unit_id) == -1) {
+ char level_string[14]; // Big enough to contain "in level 999 " in case of custom MAX_SKILL_LEVEL.
+
+ if (index == -1)
+ *level_string = '\0';
+ else
+ safesnprintf(level_string, sizeof(level_string), "in level %d ", index + 1);
+
+ ShowWarning("%s: Invalid unit ID %d specified %sfor skill ID %d in %s! Must be greater than or equal to 0. Defaulting to 0...\n",
+ __func__, unit_id, level_string, sk->nameid, conf->file);
+
+ return;
+ }
+
+ if (index == -1) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++)
+ sk->unit_id[i][0] = unit_id;
+ } else {
+ sk->unit_id[index][0] = unit_id;
+ }
}
/**
- * Validates the "Unit > Flag" setting
- * when parsing skill_db.conf
- * @param type const char, name of the flag being parsed.
- * @param on boolean, switch for flag setting
- * @param sk struct, pointer to s_skill_db.
- * @return (void)
- */
+ * Validates a skill's unit IDs if specified as array when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's unit ID data.
+ * @param sk The s_skill_db struct where the unit IDs should be set it.
+ * @param index The array index to use. (-1 for whole array.)
+ *
+ **/
+static void skill_validate_unit_id_array(struct config_setting_t *conf, struct s_skill_db *sk, int index)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ char level_string[14]; // Big enough to contain "in level 999 " in case of custom MAX_SKILL_LEVEL.
+
+ if (index == -1)
+ *level_string = '\0';
+ else
+ safesnprintf(level_string, sizeof(level_string), "in level %d ", index + 1);
+
+ if (libconfig->setting_length(conf) == 0) {
+ ShowWarning("%s: No unit ID(s) specified %sfor skill ID %d in %s! Defaulting to 0...\n",
+ __func__, level_string, sk->nameid, conf->file);
+ return;
+ }
+
+ if (libconfig->setting_length(conf) > 2)
+ ShowWarning("%s: Specified more than two unit IDs %sfor skill ID %d in %s! Reading only the first two...\n",
+ __func__, level_string, sk->nameid, conf->file);
+
+ int unit_id1 = libconfig->setting_get_int_elem(conf, 0);
+
+ if (skill->validate_unit_id_sub(unit_id1) == -1) {
+ ShowWarning("%s: Invalid unit ID %d specified %sfor skill ID %d in %s! Must be greater than or equal to 0. Defaulting to 0...\n",
+ __func__, unit_id1, level_string, sk->nameid, conf->file);
+ unit_id1 = 0;
+ }
+
+ int unit_id2 = 0;
+
+ if (libconfig->setting_length(conf) > 1) {
+ unit_id2 = libconfig->setting_get_int_elem(conf, 1);
+
+ if (skill->validate_unit_id_sub(unit_id2) == -1) {
+ ShowWarning("%s: Invalid unit ID %d specified %sfor skill ID %d in %s! Must be greater than or equal to 0. Defaulting to 0...\n",
+ __func__, unit_id2, level_string, sk->nameid, conf->file);
+ unit_id2 = 0;
+ }
+ }
+
+ if (unit_id1 == 0 && unit_id2 == 0)
+ return;
+
+ if (index == -1) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ sk->unit_id[i][0] = unit_id1;
+ sk->unit_id[i][1] = unit_id2;
+ }
+ } else {
+ sk->unit_id[index][0] = unit_id1;
+ sk->unit_id[index][1] = unit_id2;
+ }
+}
+
+/**
+ * Validates a skill's unit IDs if specified as group when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's unit ID data.
+ * @param sk The s_skill_db struct where the unit IDs should be set it.
+ *
+ **/
+static void skill_validate_unit_id_group(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ struct config_setting_t *t;
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+
+ if ((t = libconfig->setting_get_member(conf, lv)) != NULL && config_setting_is_array(t)) {
+ skill_validate_unit_id_array(t, sk, i);
+ continue;
+ }
+
+ int unit_id;
+
+ if (libconfig->setting_lookup_int(conf, lv, &unit_id) == CONFIG_TRUE)
+ skill_validate_unit_id_value(conf, sk, i, unit_id);
+ }
+}
+
+/**
+ * Validates a skill's unit IDs when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the unit IDs should be set it.
+ *
+ **/
+static void skill_validate_unit_id(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ sk->unit_id[i][0] = 0;
+ sk->unit_id[i][1] = 0;
+ }
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Id");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ skill_validate_unit_id_group(t, sk);
+ return;
+ }
+
+ if (t != NULL && config_setting_is_array(t)) {
+ skill_validate_unit_id_array(t, sk, -1);
+ return;
+ }
+
+ int unit_id;
+
+ if (libconfig->setting_lookup_int(conf, "Id", &unit_id) == CONFIG_TRUE)
+ skill_validate_unit_id_value(conf, sk, -1, unit_id);
+}
+
+/**
+ * Validates a skill's unit layout when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the unit layout should be set it.
+ *
+ **/
+static void skill_validate_unit_layout(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->unit_layout_type, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Layout");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int unit_layout;
+
+ if (libconfig->setting_lookup_int(t, lv, &unit_layout) == CONFIG_TRUE) {
+ if (unit_layout >= -1 && unit_layout <= MAX_SKILL_UNIT_LAYOUT)
+ sk->unit_layout_type[i] = unit_layout;
+ else
+ ShowWarning("%s: Invalid unit layout %d specified in level %d for skill ID %d in %s! Minimum is -1, maximum is %d. Defaulting to 0...\n",
+ __func__, unit_layout, i + 1, sk->nameid, conf->file, MAX_SKILL_UNIT_LAYOUT);
+ }
+ }
+
+ return;
+ }
+
+ int unit_layout;
+
+ if (libconfig->setting_lookup_int(conf, "Layout", &unit_layout) == CONFIG_TRUE) {
+ if (unit_layout >= -1 && unit_layout <= MAX_SKILL_UNIT_LAYOUT)
+ skill->level_set_value(sk->unit_layout_type, unit_layout);
+ else
+ ShowWarning("%s: Invalid unit layout %d specified for skill ID %d in %s! Minimum is -1, maximum is %d. Defaulting to 0...\n",
+ __func__, unit_layout, sk->nameid, conf->file, MAX_SKILL_UNIT_LAYOUT);
+ }
+}
+
+/**
+ * Validates a skill's unit range when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the unit range should be set it.
+ *
+ **/
+static void skill_validate_unit_range(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->unit_range, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Range");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int unit_range;
+
+ if (libconfig->setting_lookup_int(t, lv, &unit_range) == CONFIG_TRUE) {
+ if (unit_range >= -1 && unit_range <= UCHAR_MAX)
+ sk->unit_range[i] = unit_range;
+ else
+ ShowWarning("%s: Invalid unit range %d specified in level %d for skill ID %d in %s! Minimum is -1, maximum is %d. Defaulting to 0...\n",
+ __func__, unit_range, i + 1, sk->nameid, conf->file, UCHAR_MAX);
+ }
+ }
+
+ return;
+ }
+
+ int unit_range;
+
+ if (libconfig->setting_lookup_int(conf, "Range", &unit_range) == CONFIG_TRUE) {
+ if (unit_range >= -1 && unit_range <= UCHAR_MAX)
+ skill->level_set_value(sk->unit_range, unit_range);
+ else
+ ShowWarning("%s: Invalid unit range %d specified for skill ID %d in %s! Minimum is -1, maximum is %d. Defaulting to 0...\n",
+ __func__, unit_range, sk->nameid, conf->file, UCHAR_MAX);
+ }
+}
+
+/**
+ * Validates a skill's unit interval when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the unit interval should be set it.
+ *
+ **/
+static void skill_validate_unit_interval(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ skill->level_set_value(sk->unit_interval, 0);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Interval");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ int unit_interval;
+
+ if (libconfig->setting_lookup_int(t, lv, &unit_interval) == CONFIG_TRUE) {
+ if (unit_interval >= INFINITE_DURATION)
+ sk->unit_interval[i] = unit_interval;
+ else
+ ShowWarning("%s: Invalid unit interval %d specified in level %d for skill ID %d in %s! Must be greater than or equal to %d. Defaulting to 0...\n",
+ __func__, unit_interval, i + 1, sk->nameid, conf->file, INFINITE_DURATION);
+ }
+ }
+
+ return;
+ }
+
+ int unit_interval;
+
+ if (libconfig->setting_lookup_int(conf, "Interval", &unit_interval) == CONFIG_TRUE) {
+ if (unit_interval >= INFINITE_DURATION)
+ skill->level_set_value(sk->unit_interval, unit_interval);
+ else
+ ShowWarning("%s: Invalid unit interval %d specified for skill ID %d in %s! Must be greater than or equal to %d. Defaulting to 0...\n",
+ __func__, unit_interval, sk->nameid, conf->file, INFINITE_DURATION);
+ }
+}
+
+/**
+ * Validates a single unit flag when reading the skill DB.
+ *
+ * @param type The unit flag to validate.
+ * @param on Whether the unit flag is set for the skill.
+ * @param sk The s_skill_db struct where the unit flag should be set it.
+ * @return 0 if the passed unit flag is valid, otherwise 1.
+ *
+ **/
static int skill_validate_unit_flag_sub(const char *type, bool on, struct s_skill_db *sk)
{
- nullpo_ret(type);
- nullpo_ret(sk);
+ nullpo_retr(1, type);
+ nullpo_retr(1, sk);
+
if (strcmpi(type, "UF_DEFNOTENEMY") == 0) {
- if (on) {
+ if (on)
sk->unit_flag |= UF_DEFNOTENEMY;
- } else {
+ else
sk->unit_flag &= ~UF_DEFNOTENEMY;
- }
} else if (strcmpi(type, "UF_NOREITERATION") == 0) {
- if (on) {
+ if (on)
sk->unit_flag |= UF_NOREITERATION;
- } else {
+ else
sk->unit_flag &= ~UF_NOREITERATION;
- }
} else if (strcmpi(type, "UF_NOFOOTSET") == 0) {
- if (on) {
+ if (on)
sk->unit_flag |= UF_NOFOOTSET;
- } else {
+ else
sk->unit_flag &= ~UF_NOFOOTSET;
- }
} else if (strcmpi(type, "UF_NOOVERLAP") == 0) {
- if (on) {
+ if (on)
sk->unit_flag |= UF_NOOVERLAP;
- } else {
+ else
sk->unit_flag &= ~UF_NOOVERLAP;
- }
} else if (strcmpi(type, "UF_PATHCHECK") == 0) {
- if (on) {
+ if (on)
sk->unit_flag |= UF_PATHCHECK;
- } else {
+ else
sk->unit_flag &= ~UF_PATHCHECK;
- }
} else if (strcmpi(type, "UF_NOPC") == 0) {
- if (on) {
+ if (on)
sk->unit_flag |= UF_NOPC;
- } else {
+ else
sk->unit_flag &= ~UF_NOPC;
- }
} else if (strcmpi(type, "UF_NOMOB") == 0) {
- if (on) {
+ if (on)
sk->unit_flag |= UF_NOMOB;
- } else {
+ else
sk->unit_flag &= ~UF_NOMOB;
- }
} else if (strcmpi(type, "UF_SKILL") == 0) {
- if (on) {
+ if (on)
sk->unit_flag |= UF_SKILL;
- } else {
+ else
sk->unit_flag &= ~UF_SKILL;
- }
} else if (strcmpi(type, "UF_DANCE") == 0) {
- if (on) {
+ if (on)
sk->unit_flag |= UF_DANCE;
- } else {
+ else
sk->unit_flag &= ~UF_DANCE;
- }
} else if (strcmpi(type, "UF_ENSEMBLE") == 0) {
- if (on) {
+ if (on)
sk->unit_flag |= UF_ENSEMBLE;
- } else {
+ else
sk->unit_flag &= ~UF_ENSEMBLE;
- }
} else if (strcmpi(type, "UF_SONG") == 0) {
- if (on) {
+ if (on)
sk->unit_flag |= UF_SONG;
- } else {
+ else
sk->unit_flag &= ~UF_SONG;
- }
} else if (strcmpi(type, "UF_DUALMODE") == 0) {
- if (on) {
+ if (on)
sk->unit_flag |= UF_DUALMODE;
- } else {
+ else
sk->unit_flag &= ~UF_DUALMODE;
- }
} else if (strcmpi(type, "UF_RANGEDSINGLEUNIT") == 0) {
- if (on) {
+ if (on)
sk->unit_flag |= UF_RANGEDSINGLEUNIT;
- } else {
+ else
sk->unit_flag &= ~UF_RANGEDSINGLEUNIT;
- }
} else {
- return 1; // Invalid Type
+ return 1;
}
return 0;
}
/**
- * Validate "Unit > Flag" setting
- * when parsing skill_db.conf
- * @param conf struct, pointer to the skill configuration
- * @param sk struct, struct, pointer to s_skill_db
- * @return (void)
- */
+ * Validates a skill's unit flags when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the unit flags should be set it.
+ *
+ **/
static void skill_validate_unit_flag(struct config_setting_t *conf, struct s_skill_db *sk)
{
- struct config_setting_t *t = NULL;
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ sk->unit_flag = 0;
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Flag");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ struct config_setting_t *tt;
+ int i = 0;
+
+ while ((tt = libconfig->setting_get_elem(t, i++)) != NULL) {
+ bool on = libconfig->setting_get_bool_real(tt);
+
+ if (skill->validate_unit_flag_sub(config_setting_name(tt), on, sk))
+ ShowWarning("%s: Invalid unit flag %s specified for skill ID %d in %s! Skipping flag...\n",
+ __func__, config_setting_name(tt), sk->nameid, conf->file);
+ }
+ }
+}
+
+/**
+ * Validates a single unit target when reading the skill DB.
+ *
+ * @param target The unit target to validate.
+ * @return A number greater than or equal to 0 if the passed unit target is valid, otherwise -1.
+ *
+ **/
+static int skill_validate_unit_target_sub(const char *target)
+{
+ nullpo_retr(-1, target);
+
+ int ret_val = BCT_NOONE;
+
+ if (strcmpi(target, "NotEnemy") == 0)
+ ret_val = BCT_NOENEMY;
+ else if (strcmpi(target, "NotParty") == 0)
+ ret_val = BCT_NOPARTY;
+ else if (strcmpi(target, "NotGuild") == 0)
+ ret_val = BCT_NOGUILD;
+ else if (strcmpi(target, "Friend") == 0)
+ ret_val = BCT_NOENEMY;
+ else if (strcmpi(target, "Party") == 0)
+ ret_val = BCT_PARTY;
+ else if (strcmpi(target, "Ally") == 0)
+ ret_val = BCT_PARTY|BCT_GUILD;
+ else if (strcmpi(target, "Guild") == 0)
+ ret_val = BCT_GUILD;
+ else if (strcmpi(target, "All") == 0)
+ ret_val = BCT_ALL;
+ else if (strcmpi(target, "Enemy") == 0)
+ ret_val = BCT_ENEMY;
+ else if (strcmpi(target, "Self") == 0)
+ ret_val = BCT_SELF;
+ else if (strcmpi(target, "SameGuild") == 0)
+ ret_val = BCT_SAMEGUILD;
+ else if (strcmpi(target, "GuildAlly") == 0)
+ ret_val = BCT_GUILDALLY;
+ else if (strcmpi(target, "Neutral") == 0)
+ ret_val = BCT_NEUTRAL;
+ else if (strcmpi(target, "None") != 0)
+ ret_val = -1;
+
+ return ret_val;
+}
+/**
+ * Validates a skill's unit targets when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the unit targets should be set it.
+ *
+ **/
+static void skill_validate_unit_target(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
nullpo_retv(sk);
- if ((t=libconfig->setting_get_member(conf, "Flag")) && config_setting_is_group(t)) {
- int j=0;
- struct config_setting_t *tt = NULL;
- while ((tt = libconfig->setting_get_elem(t, j++))) {
- const char *name = config_setting_name(tt);
- if (skill->validate_unit_flag_sub(name, libconfig->setting_get_bool_real(tt), sk))
- skilldb_invalid_error(name, config_setting_name(t), sk->nameid);
+ skill->level_set_value(sk->unit_target, BCT_NOONE);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Target");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ char lv[6]; // Big enough to contain "Lv999" in case of custom MAX_SKILL_LEVEL.
+ safesnprintf(lv, sizeof(lv), "Lv%d", i + 1);
+ const char *unit_target;
+
+ if (libconfig->setting_lookup_string(t, lv, &unit_target) == CONFIG_TRUE) {
+ int target = skill->validate_unit_target_sub(unit_target);
+
+ if (target > BCT_NOONE)
+ sk->unit_target[i] = target;
+ else if (target == -1)
+ ShowWarning("%s: Invalid unit target %s specified in level %d for skill ID %d in %s! Defaulting to None...\n",
+ __func__, unit_target, i + 1, sk->nameid, conf->file);
+ }
+ }
+ } else {
+ const char *unit_target;
+
+ if (libconfig->setting_lookup_string(conf, "Target", &unit_target) == CONFIG_TRUE) {
+ int target = skill->validate_unit_target_sub(unit_target);
+
+ if (target > BCT_NOONE)
+ skill->level_set_value(sk->unit_target, target);
+ else if (target == -1)
+ ShowWarning("%s: Invalid unit target %s specified for skill ID %d in %s! Defaulting to None...\n",
+ __func__, unit_target, sk->nameid, conf->file);
}
}
+
+ for (int i = 0; i < MAX_SKILL_LEVEL; i++) {
+ if ((sk->unit_flag & UF_DEFNOTENEMY) != 0 && battle_config.defnotenemy != 0)
+ sk->unit_target[i] = BCT_NOENEMY;
+
+ // By default target just characters.
+ sk->unit_target[i] |= BL_CHAR;
+
+ if ((sk->unit_flag & UF_NOPC) != 0)
+ sk->unit_target[i] &= ~BL_PC;
+
+ if ((sk->unit_flag & UF_NOMOB) != 0)
+ sk->unit_target[i] &= ~BL_MOB;
+
+ if ((sk->unit_flag & UF_SKILL) != 0)
+ sk->unit_target[i] |= BL_SKILL;
+ }
}
+
+/**
+ * Validates a skill's unit data when reading the skill DB.
+ *
+ * @param conf The libconfig settings block which contains the skill's data.
+ * @param sk The s_skill_db struct where the unit data should be set it.
+ *
+ **/
+static void skill_validate_unit(struct config_setting_t *conf, struct s_skill_db *sk)
+{
+ nullpo_retv(conf);
+ nullpo_retv(sk);
+
+ struct config_setting_t *t = libconfig->setting_get_member(conf, "Unit");
+
+ if (t != NULL && config_setting_is_group(t)) {
+ skill->validate_unit_id(t, sk);
+ skill->validate_unit_layout(t, sk);
+ skill->validate_unit_range(t, sk);
+ skill->validate_unit_interval(t, sk);
+ skill->validate_unit_flag(t, sk);
+ skill->validate_unit_target(t, sk);
+ }
+}
+
/**
* Validate additional field settings via plugins
* when parsing skill_db.conf
@@ -21097,293 +23727,100 @@ static void skill_validate_additional_fields(struct config_setting_t *conf, stru
}
/**
- * Validates a skill entry and adds it to the database. [ Smokexyz/Hercules ]
- * @param sk contains skill data to be checked.
- * @param *source filepath constant.
- * @return boolean true on success.
- */
-static bool skill_validate_skilldb(struct s_skill_db *sk, const char *source)
+ * Reads a skill DB file from relative path.
+ *
+ * @param filename The skill DB's file name including the DB path.
+ * @return True on success, otherwise false.
+ *
+ **/
+static bool skill_read_skilldb(const char *filename)
{
- int idx;
+ nullpo_retr(false, filename);
- nullpo_retr(false, sk);
- idx = skill->get_index(sk->nameid);
- if (idx == 0) {
- ShowWarning("skill_validate_skilldb: Invalid skill Id %d provided in '%s'! ... skipping\n", sk->nameid, source);
- ShowInfo("It is possible that the skill Id is 0 or unavailable (interferes with guild/homun/mercenary skill mapping).\n");
- return false;
- } else if (sk->max <= 0) {
- ShowError("skill_validate_skilldb: Invalid Max Level %d specified for skill Id %d in '%s', skipping...\n", sk->max, sk->nameid, source);
- return false;
- }
+ char filepath[256];
- /* Direct assignment of temporary skill storage to skill db */
- skill->dbs->db[idx] = *sk;
- /* Put skill name in name2id DB */
- strdb_iput(skill->name2id_db, skill->dbs->db[idx].name, skill->dbs->db[idx].nameid);
- /* Set Name to Id script constants */
- script->set_constant2(skill->dbs->db[idx].name, (int)skill->dbs->db[idx].nameid, false, false);
+ libconfig->format_db_path(filename, filepath, sizeof(filepath));
- return true;
-}
+ if (!exists(filepath)) {
+ ShowError("%s: Can't find file %s! Abort reading skills...\n", __func__, filepath);
+ return false;
+ }
-/**
- * Reads skill_db.conf from relative filepath and processes [ Smokexyz/Hercules ]
- * entries into the skill database.
- * @param filename contains the file path and name.
- * @return boolean true on success
- */
-static bool skill_read_skilldb(const char *filename)
-{
struct config_t skilldb;
- struct config_setting_t *sk, *conf;
- char filepath[256];
- int count=0, index=0;
- bool duplicate[MAX_SKILL_DB] = {0};
-
- nullpo_retr(false, filename);
-
- libconfig->format_db_path(filename, filepath, sizeof(filepath));
- if (!libconfig->load_file(&skilldb, filepath)) {
+ if (libconfig->load_file(&skilldb, filepath) == 0)
return false; // Libconfig error report.
- }
- // Possible Syntax error.
- if ((sk=libconfig->setting_get_member(skilldb.root, "skill_db")) == NULL) {
- ShowError("skill_read_skilldb: Skill DB could not be loaded, please check '%s'.\n", filepath);
+ struct config_setting_t *sk = libconfig->setting_get_member(skilldb.root, "skill_db");
+
+ if (sk == NULL) {
+ ShowError("%s: Skill DB could not be loaded! Please check %s.\n", __func__, filepath);
libconfig->destroy(&skilldb);
return false;
}
- while ((conf = libconfig->setting_get_elem(sk,index++))) {
- int idx=0, skill_id=0, temp=0;
- struct config_setting_t *t = NULL, *tt = NULL;
- struct s_skill_db tmp_db = { 0 };
-
- /* Skill ID */
- if (!libconfig->setting_lookup_int(conf, "Id", &skill_id)) {
- ShowError("skill_read_skilldb: Skill Id not specified for entry %d in '%s', skipping...\n", index, filepath );
- continue;
- }
+ struct config_setting_t *conf;
+ int index = 0;
+ int count = 0;
- tmp_db.nameid = skill_id;
-
- if((idx = skill->get_index(skill_id)) == 0) {
- ShowError("skill_read_skilldb: Skill Id %d is out of range, or within a reserved range (for guild, homunculus, mercenary or elemental skills). skipping...\n", idx);
- continue;
- }
+ while ((conf = libconfig->setting_get_elem(sk, index++)) != NULL) {
+ struct s_skill_db tmp_db = {0};
- if (duplicate[idx]) {
- ShowWarning("skill_read_skilldb: Duplicate Skill Id %d in entry %d in '%s', skipping...\n", skill_id, index, filepath);
+ /** Validate mandatory fields. **/
+ skill->validate_id(conf, &tmp_db, index);
+ if (tmp_db.nameid == 0)
continue;
- }
- /* Skill Name Constant */
- if (!libconfig->setting_lookup_mutable_string(conf, "Name", tmp_db.name, sizeof(tmp_db.name))) {
- ShowError("skill_read_skilldb: Name not specified for skill Id %d in '%s', skipping...\n", skill_id, filepath);
+ skill->validate_name(conf, &tmp_db);
+ if (*tmp_db.name == '\0')
continue;
- }
-
- /* Skill Description */
- libconfig->setting_lookup_mutable_string(conf, "Description", tmp_db.desc, sizeof(tmp_db.desc));
- /* Max Level */
- if (!libconfig->setting_lookup_int(conf, "MaxLevel", &temp)) {
- ShowError("skill_read_skilldb: MaxLevel not specified for skill Id %d in '%s', skipping...\n", skill_id, filepath);
+ skill->validate_max_level(conf, &tmp_db);
+ if (tmp_db.max == 0)
continue;
- } else {
- tmp_db.max = temp;
- }
- /* Range */
- if ((t=libconfig->setting_get_member(conf, "Range")))
- skill->config_set_level(t, tmp_db.range);
-
- /* Hit Type */
+ /** Validate optional fields. **/
+ skill->validate_description(conf, &tmp_db);
+ skill->validate_range(conf, &tmp_db);
skill->validate_hittype(conf, &tmp_db);
-
- /* Skill Type */
skill->validate_skilltype(conf, &tmp_db);
-
- /* Skill Info */
skill->validate_skillinfo(conf, &tmp_db);
-
- /* Skill Attack Type */
skill->validate_attacktype(conf, &tmp_db);
-
- /* Skill Element */
skill->validate_element(conf, &tmp_db);
-
- /* Damage Type */
skill->validate_damagetype(conf, &tmp_db);
-
- /* Splash Range */
- if ((t = libconfig->setting_get_member(conf, "SplashRange")))
- skill->config_set_level(t, tmp_db.splash);
-
- /* Number of Hits */
- if ((t = libconfig->setting_get_member(conf, "NumberOfHits")) && config_setting_is_group(t))
- skill->config_set_level(t, tmp_db.num);
- else if ((libconfig->setting_lookup_int(conf, "NumberOfHits", &temp)))
- skill->level_set_value(tmp_db.num, temp);
- else
- skill->level_set_value(tmp_db.num, 1); // Default 1
-
- /* Interrupt Cast */
- if (libconfig->setting_lookup_bool(conf, "InterruptCast", &tmp_db.castcancel) == CONFIG_FALSE)
- tmp_db.castcancel = 0;
-
- /* Cast Defense Rate */
- libconfig->setting_lookup_int(conf, "CastDefRate", &tmp_db.cast_def_rate);
-
- /* Skill Instances */
- if ((t = libconfig->setting_get_member(conf, "SkillInstances")))
- skill->config_set_level(t, tmp_db.maxcount);
-
- /* Knock-Back Tiles */
- if ((t = libconfig->setting_get_member(conf, "KnockBackTiles")))
- skill->config_set_level(t, tmp_db.blewcount);
- /**
- * Skill Cast / Delay data handling
- */
- /* Cast Time */
- if ((t=libconfig->setting_get_member(conf, "CastTime")))
- skill->config_set_level(t, tmp_db.cast);
-
- /* After Cast Act Delay */
- if ((t=libconfig->setting_get_member(conf, "AfterCastActDelay")))
- skill->config_set_level(t, tmp_db.delay);
-
- /* After Cast Walk Delay */
- if ((t=libconfig->setting_get_member(conf, "AfterCastWalkDelay")))
- skill->config_set_level(t, tmp_db.walkdelay);
-
- /* Skill Data/Duration */
- if ((t=libconfig->setting_get_member(conf, "SkillData1")))
- skill->config_set_level(t, tmp_db.upkeep_time);
-
- /* Skill Data/Duration 2 */
- if ((t=libconfig->setting_get_member(conf, "SkillData2")))
- skill->config_set_level(t, tmp_db.upkeep_time2);
-
- /* Skill Cool Down */
- if ((t=libconfig->setting_get_member(conf, "CoolDown")))
- skill->config_set_level(t, tmp_db.cooldown);
-
-#ifdef RENEWAL_CAST
- /* Fixed Casting Time */
- if ((t=libconfig->setting_get_member(conf, "FixedCastTime")))
- skill->config_set_level(t, tmp_db.fixed_cast);
-#endif
- /* Cast Time Options */
+ skill->validate_splash_range(conf, &tmp_db);
+ skill->validate_number_of_hits(conf, &tmp_db);
+ skill->validate_interrupt_cast(conf, &tmp_db);
+ skill->validate_cast_def_rate(conf, &tmp_db);
+ skill->validate_number_of_instances(conf, &tmp_db);
+ skill->validate_knock_back_tiles(conf, &tmp_db);
+ skill->validate_cast_time(conf, &tmp_db);
+ skill->validate_act_delay(conf, &tmp_db);
+ skill->validate_walk_delay(conf, &tmp_db);
+ skill->validate_skill_data1(conf, &tmp_db);
+ skill->validate_skill_data2(conf, &tmp_db);
+ skill->validate_cooldown(conf, &tmp_db);
+ skill->validate_fixed_cast_time(conf, &tmp_db);
skill->validate_castnodex(conf, &tmp_db, false);
skill->validate_castnodex(conf, &tmp_db, true);
+ skill->validate_requirements(conf, &tmp_db);
+ skill->validate_unit(conf, &tmp_db);
- /**
- * Skill Requirements data handling
- */
- if ((t=libconfig->setting_get_member(conf, "Requirements")) && config_setting_is_group(t)) {
-
- /* HP Costs */
- if ((tt = libconfig->setting_get_member(t, "HPCost")))
- skill->config_set_level(tt, tmp_db.hp);
-
- /* Max HP Trigger */
- if ((tt = libconfig->setting_get_member(t, "MaxHPTrigger")))
- skill->config_set_level(tt, tmp_db.mhp);
-
- /* SP Cost */
- if ((tt = libconfig->setting_get_member(t, "SPCost")))
- skill->config_set_level(tt, tmp_db.sp);
-
- /* HP Rate */
- if ((tt = libconfig->setting_get_member(t, "HPRateCost")))
- skill->config_set_level(tt, tmp_db.hp_rate);
-
- /* SP Rate */
- if ((tt = libconfig->setting_get_member(t, "SPRateCost")))
- skill->config_set_level(tt, tmp_db.sp_rate);
-
- /* Zeny Cost */
- if ((tt = libconfig->setting_get_member(t, "ZenyCost")))
- skill->config_set_level(tt, tmp_db.zeny);
-
- /* Spirit Sphere Cost */
- if ((tt = libconfig->setting_get_member(t, "SpiritSphereCost")))
- skill->config_set_level(tt, tmp_db.spiritball);
-
- /* Weapon Types */
- skill->validate_weapontype(t, &tmp_db);
-
- /* Ammunition Types */
- skill->validate_ammotype(t, &tmp_db);
-
- /* Ammunition Amount */
- if ((tt = libconfig->setting_get_member(t, "AmmoAmount")))
- skill->config_set_level(tt, tmp_db.ammo_qty);
-
- /* State */
- skill->validate_state(t, &tmp_db);
-
- /* Spirit Sphere Cost */
- if ((tt = libconfig->setting_get_member(t, "SpiritSphereCost")))
- skill->config_set_level(tt, tmp_db.spiritball);
-
- /* Item Requirements and Amounts */
- skill->validate_item_requirements(t, &tmp_db);
- }
-
- /**
- * Skill Unit data handling
- */
- if ((t=libconfig->setting_get_member(conf, "Unit")) && config_setting_is_group(t)) {
-
- /* Unit IDs [1,2] */
- if ((tt=libconfig->setting_get_member(t, "Id")) && config_setting_is_array(tt)) {
- tmp_db.unit_id[0] = libconfig->setting_get_int_elem(tt, 0);
- tmp_db.unit_id[1] = libconfig->setting_get_int_elem(tt, 1);
- } else {
- libconfig->setting_lookup_int(t, "Id", &tmp_db.unit_id[0]);
- }
-
- /* Layout */
- if((tt=libconfig->setting_get_member(t, "Layout")))
- skill->config_set_level(tt, tmp_db.unit_layout_type);
-
- /* Range */
- if((tt=libconfig->setting_get_member(t, "Range")))
- skill->config_set_level(tt, tmp_db.unit_range);
-
- /* Interval */
- if(libconfig->setting_lookup_int(t, "Interval", &temp))
- tmp_db.unit_interval = temp;
-
- /* Flag */
- skill->validate_unit_flag(t, &tmp_db);
-
- /* Target */
- skill->validate_unit_target(t, &tmp_db);
- }
-
- /* Additional Fields for Plugins */
+ /** Validate additional fields for plugins. **/
skill->validate_additional_fields(conf, &tmp_db);
- // Validate the skill entry, add it to the duplicate array and increment count on success.
- if ((duplicate[idx] = skill->validate_skilldb(&tmp_db, filepath)))
- count++;
+ /** Add the skill. **/
+ skill->dbs->db[skill->get_index(tmp_db.nameid)] = tmp_db;
+ strdb_iput(skill->name2id_db, tmp_db.name, tmp_db.nameid);
+ script->set_constant2(tmp_db.name, tmp_db.nameid, false, false);
+ count++;
}
libconfig->destroy(&skilldb);
-
ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filepath);
-
return true;
}
-#undef skilldb_duplicate_warning
-#undef skilldb_invalid_error
-
/*===============================
* DB reading.
* produce_db.txt
@@ -21562,13 +23999,19 @@ void skill_defaults(void)
skill->get_splash = skill_get_splash;
skill->get_hp = skill_get_hp;
skill->get_mhp = skill_get_mhp;
+ skill->get_msp = skill_get_msp;
skill->get_sp = skill_get_sp;
skill->get_hp_rate = skill_get_hp_rate;
skill->get_sp_rate = skill_get_sp_rate;
skill->get_state = skill_get_state;
skill->get_spiritball = skill_get_spiritball;
+ skill->get_item_index = skill_get_item_index;
skill->get_itemid = skill_get_itemid;
skill->get_itemqty = skill_get_itemqty;
+ skill->get_item_any_flag = skill_get_item_any_flag;
+ skill->get_equip_id = skill_get_equip_id;
+ skill->get_equip_amount = skill_get_equip_amount;
+ skill->get_equip_any_flag = skill_get_equip_any_flag;
skill->get_zeny = skill_get_zeny;
skill->get_num = skill_get_num;
skill->get_cast = skill_get_cast;
@@ -21627,9 +24070,12 @@ void skill_defaults(void)
skill->cast_fix_sc = skill_castfix_sc;
skill->vf_cast_fix = skill_vfcastfix;
skill->delay_fix = skill_delay_fix;
- skill->is_item_skill = skill_is_item_skill;
+ skill->check_condition_required_equip = skill_check_condition_required_equip;
skill->check_condition_castbegin = skill_check_condition_castbegin;
+ skill->check_condition_required_items = skill_check_condition_required_items;
+ skill->items_required = skill_items_required;
skill->check_condition_castend = skill_check_condition_castend;
+ skill->get_any_item_index = skill_get_any_item_index;
skill->consume_requirement = skill_consume_requirement;
skill->get_requirement = skill_get_requirement;
skill->check_pc_partner = skill_check_pc_partner;
@@ -21653,6 +24099,7 @@ void skill_defaults(void)
skill->not_ok_hom = skillnotok_hom;
skill->not_ok_hom_unknown = skillnotok_hom_unknown;
skill->not_ok_mercenary = skillnotok_mercenary;
+ skill->validate_autocast_data = skill_validate_autocast_data;
skill->chastle_mob_changetarget = skill_chastle_mob_changetarget;
skill->can_produce_mix = skill_can_produce_mix;
skill->produce_mix = skill_produce_mix;
@@ -21713,24 +24160,68 @@ void skill_defaults(void)
skill->init_unit_layout = skill_init_unit_layout;
skill->init_unit_layout_unknown = skill_init_unit_layout_unknown;
/* Skill DB Libconfig */
+ skill->validate_id = skill_validate_id;
+ skill->name_contains_invalid_character = skill_name_contains_invalid_character;
+ skill->validate_name = skill_validate_name;
+ skill->validate_max_level = skill_validate_max_level;
+ skill->validate_description = skill_validate_description;
+ skill->validate_range = skill_validate_range;
skill->validate_hittype = skill_validate_hittype;
- skill->validate_attacktype = skill_validate_attacktype;
- skill->validate_element = skill_validate_element;
skill->validate_skilltype = skill_validate_skilltype;
skill->validate_skillinfo = skill_validate_skillinfo;
+ skill->validate_attacktype = skill_validate_attacktype;
+ skill->validate_element = skill_validate_element;
skill->validate_damagetype = skill_validate_damagetype;
+ skill->validate_splash_range = skill_validate_splash_range;
+ skill->validate_number_of_hits = skill_validate_number_of_hits;
+ skill->validate_interrupt_cast = skill_validate_interrupt_cast;
+ skill->validate_cast_def_rate = skill_validate_cast_def_rate;
+ skill->validate_number_of_instances = skill_validate_number_of_instances;
+ skill->validate_knock_back_tiles = skill_validate_knock_back_tiles;
+ skill->validate_cast_time = skill_validate_cast_time;
+ skill->validate_act_delay = skill_validate_act_delay;
+ skill->validate_walk_delay = skill_validate_walk_delay;
+ skill->validate_skill_data1 = skill_validate_skill_data1;
+ skill->validate_skill_data2 = skill_validate_skill_data2;
+ skill->validate_cooldown = skill_validate_cooldown;
+ skill->validate_fixed_cast_time = skill_validate_fixed_cast_time;
skill->validate_castnodex = skill_validate_castnodex;
+ skill->validate_hp_cost = skill_validate_hp_cost;
+ skill->validate_sp_cost = skill_validate_sp_cost;
+ skill->validate_hp_rate_cost = skill_validate_hp_rate_cost;
+ skill->validate_sp_rate_cost = skill_validate_sp_rate_cost;
+ skill->validate_max_hp_trigger = skill_validate_max_hp_trigger;
+ skill->validate_max_sp_trigger = skill_validate_max_sp_trigger;
+ skill->validate_zeny_cost = skill_validate_zeny_cost;
+ skill->validate_weapontype_sub = skill_validate_weapontype_sub;
skill->validate_weapontype = skill_validate_weapontype;
+ skill->validate_ammotype_sub = skill_validate_ammotype_sub;
skill->validate_ammotype = skill_validate_ammotype;
+ skill->validate_ammo_amount = skill_validate_ammo_amount;
+ skill->validate_state_sub = skill_validate_state_sub;
skill->validate_state = skill_validate_state;
+ skill->validate_spirit_sphere_cost = skill_validate_spirit_sphere_cost;
+ skill->validate_item_requirements_sub_item_amount = skill_validate_item_requirements_sub_item_amount;
+ skill->validate_item_requirements_sub_items = skill_validate_item_requirements_sub_items;
+ skill->validate_item_requirements_sub_any_flag = skill_validate_item_requirements_sub_any_flag;
skill->validate_item_requirements = skill_validate_item_requirements;
- skill->validate_unit_target = skill_validate_unit_target;
+ skill->validate_equip_requirements_sub_item_amount = skill_validate_equip_requirements_sub_item_amount;
+ skill->validate_equip_requirements_sub_items = skill_validate_equip_requirements_sub_items;
+ skill->validate_equip_requirements_sub_any_flag = skill_validate_equip_requirements_sub_any_flag;
+ skill->validate_equip_requirements = skill_validate_equip_requirements;
+ skill->validate_requirements_item_name = skill_validate_requirements_item_name;
+ skill->validate_requirements = skill_validate_requirements;
+ skill->validate_unit_id_sub = skill_validate_unit_id_sub;
+ skill->validate_unit_id = skill_validate_unit_id;
+ skill->validate_unit_layout = skill_validate_unit_layout;
+ skill->validate_unit_range = skill_validate_unit_range;
+ skill->validate_unit_interval = skill_validate_unit_interval;
+ skill->validate_unit_flag_sub = skill_validate_unit_flag_sub;
skill->validate_unit_flag = skill_validate_unit_flag;
+ skill->validate_unit_target_sub = skill_validate_unit_target_sub;
+ skill->validate_unit_target = skill_validate_unit_target;
+ skill->validate_unit = skill_validate_unit;
skill->validate_additional_fields = skill_validate_additional_fields;
- skill->validate_skilldb = skill_validate_skilldb;
- skill->validate_weapontype_sub = skill_validate_weapontype_sub;
- skill->validate_ammotype_sub = skill_validate_ammotype_sub;
- skill->validate_unit_flag_sub = skill_validate_unit_flag_sub;
skill->read_skilldb = skill_read_skilldb;
skill->config_set_level = skill_config_set_level;
skill->level_set_value = skill_level_set_value;
@@ -21793,4 +24284,5 @@ void skill_defaults(void)
skill->splash_target = skill_splash_target;
skill->check_npc_chaospanic = skill_check_npc_chaospanic;
skill->count_wos = skill_count_wos;
+ skill->get_linked_song_dance_id = skill_get_linked_song_dance_id;
}
diff --git a/src/map/skill.h b/src/map/skill.h
index eff9ed7fc..fdeaefe01 100644
--- a/src/map/skill.h
+++ b/src/map/skill.h
@@ -23,6 +23,7 @@
#include "map/map.h" // struct block_list
#include "map/status.h" // enum sc_type
+#include "map/unitdefines.h" // enum unit_dir
#include "common/hercules.h"
#include "common/db.h"
#include "common/mmo.h" // MAX_SKILL_DB, struct square
@@ -49,7 +50,7 @@ struct status_change_entry;
#define MAX_ARROW_RESOURCE 5
#define MAX_SKILL_ABRA_DB 210
#define MAX_SKILL_IMPROVISE_DB 30
-#define MAX_SKILL_LEVEL 10
+#define MAX_SKILL_LEVEL 20
#define MAX_SKILL_UNIT_LAYOUT 45
#define MAX_SQUARE_LAYOUT 5 // 11*11 Placement of a maximum unit
#define MAX_SKILL_UNIT_COUNT ((MAX_SQUARE_LAYOUT*2+1)*(MAX_SQUARE_LAYOUT*2+1))
@@ -59,6 +60,10 @@ struct status_change_entry;
#define MAX_SKILLUNITGROUPTICKSET 25
#define MAX_SKILL_NAME_LENGTH 32
+#ifndef MAX_SKILL_DESC_LENGTH
+ #define MAX_SKILL_DESC_LENGTH 50
+#endif
+
// Custom Skill Ranges is used in skill_get_index, to allocate indexes based on ID and gaps between 2 SkillID
#ifndef CUSTOM_SKILL_RANGES
#define CUSTOM_SKILL_RANGES
@@ -1723,41 +1728,83 @@ enum {
UNT_MAX = 0x190
};
+/** Constants to identify the auto-cast type. **/
+enum autocast_type {
+ AUTOCAST_NONE = 0,
+ AUTOCAST_TEMP, // Used when type is only required during the execution of the calling instance. (For example bAutoSpell* skills.)
+ AUTOCAST_ABRA, // Used for Abracadabra (Hocus pocus).
+ AUTOCAST_IMPROVISE, // Used for Improvised Song.
+ AUTOCAST_ITEM, // Used for itemskill() script command.
+};
+
+/** Constants for allowed skill use while interacting with NPC. **/
+enum skill_enabled_npc_flags {
+ SKILLENABLEDNPC_NONE = 0, //!< Don't allow using any skills while interacting with NPC.
+ SKILLENABLEDNPC_SELF = 1, //!< Allow using non-damaging self skills while interacting with NPC.
+ SKILLENABLEDNPC_ALL = 2, //!< Allow using all skills while interacting with NPC.
+};
+
/**
* Structures
**/
+/** A container holding all required items. **/
+struct skill_required_item_data {
+ struct {
+ int id;
+ int amount[MAX_SKILL_LEVEL];
+ } item[MAX_SKILL_ITEM_REQUIRE];
+ bool any[MAX_SKILL_LEVEL];
+};
+
struct skill_condition {
int weapon,ammo,ammo_qty,hp,sp,zeny,spiritball,mhp,state;
+ int msp;
int itemid[MAX_SKILL_ITEM_REQUIRE],amount[MAX_SKILL_ITEM_REQUIRE];
+ int equip_id[MAX_SKILL_ITEM_REQUIRE];
+ int equip_amount[MAX_SKILL_ITEM_REQUIRE];
};
// Database skills
struct s_skill_db {
int nameid;
- char name[MAX_SKILL_NAME_LENGTH];
- char desc[40];
- int range[MAX_SKILL_LEVEL],hit,inf,element[MAX_SKILL_LEVEL],nk,splash[MAX_SKILL_LEVEL],max;
+ char name[MAX_SKILL_NAME_LENGTH + 1];
+ char desc[MAX_SKILL_DESC_LENGTH + 1];
+ int range[MAX_SKILL_LEVEL];
+ int hit[MAX_SKILL_LEVEL];
+ int inf;
+ int element[MAX_SKILL_LEVEL];
+ int nk;
+ int splash[MAX_SKILL_LEVEL];
+ int max;
int num[MAX_SKILL_LEVEL];
int cast[MAX_SKILL_LEVEL],walkdelay[MAX_SKILL_LEVEL],delay[MAX_SKILL_LEVEL];
#ifdef RENEWAL_CAST
int fixed_cast[MAX_SKILL_LEVEL];
#endif
int upkeep_time[MAX_SKILL_LEVEL],upkeep_time2[MAX_SKILL_LEVEL],cooldown[MAX_SKILL_LEVEL];
- int castcancel,cast_def_rate;
- int inf2,maxcount[MAX_SKILL_LEVEL],skill_type;
+ int castcancel[MAX_SKILL_LEVEL];
+ int cast_def_rate[MAX_SKILL_LEVEL];
+ int inf2;
+ int maxcount[MAX_SKILL_LEVEL];
+ int skill_type[MAX_SKILL_LEVEL];
int blewcount[MAX_SKILL_LEVEL];
int hp[MAX_SKILL_LEVEL],sp[MAX_SKILL_LEVEL],mhp[MAX_SKILL_LEVEL],hp_rate[MAX_SKILL_LEVEL],sp_rate[MAX_SKILL_LEVEL],zeny[MAX_SKILL_LEVEL];
- int weapon,ammo,ammo_qty[MAX_SKILL_LEVEL],state,spiritball[MAX_SKILL_LEVEL];
- int itemid[MAX_SKILL_ITEM_REQUIRE],amount[MAX_SKILL_ITEM_REQUIRE];
+ int msp[MAX_SKILL_LEVEL];
+ int weapon;
+ int ammo;
+ int ammo_qty[MAX_SKILL_LEVEL];
+ int state[MAX_SKILL_LEVEL];
+ int spiritball[MAX_SKILL_LEVEL];
int castnodex[MAX_SKILL_LEVEL], delaynodex[MAX_SKILL_LEVEL];
- int nocast;
- int unit_id[2];
+ int unit_id[MAX_SKILL_LEVEL][2];
int unit_layout_type[MAX_SKILL_LEVEL];
int unit_range[MAX_SKILL_LEVEL];
- int unit_interval;
- int unit_target;
+ int unit_interval[MAX_SKILL_LEVEL];
+ int unit_target[MAX_SKILL_LEVEL];
int unit_flag;
+ struct skill_required_item_data req_items;
+ struct skill_required_item_data req_equip;
};
struct s_skill_unit_layout {
@@ -1943,8 +1990,8 @@ struct skill_interface {
int unit_group_newid;
/* accesssors */
int (*get_index) (int skill_id);
- int (*get_type) (int skill_id);
- int (*get_hit) (int skill_id);
+ int (*get_type) (int skill_id, int skill_lv);
+ int (*get_hit) (int skill_id, int skill_lv);
int (*get_inf) (int skill_id);
int (*get_ele) (int skill_id, int skill_lv);
int (*get_nk) (int skill_id);
@@ -1954,13 +2001,19 @@ struct skill_interface {
int (*get_splash) (int skill_id, int skill_lv);
int (*get_hp) (int skill_id, int skill_lv);
int (*get_mhp) (int skill_id, int skill_lv);
+ int (*get_msp) (int skill_id, int skill_lv);
int (*get_sp) (int skill_id, int skill_lv);
int (*get_hp_rate) (int skill_id, int skill_lv);
int (*get_sp_rate) (int skill_id, int skill_lv);
- int (*get_state) (int skill_id);
+ int (*get_state) (int skill_id, int skill_lv);
int (*get_spiritball) (int skill_id, int skill_lv);
+ int (*get_item_index) (int skill_id, int skill_lv);
int (*get_itemid) (int skill_id, int item_idx);
- int (*get_itemqty) (int skill_id, int item_idx);
+ int (*get_itemqty) (int skill_id, int item_idx, int skill_lv);
+ bool (*get_item_any_flag) (int skill_id, int skill_lv);
+ int (*get_equip_id) (int skill_id, int item_idx);
+ int (*get_equip_amount) (int skill_id, int item_idx, int skill_lv);
+ bool (*get_equip_any_flag) (int skill_id, int skill_lv);
int (*get_zeny) (int skill_id, int skill_lv);
int (*get_num) (int skill_id, int skill_lv);
int (*get_cast) (int skill_id, int skill_lv);
@@ -1970,19 +2023,19 @@ struct skill_interface {
int (*get_time2) (int skill_id, int skill_lv);
int (*get_castnodex) (int skill_id, int skill_lv);
int (*get_delaynodex) (int skill_id, int skill_lv);
- int (*get_castdef) (int skill_id);
+ int (*get_castdef) (int skill_id, int skill_lv);
int (*get_weapontype) (int skill_id);
int (*get_ammotype) (int skill_id);
int (*get_ammo_qty) (int skill_id, int skill_lv);
- int (*get_unit_id) (int skill_id, int flag);
+ int (*get_unit_id) (int skill_id, int skill_lv, int flag);
int (*get_inf2) (int skill_id);
- int (*get_castcancel) (int skill_id);
+ int (*get_castcancel) (int skill_id, int skill_lv);
int (*get_maxcount) (int skill_id, int skill_lv);
int (*get_blewcount) (int skill_id, int skill_lv);
int (*get_unit_flag) (int skill_id);
- int (*get_unit_target) (int skill_id);
- int (*get_unit_interval) (int skill_id);
- int (*get_unit_bl_target) (int skill_id);
+ int (*get_unit_target) (int skill_id, int skill_lv);
+ int (*get_unit_interval) (int skill_id, int skill_lv);
+ int (*get_unit_bl_target) (int skill_id, int skill_lv);
int (*get_unit_layout_type) (int skill_id, int skill_lv);
int (*get_unit_range) (int skill_id, int skill_lv);
int (*get_cooldown) (int skill_id, int skill_lv);
@@ -1994,7 +2047,7 @@ struct skill_interface {
int (*get_casttype2) (int index);
bool (*is_combo) (int skill_id);
int (*name2id) (const char* name);
- int (*isammotype) (struct map_session_data *sd, int skill_id);
+ int (*isammotype) (struct map_session_data *sd, int skill_id, int skill_lv);
int (*castend_id) (int tid, int64 tick, int id, intptr_t data);
int (*castend_pos) (int tid, int64 tick, int id, intptr_t data);
int (*castend_map) ( struct map_session_data *sd,uint16 skill_id, const char *mapname);
@@ -2002,7 +2055,7 @@ struct skill_interface {
int (*addtimerskill) (struct block_list *src, int64 tick, int target, int x, int y, uint16 skill_id, uint16 skill_lv, int type, int flag);
int (*additional_effect) (struct block_list* src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int attack_type, int dmg_lv, int64 tick);
int (*counter_additional_effect) (struct block_list* src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int attack_type, int64 tick);
- int (*blown) (struct block_list* src, struct block_list* target, int count, int8 dir, int flag);
+ int (*blown) (struct block_list* src, struct block_list* target, int count, enum unit_dir dir, int flag);
int (*break_equip) (struct block_list *bl, unsigned short where, int rate, int flag);
int (*strip_equip) (struct block_list *bl, unsigned short where, int rate, int lv, int time);
struct skill_unit_group* (*id2group) (int group_id);
@@ -2010,7 +2063,7 @@ struct skill_interface {
struct skill_unit *(*initunit) (struct skill_unit_group *group, int idx, int x, int y, int val1, int val2);
int (*delunit) (struct skill_unit *su);
struct skill_unit_group *(*init_unitgroup) (struct block_list* src, int count, uint16 skill_id, uint16 skill_lv, int unit_id, int limit, int interval);
- int (*del_unitgroup) (struct skill_unit_group *group, const char* file, int line, const char* func);
+ int (*del_unitgroup) (struct skill_unit_group *group);
int (*clear_unitgroup) (struct block_list *src);
int (*clear_group) (struct block_list *bl, int flag);
int (*unit_onplace) (struct skill_unit *src, struct block_list *bl, int64 tick);
@@ -2019,9 +2072,12 @@ struct skill_interface {
int (*cast_fix_sc) ( struct block_list *bl, int time);
int (*vf_cast_fix) ( struct block_list *bl, double time, uint16 skill_id, uint16 skill_lv);
int (*delay_fix) ( struct block_list *bl, uint16 skill_id, uint16 skill_lv);
- bool (*is_item_skill) (struct map_session_data *sd, int skill_id, int skill_lv);
+ int (*check_condition_required_equip) (struct map_session_data *sd, int skill_id, int skill_lv);
int (*check_condition_castbegin) (struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
+ int (*check_condition_required_items) (struct map_session_data *sd, int skill_id, int skill_lv);
+ bool (*items_required) (struct map_session_data *sd, int skill_id, int skill_lv);
int (*check_condition_castend) (struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
+ int (*get_any_item_index) (struct map_session_data *sd, int skill_id, int skill_lv);
int (*consume_requirement) (struct map_session_data *sd, uint16 skill_id, uint16 skill_lv, short type);
struct skill_condition (*get_requirement) (struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
int (*check_pc_partner) (struct map_session_data *sd, uint16 skill_id, uint16* skill_lv, int range, int cast_flag);
@@ -2045,6 +2101,7 @@ struct skill_interface {
int (*not_ok_hom) (uint16 skill_id, struct homun_data *hd);
int (*not_ok_hom_unknown) (uint16 skill_id, struct homun_data *hd);
int (*not_ok_mercenary) (uint16 skill_id, struct mercenary_data *md);
+ void (*validate_autocast_data) (struct map_session_data *sd, int skill_id, int skill_lv);
int (*chastle_mob_changetarget) (struct block_list *bl,va_list ap);
int (*can_produce_mix) ( struct map_session_data *sd, int nameid, int trigger, int qty);
int (*produce_mix) ( struct map_session_data *sd, uint16 skill_id, int nameid, int slot1, int slot2, int slot3, int qty );
@@ -2064,7 +2121,7 @@ struct skill_interface {
int (*check_unit_range_sub) (struct block_list *bl, va_list ap);
int (*check_unit_range2) (struct block_list *bl, int x, int y, uint16 skill_id, uint16 skill_lv);
int (*check_unit_range2_sub) (struct block_list *bl, va_list ap);
- void (*toggle_magicpower) (struct block_list *bl, uint16 skill_id);
+ void (*toggle_magicpower) (struct block_list *bl, uint16 skill_id, int skill_lv);
int (*magic_reflect) (struct block_list* src, struct block_list* bl, int type);
int (*onskillusage) (struct map_session_data *sd, struct block_list *bl, uint16 skill_id, int64 tick);
int (*cell_overlap) (struct block_list *bl, va_list ap);
@@ -2085,8 +2142,8 @@ struct skill_interface {
bool (*dance_switch) (struct skill_unit* su, int flag);
int (*check_condition_char_sub) (struct block_list *bl, va_list ap);
int (*check_condition_mob_master_sub) (struct block_list *bl, va_list ap);
- void (*brandishspear_first) (struct square *tc, uint8 dir, int16 x, int16 y);
- void (*brandishspear_dir) (struct square* tc, uint8 dir, int are);
+ void (*brandishspear_first) (struct square *tc, enum unit_dir dir, int16 x, int16 y);
+ void (*brandishspear_dir) (struct square* tc, enum unit_dir dir, int are);
int (*get_fixed_cast) (int skill_id, int skill_lv);
int (*sit_count) (struct block_list *bl, va_list ap);
int (*sit_in) (struct block_list *bl, va_list ap);
@@ -2105,24 +2162,68 @@ struct skill_interface {
int (*unit_timer_sub) (union DBKey key, struct DBData *data, va_list ap);
void (*init_unit_layout) (void);
void (*init_unit_layout_unknown) (int skill_idx, int pos);
+ void (*validate_id) (struct config_setting_t *conf, struct s_skill_db *sk, int conf_index);
+ bool (*name_contains_invalid_character) (const char *name);
+ void (*validate_name) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_max_level) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_description) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_range) (struct config_setting_t *conf, struct s_skill_db *sk);
void (*validate_hittype) (struct config_setting_t *conf, struct s_skill_db *sk);
void (*validate_skilltype) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_skillinfo) (struct config_setting_t *conf, struct s_skill_db *sk);
void (*validate_attacktype) (struct config_setting_t *conf, struct s_skill_db *sk);
void (*validate_element) (struct config_setting_t *conf, struct s_skill_db *sk);
- void (*validate_skillinfo) (struct config_setting_t *conf, struct s_skill_db *sk);
void (*validate_damagetype) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_splash_range) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_number_of_hits) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_interrupt_cast) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_cast_def_rate) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_number_of_instances) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_knock_back_tiles) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_cast_time) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_act_delay) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_walk_delay) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_skill_data1) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_skill_data2) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_cooldown) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_fixed_cast_time) (struct config_setting_t *conf, struct s_skill_db *sk);
void (*validate_castnodex) (struct config_setting_t *conf, struct s_skill_db *sk, bool delay);
+ void (*validate_hp_cost) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_sp_cost) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_hp_rate_cost) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_sp_rate_cost) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_max_hp_trigger) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_max_sp_trigger) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_zeny_cost) (struct config_setting_t *conf, struct s_skill_db *sk);
+ int (*validate_weapontype_sub) (const char *type, bool on, struct s_skill_db *sk);
void (*validate_weapontype) (struct config_setting_t *conf, struct s_skill_db *sk);
+ int (*validate_ammotype_sub) (const char *type, bool on, struct s_skill_db *sk);
void (*validate_ammotype) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_ammo_amount) (struct config_setting_t *conf, struct s_skill_db *sk);
+ int (*validate_state_sub) (const char *state);
void (*validate_state) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_spirit_sphere_cost) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_item_requirements_sub_item_amount) (struct config_setting_t *conf, struct s_skill_db *sk, int item_index);
+ void (*validate_item_requirements_sub_items) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_item_requirements_sub_any_flag) (struct config_setting_t *conf, struct s_skill_db *sk);
void (*validate_item_requirements) (struct config_setting_t *conf, struct s_skill_db *sk);
- void (*validate_unit_target) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_equip_requirements_sub_item_amount) (struct config_setting_t *conf, struct s_skill_db *sk, int item_index);
+ void (*validate_equip_requirements_sub_items) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_equip_requirements_sub_any_flag) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_equip_requirements) (struct config_setting_t *conf, struct s_skill_db *sk);
+ int (*validate_requirements_item_name) (const char *name);
+ void (*validate_requirements) (struct config_setting_t *conf, struct s_skill_db *sk);
+ int (*validate_unit_id_sub) (int unit_id);
+ void (*validate_unit_id) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_unit_layout) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_unit_range) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_unit_interval) (struct config_setting_t *conf, struct s_skill_db *sk);
+ int (*validate_unit_flag_sub) (const char *type, bool on, struct s_skill_db *sk);
void (*validate_unit_flag) (struct config_setting_t *conf, struct s_skill_db *sk);
+ int (*validate_unit_target_sub) (const char *target);
+ void (*validate_unit_target) (struct config_setting_t *conf, struct s_skill_db *sk);
+ void (*validate_unit) (struct config_setting_t *conf, struct s_skill_db *sk);
void (*validate_additional_fields) (struct config_setting_t *conf, struct s_skill_db *sk);
- bool (*validate_skilldb) (struct s_skill_db *skt, const char *source);
- int (*validate_weapontype_sub) (const char *type, bool on, struct s_skill_db *sk);
- int (*validate_ammotype_sub) (const char *type, bool on, struct s_skill_db *sk);
- int (*validate_unit_flag_sub) (const char *type, bool on, struct s_skill_db *sk);
bool (*read_skilldb) (const char *filename);
void (*config_set_level) (struct config_setting_t *conf, int *arr);
void (*level_set_value) (int *arr, int value);
@@ -2163,7 +2264,7 @@ struct skill_interface {
void (*attack_display_unknown) (int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage);
int (*attack_copy_unknown) (int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag);
int (*attack_dir_unknown) (int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag);
- void (*attack_blow_unknown) (int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, int8 *dir);
+ void (*attack_blow_unknown) (int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, enum unit_dir *dir);
void (*attack_post_unknown) (int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag);
bool (*timerskill_dead_unknown) (struct block_list *src, struct unit_data *ud, struct skill_timerskill *skl);
void (*timerskill_target_unknown) (int tid, int64 tick, struct block_list *src, struct block_list *target, struct unit_data *ud, struct skill_timerskill *skl);
@@ -2190,6 +2291,7 @@ struct skill_interface {
int (*splash_target) (struct block_list* bl);
int (*check_npc_chaospanic) (struct block_list *bl, va_list args);
int (*count_wos) (struct block_list *bl, va_list ap);
+ int (*get_linked_song_dance_id) (int skill_id);
};
#ifdef HERCULES_CORE
diff --git a/src/map/status.c b/src/map/status.c
index 1f0f31119..589acff5c 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -696,6 +696,7 @@ static void initChangeTables(void)
status->set_sc( WM_BEYOND_OF_WARCRY , SC_BEYOND_OF_WARCRY , SCB_STR|SCB_CRI|SCB_MAXHP );
status->set_sc( WM_UNLIMITED_HUMMING_VOICE, SC_UNLIMITED_HUMMING_VOICE, SCB_NONE );
status->set_sc( WM_FRIGG_SONG , SC_FRIGG_SONG , SCB_MAXHP );
+ status->set_sc( WM_SEVERE_RAINSTORM , SC_NO_SWITCH_EQUIP , SCB_NONE );
/**
* Sorcerer
@@ -801,21 +802,21 @@ static void initChangeTables(void)
set_sc_with_vfx( GN_ILLUSIONDOPING , SC_ILLUSIONDOPING , SCB_HIT );
// Storing the target job rather than simply SC_SOULLINK simplifies code later on.
- status->dbs->Skill2SCTable[SL_ALCHEMIST] = (sc_type)MAPID_ALCHEMIST,
- status->dbs->Skill2SCTable[SL_MONK] = (sc_type)MAPID_MONK,
- status->dbs->Skill2SCTable[SL_STAR] = (sc_type)MAPID_STAR_GLADIATOR,
- status->dbs->Skill2SCTable[SL_SAGE] = (sc_type)MAPID_SAGE,
- status->dbs->Skill2SCTable[SL_CRUSADER] = (sc_type)MAPID_CRUSADER,
- status->dbs->Skill2SCTable[SL_SUPERNOVICE] = (sc_type)MAPID_SUPER_NOVICE,
- status->dbs->Skill2SCTable[SL_KNIGHT] = (sc_type)MAPID_KNIGHT,
- status->dbs->Skill2SCTable[SL_WIZARD] = (sc_type)MAPID_WIZARD,
- status->dbs->Skill2SCTable[SL_PRIEST] = (sc_type)MAPID_PRIEST,
- status->dbs->Skill2SCTable[SL_BARDDANCER] = (sc_type)MAPID_BARDDANCER,
- status->dbs->Skill2SCTable[SL_ROGUE] = (sc_type)MAPID_ROGUE,
- status->dbs->Skill2SCTable[SL_ASSASIN] = (sc_type)MAPID_ASSASSIN,
- status->dbs->Skill2SCTable[SL_BLACKSMITH] = (sc_type)MAPID_BLACKSMITH,
- status->dbs->Skill2SCTable[SL_HUNTER] = (sc_type)MAPID_HUNTER,
- status->dbs->Skill2SCTable[SL_SOULLINKER] = (sc_type)MAPID_SOUL_LINKER,
+ status->dbs->Skill2SCTable[skill->get_index(SL_ALCHEMIST)] = (sc_type)MAPID_ALCHEMIST,
+ status->dbs->Skill2SCTable[skill->get_index(SL_MONK)] = (sc_type)MAPID_MONK,
+ status->dbs->Skill2SCTable[skill->get_index(SL_STAR)] = (sc_type)MAPID_STAR_GLADIATOR,
+ status->dbs->Skill2SCTable[skill->get_index(SL_SAGE)] = (sc_type)MAPID_SAGE,
+ status->dbs->Skill2SCTable[skill->get_index(SL_CRUSADER)] = (sc_type)MAPID_CRUSADER,
+ status->dbs->Skill2SCTable[skill->get_index(SL_SUPERNOVICE)] = (sc_type)MAPID_SUPER_NOVICE,
+ status->dbs->Skill2SCTable[skill->get_index(SL_KNIGHT)] = (sc_type)MAPID_KNIGHT,
+ status->dbs->Skill2SCTable[skill->get_index(SL_WIZARD)] = (sc_type)MAPID_WIZARD,
+ status->dbs->Skill2SCTable[skill->get_index(SL_PRIEST)] = (sc_type)MAPID_PRIEST,
+ status->dbs->Skill2SCTable[skill->get_index(SL_BARDDANCER)] = (sc_type)MAPID_BARDDANCER,
+ status->dbs->Skill2SCTable[skill->get_index(SL_ROGUE)] = (sc_type)MAPID_ROGUE,
+ status->dbs->Skill2SCTable[skill->get_index(SL_ASSASIN)] = (sc_type)MAPID_ASSASSIN,
+ status->dbs->Skill2SCTable[skill->get_index(SL_BLACKSMITH)] = (sc_type)MAPID_BLACKSMITH,
+ status->dbs->Skill2SCTable[skill->get_index(SL_HUNTER)] = (sc_type)MAPID_HUNTER,
+ status->dbs->Skill2SCTable[skill->get_index(SL_SOULLINKER)] = (sc_type)MAPID_SOUL_LINKER,
// Other SC which are not necessarily associated to skills.
status->dbs->ChangeFlagTable[SC_ATTHASTE_POTION1] |= SCB_ASPD;
@@ -865,6 +866,10 @@ static void initChangeTables(void)
status->dbs->ChangeFlagTable[SC_WEDDING] |= SCB_SPEED;
status->dbs->ChangeFlagTable[SC_ARMORPROPERTY] |= SCB_ALL;
status->dbs->ChangeFlagTable[SC_ARMOR_RESIST] |= SCB_ALL;
+ status->dbs->ChangeFlagTable[SC_RESIST_PROPERTY_WATER] |= SCB_ALL;
+ status->dbs->ChangeFlagTable[SC_RESIST_PROPERTY_GROUND] |= SCB_ALL;
+ status->dbs->ChangeFlagTable[SC_RESIST_PROPERTY_FIRE] |= SCB_ALL;
+ status->dbs->ChangeFlagTable[SC_RESIST_PROPERTY_WIND] |= SCB_ALL;
status->dbs->ChangeFlagTable[SC_ATKER_BLOOD] |= SCB_ALL;
status->dbs->ChangeFlagTable[SC_WALKSPEED] |= SCB_SPEED;
status->dbs->ChangeFlagTable[SC_TARGET_BLOOD] |= SCB_ALL;
@@ -884,6 +889,13 @@ static void initChangeTables(void)
status->dbs->ChangeFlagTable[SC_PHI_DEMON] |= SCB_ALL;
status->dbs->ChangeFlagTable[SC_MAGIC_CANDY] |= SCB_MATK | SCB_ALL;
status->dbs->ChangeFlagTable[SC_MYSTICPOWDER] |= SCB_FLEE | SCB_LUK;
+ status->dbs->ChangeFlagTable[SC_POPECOOKIE] |= SCB_BASE | SCB_BATK | SCB_MATK;
+ status->dbs->ChangeFlagTable[SC_VITALIZE_POTION] |= SCB_BATK | SCB_MATK;
+ status->dbs->ChangeFlagTable[SC_SKF_MATK] |= SCB_MATK;
+ status->dbs->ChangeFlagTable[SC_SKF_ATK] |= SCB_BATK;
+ status->dbs->ChangeFlagTable[SC_SKF_ASPD] |= SCB_ASPD;
+ status->dbs->ChangeFlagTable[SC_SKF_CAST] |= SCB_NONE;
+ status->dbs->ChangeFlagTable[SC_ALMIGHTY] |= SCB_BATK | SCB_MATK;
// Cash Items
status->dbs->ChangeFlagTable[SC_FOOD_STR_CASH] |= SCB_STR;
@@ -1189,7 +1201,7 @@ static int status_damage(struct block_list *src, struct block_list *target, int6
if ((sce=sc->data[SC_GRAVITATION]) && sce->val3 == BCT_SELF) {
struct skill_unit_group* sg = skill->id2group(sce->val4);
if (sg) {
- skill->del_unitgroup(sg, ALC_MARK);
+ skill->del_unitgroup(sg);
sce->val4 = 0;
status_change_end(target, SC_GRAVITATION, INVALID_TIMER);
}
@@ -1584,7 +1596,7 @@ static int status_check_skilluse(struct block_list *src, struct block_list *targ
}
if( skill_id ) {
- if (src != NULL && (sd == NULL || sd->skillitem == 0)) {
+ if (src != NULL && (sd == NULL || sd->auto_cast_current.type != AUTOCAST_ITEM)) {
// Items that cast skills using 'itemskill' will not be handled by map_zone_db.
int i;
@@ -1628,7 +1640,7 @@ static int status_check_skilluse(struct block_list *src, struct block_list *targ
if (src != NULL
&& map->getcell(src->m, src, src->x, src->y, CELL_CHKLANDPROTECTOR)
&& !(st->mode&MD_BOSS)
- && (src->type != BL_PC || sd->skillitem != skill_id))
+ && (src->type != BL_PC || sd->auto_cast_current.type != AUTOCAST_ITEM))
return 0;
break;
default:
@@ -1707,7 +1719,7 @@ static int status_check_skilluse(struct block_list *src, struct block_list *targ
return 0; //Can't amp out of Wand of Hermode :/ [Skotlex]
}
- if (skill_id != 0 /* Do not block item-casted skills.*/ && (src->type != BL_PC || sd->skillitem != skill_id)) {
+ if (skill_id != 0 /* Do not block item-casted skills.*/ && (src->type != BL_PC || sd->auto_cast_current.type != AUTOCAST_ITEM)) {
//Skills blocked through status changes...
if (!flag && ( //Blocked only from using the skill (stuff like autospell may still go through
sc->data[SC_SILENCE] ||
@@ -1725,6 +1737,7 @@ static int status_check_skilluse(struct block_list *src, struct block_list *targ
(sc->data[SC_MARIONETTE] && skill_id == CG_MARIONETTE) || //Cannot use marionette if you are being buffed by another
(sc->data[SC_STASIS] && skill->block_check(src, SC_STASIS, skill_id)) ||
(sc->data[SC_KG_KAGEHUMI] && skill->block_check(src, SC_KG_KAGEHUMI, skill_id))
+ || sc->data[SC_ALL_RIDING] != NULL // New mounts can't attack nor use skills in the client; this check makes it cheat-safe. [Ind]
))
return 0;
@@ -1773,8 +1786,6 @@ static int status_check_skilluse(struct block_list *src, struct block_list *targ
} else if ( skill_id != ST_CHASEWALK )
return 0;
}
- if( sc->data[SC_ALL_RIDING] )
- return 0;//New mounts can't attack nor use skills in the client; this check makes it cheat-safe [Ind]
}
if (target == NULL || target == src) //No further checking needed.
@@ -2572,12 +2583,16 @@ static int status_calc_pc_(struct map_session_data *sd, enum e_status_calc_opt o
status->calc_pc_additional(sd, opt);
- if( sd->pd ) { // Pet Bonus
+ if (sd->pd != NULL) { // Pet bonus.
struct pet_data *pd = sd->pd;
- if( pd && pd->petDB && pd->petDB->equip_script && pd->pet.intimate >= battle_config.pet_equip_min_friendly )
- script->run(pd->petDB->equip_script,0,sd->bl.id,0);
- if( pd && pd->pet.intimate > 0 && (!battle_config.pet_equip_required || pd->pet.equip > 0) && pd->state.skillbonus == 1 && pd->bonus )
- pc->bonus(sd,pd->bonus->type, pd->bonus->val);
+
+ if (pd->petDB != NULL && pd->petDB->equip_script != NULL)
+ script->run(pd->petDB->equip_script, 0, sd->bl.id, 0);
+
+ if (pd->pet.intimate > PET_INTIMACY_NONE && pd->state.skillbonus == 1 && pd->bonus != NULL
+ && (battle_config.pet_equip_required == 0 || pd->pet.equip > 0)) {
+ pc->bonus(sd, pd->bonus->type, pd->bonus->val);
+ }
}
//param_bonus now holds card bonuses.
@@ -3018,6 +3033,22 @@ static int status_calc_pc_(struct map_session_data *sd, enum e_status_calc_opt o
sd->subele[ELE_FIRE] += sc->data[SC_ARMOR_RESIST]->val3;
sd->subele[ELE_WIND] += sc->data[SC_ARMOR_RESIST]->val4;
}
+ if (sc->data[SC_RESIST_PROPERTY_WATER] != NULL) { // Coldproof Potion
+ sd->subele[ELE_WATER] += sc->data[SC_RESIST_PROPERTY_WATER]->val1;
+ sd->subele[ELE_WIND] += sc->data[SC_RESIST_PROPERTY_WATER]->val2;
+ }
+ if (sc->data[SC_RESIST_PROPERTY_GROUND] != NULL) { // Earthproof Potion
+ sd->subele[ELE_EARTH] += sc->data[SC_RESIST_PROPERTY_GROUND]->val1;
+ sd->subele[ELE_FIRE] += sc->data[SC_RESIST_PROPERTY_GROUND]->val2;
+ }
+ if (sc->data[SC_RESIST_PROPERTY_FIRE] != NULL) { // Fireproof Potion
+ sd->subele[ELE_FIRE] += sc->data[SC_RESIST_PROPERTY_FIRE]->val1;
+ sd->subele[ELE_WATER] += sc->data[SC_RESIST_PROPERTY_FIRE]->val2;
+ }
+ if (sc->data[SC_RESIST_PROPERTY_WIND] != NULL) { // Thunderproof Potion
+ sd->subele[ELE_WIND] += sc->data[SC_RESIST_PROPERTY_WIND]->val1;
+ sd->subele[ELE_EARTH] += sc->data[SC_RESIST_PROPERTY_WIND]->val2;
+ }
if (sc->data[SC_FIRE_CLOAK_OPTION]) {
i = sc->data[SC_FIRE_CLOAK_OPTION]->val2;
sd->subele[ELE_FIRE] += i;
@@ -3038,6 +3069,18 @@ static int status_calc_pc_(struct map_session_data *sd, enum e_status_calc_opt o
sd->subele[ELE_EARTH] += i;
sd->subele[ELE_FIRE] -= i;
}
+ if (sc->data[SC_POPECOOKIE] != NULL) {
+ i = sc->data[SC_POPECOOKIE]->val3;
+ sd->subele[ELE_WATER] += i;
+ sd->subele[ELE_EARTH] += i;
+ sd->subele[ELE_FIRE] += i;
+ sd->subele[ELE_WIND] += i;
+ sd->subele[ELE_POISON] += i;
+ sd->subele[ELE_HOLY] += i;
+ sd->subele[ELE_DARK] += i;
+ sd->subele[ELE_GHOST] += i;
+ sd->subele[ELE_UNDEAD] += i;
+ }
if (sc->data[SC_MTF_MLEATKED])
sd->subele[ELE_NEUTRAL] += sc->data[SC_MTF_MLEATKED]->val1;
if (sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 3)
@@ -4801,6 +4844,10 @@ static int status_calc_batk(struct block_list *bl, struct status_change *sc, int
/* some statuses that are hidden in the status window */
if(sc->data[SC_PLUSATTACKPOWER])
batk += sc->data[SC_PLUSATTACKPOWER]->val1;
+ if (sc->data[SC_POPECOOKIE] != NULL)
+ batk += batk * sc->data[SC_POPECOOKIE]->val1 / 100;
+ if (sc->data[SC_VITALIZE_POTION] != NULL)
+ batk += batk * sc->data[SC_VITALIZE_POTION]->val1 / 100;
return cap_value(batk, battle_config.batk_min, battle_config.batk_max);
}
#ifndef RENEWAL
@@ -4880,6 +4927,10 @@ static int status_calc_batk(struct block_list *bl, struct status_change *sc, int
batk += batk * sc->data[SC_2011RWC]->val2 / 100;
if (sc->data[SC_STEAMPACK])
batk += sc->data[SC_STEAMPACK]->val1;
+ if (sc->data[SC_SKF_ATK] != NULL)
+ batk += sc->data[SC_SKF_ATK]->val1;
+ if (sc->data[SC_ALMIGHTY] != NULL)
+ batk += sc->data[SC_ALMIGHTY]->val1;
if (sc->data[SC_SHRIMP])
batk += batk * sc->data[SC_SHRIMP]->val2 / 100;
@@ -5020,6 +5071,10 @@ static int status_calc_matk(struct block_list *bl, struct status_change *sc, int
/* some statuses that are hidden in the status window */
if (sc->data[SC_MINDBREAKER])
matk += matk * sc->data[SC_MINDBREAKER]->val2 / 100;
+ if (sc->data[SC_POPECOOKIE] != NULL)
+ matk += matk * sc->data[SC_POPECOOKIE]->val2 / 100;
+ if (sc->data[SC_VITALIZE_POTION] != NULL)
+ matk += matk * sc->data[SC_VITALIZE_POTION]->val2 / 100;
return cap_value(matk, battle_config.matk_min, battle_config.matk_max);
}
@@ -5077,6 +5132,10 @@ static int status_calc_matk(struct block_list *bl, struct status_change *sc, int
matk += matk * sc->data[SC_2011RWC]->val2 / 100;
if (sc->data[SC_MAGIC_CANDY])
matk += sc->data[SC_MAGIC_CANDY]->val1;
+ if (sc->data[SC_SKF_MATK] != NULL)
+ matk += sc->data[SC_SKF_MATK]->val1;
+ if (sc->data[SC_ALMIGHTY] != NULL)
+ matk += sc->data[SC_ALMIGHTY]->val2;
return cap_value(matk, battle_config.matk_min, battle_config.matk_max);
}
@@ -5901,6 +5960,8 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, s
bonus += sc->data[SC_BATTLESCROLL]->val1;
if (sc->data[SC_STEAMPACK])
bonus += sc->data[SC_STEAMPACK]->val2;
+ if (sc->data[SC_SKF_ASPD] != NULL)
+ bonus += sc->data[SC_SKF_ASPD]->val1;
}
return (bonus + pots);
@@ -6068,6 +6129,8 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change *
aspd_rate += sc->data[SC_BATTLESCROLL]->val1 * 10;
if (sc->data[SC_STEAMPACK])
aspd_rate += sc->data[SC_STEAMPACK]->val2 * 10;
+ if (sc->data[SC_SKF_ASPD] != NULL)
+ aspd_rate -= sc->data[SC_SKF_ASPD]->val1 * 10;
return (short)cap_value(aspd_rate,0,SHRT_MAX);
}
@@ -6344,13 +6407,24 @@ static int status_get_class(const struct block_list *bl)
{
nullpo_ret(bl);
switch (bl->type) {
- case BL_PC: return BL_UCCAST(BL_PC, bl)->status.class;
- case BL_MOB: return BL_UCCAST(BL_MOB, bl)->vd->class; //Class used on all code should be the view class of the mob.
- case BL_PET: return BL_UCCAST(BL_PET, bl)->pet.class_;
- case BL_HOM: return BL_UCCAST(BL_HOM, bl)->homunculus.class_;
- case BL_MER: return BL_UCCAST(BL_MER, bl)->mercenary.class_;
- case BL_NPC: return BL_UCCAST(BL_NPC, bl)->class_;
- case BL_ELEM: return BL_UCCAST(BL_ELEM, bl)->elemental.class_;
+ case BL_PC:
+ return BL_UCCAST(BL_PC, bl)->status.class;
+ case BL_MOB:
+ {
+ const struct view_data *const vd = BL_UCCAST(BL_MOB, bl)->vd;
+ nullpo_ret(vd);
+ return vd->class; //Class used on all code should be the view class of the mob.
+ }
+ case BL_PET:
+ return BL_UCCAST(BL_PET, bl)->pet.class_;
+ case BL_HOM:
+ return BL_UCCAST(BL_HOM, bl)->homunculus.class_;
+ case BL_MER:
+ return BL_UCCAST(BL_MER, bl)->mercenary.class_;
+ case BL_NPC:
+ return BL_UCCAST(BL_NPC, bl)->class_;
+ case BL_ELEM:
+ return BL_UCCAST(BL_ELEM, bl)->elemental.class_;
}
return 0;
}
@@ -6440,7 +6514,7 @@ static defType status_get_def(struct block_list *bl)
int def = st ? st->def : 0;
ud = unit->bl2ud(bl);
if (ud && ud->skilltimer != INVALID_TIMER)
- def -= def * skill->get_castdef(ud->skill_id)/100;
+ def -= def * skill->get_castdef(ud->skill_id, ud->skill_lv) / 100;
return cap_value(def, DEFTYPE_MIN, DEFTYPE_MAX);
}
@@ -7710,6 +7784,10 @@ static int status_change_start_sub(struct block_list *src, struct block_list *bl
case SC_ENCHANTARMS:
case SC_ARMORPROPERTY:
case SC_ARMOR_RESIST:
+ case SC_RESIST_PROPERTY_WATER:
+ case SC_RESIST_PROPERTY_GROUND:
+ case SC_RESIST_PROPERTY_FIRE:
+ case SC_RESIST_PROPERTY_WIND:
break;
case SC_GOSPEL:
//Must not override a casting gospel char.
@@ -7765,6 +7843,9 @@ static int status_change_start_sub(struct block_list *src, struct block_list *bl
calc_flag = status->dbs->ChangeFlagTable[type];
if(!(flag&SCFLAG_LOADED)) { // Do not parse val settings when loading SCs
switch(type) {
+ case SC_AUTOTRADE:
+ case SC_KSPROTECTED:
+ break; // Prevent calling status_change_start_unknown_sc().
case SC_ADORAMUS:
sc_start(src,bl,SC_BLIND,100,val1,skill->get_time(status->sc2skill(type),val1));
// Fall through to SC_INC_AGI
@@ -8009,7 +8090,6 @@ static int status_change_start_sub(struct block_list *src, struct block_list *bl
// This is done this way because the message that the client displays is hardcoded, and only
// shows how many minutes are remaining. [Panikon]
total_tick = 60000;
- val1 = battle_config.manner_system; //Mute filters.
if (sd)
{
clif->changestatus(sd,SP_MANNER,sd->status.manner);
@@ -8656,6 +8736,210 @@ static int status_change_start_sub(struct block_list *src, struct block_list *bl
//associated, and yet are not wrong/unknown. [Skotlex]
//break;
}
+ case SC_ARMOR_RESIST: {
+ struct status_change_entry *sce_water = sc->data[SC_RESIST_PROPERTY_WATER];
+ struct status_change_entry *sce_ground = sc->data[SC_RESIST_PROPERTY_GROUND];
+ struct status_change_entry *sce_fire = sc->data[SC_RESIST_PROPERTY_FIRE];
+ struct status_change_entry *sce_wind = sc->data[SC_RESIST_PROPERTY_WIND];
+
+ // Water
+ int sum_water = val1 + ((sce_fire != NULL) ? sce_fire->val2 : 0);
+ bool show_icon = true;
+ if (sce_water != NULL && sce_water->timer != INVALID_TIMER) {
+ const struct TimerData *td = timer->get(sce_water->timer);
+ if (td != NULL) {
+ sum_water += sce_water->val1;
+ int left = (int)DIFF_TICK(td->tick, timer->gettick());
+ if (left > total_tick && sum_water - val1 > 0)
+ show_icon = false;
+ }
+ }
+ if (val1 > 0 && sum_water > 0 && show_icon) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_WATER);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_WATER);
+ clif->status_change(bl, sc_icn, sc_typ, 1, total_tick, 0, 0, 0);
+ } else if (sum_water <= 0) {
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_WATER));
+ }
+
+ // Ground
+ int sum_ground = val2 + ((sce_wind != NULL) ? sce_wind->val2 : 0);
+ show_icon = true;
+ if (sce_ground != NULL && sce_ground->timer != INVALID_TIMER) {
+ const struct TimerData *td = timer->get(sce_ground->timer);
+ if (td != NULL) {
+ sum_ground += sce_ground->val1;
+ int left = (int)DIFF_TICK(td->tick, timer->gettick());
+ if (left > total_tick && sum_ground - val2 > 0)
+ show_icon = false;
+ }
+ }
+ if (val2 > 0 && sum_ground > 0 && show_icon) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_GROUND);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_GROUND);
+ clif->status_change(bl, sc_icn, sc_typ, 1, total_tick, 0, 0, 0);
+ } else if (sum_ground <= 0) {
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_GROUND));
+ }
+
+ // Fire
+ int sum_fire = val3 + ((sce_ground != NULL) ? sce_ground->val2 : 0);
+ show_icon = true;
+ if (sce_fire != NULL && sce_fire->timer != INVALID_TIMER) {
+ const struct TimerData *td = timer->get(sce_fire->timer);
+ if (td != NULL) {
+ sum_fire += sce_fire->val1;
+ int left = (int)DIFF_TICK(td->tick, timer->gettick());
+ if (left > total_tick && sum_fire - val3 > 0)
+ show_icon = false;
+ }
+ }
+ if (val3 > 0 && sum_fire > 0 && show_icon) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_FIRE);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_FIRE);
+ clif->status_change(bl, sc_icn, sc_typ, 1, total_tick, 0, 0, 0);
+ } else if (sum_fire <= 0) {
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_FIRE));
+ }
+
+ // Wind
+ int sum_wind = val4 + ((sce_water != NULL) ? sce_water->val2 : 0);
+ show_icon = true;
+ if (sce_wind != NULL && sce_wind->timer != INVALID_TIMER) {
+ const struct TimerData *td = timer->get(sce_wind->timer);
+ if (td != NULL) {
+ sum_wind += sce_wind->val1;
+ int left = (int)DIFF_TICK(td->tick, timer->gettick());
+ if (left > total_tick && sum_wind - val4 > 0)
+ show_icon = false;
+ }
+ }
+ if (val4 > 0 && sum_wind > 0 && show_icon) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_WIND);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_WIND);
+ clif->status_change(bl, sc_icn, sc_typ, 1, total_tick, 0, 0, 0);
+ } else if (sum_wind <= 0) {
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_WIND));
+ }
+
+ break;
+ }
+ case SC_RESIST_PROPERTY_WATER: {
+ struct status_change_entry *sce_all = sc->data[SC_ARMOR_RESIST];
+ struct status_change_entry *sce_fire = sc->data[SC_RESIST_PROPERTY_FIRE];
+ struct status_change_entry *sce_wind = sc->data[SC_RESIST_PROPERTY_WIND];
+
+ // Water
+ int sum_water = val1 + ((sce_fire != NULL) ? sce_fire->val2 : 0);
+ if (sce_all != NULL && sce_all->timer != INVALID_TIMER) {
+ const struct TimerData *td = timer->get(sce_all->timer);
+ if (td != NULL) {
+ sum_water += sce_all->val1;
+ int left = (int)DIFF_TICK(td->tick, timer->gettick());
+ if (left > total_tick && sum_water - val1 > 0)
+ flag |= SCFLAG_NOICON;
+ }
+ }
+ if (sum_water <= 0) {
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_WATER));
+ flag |= SCFLAG_NOICON;
+ }
+
+ // Wind
+ int sum_wind = val2 + ((sce_wind != NULL) ? sce_wind->val1 : 0);
+ sum_wind += (sce_all != NULL) ? sce_all->val4 : 0;
+ if (sum_wind <= 0)
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_WIND));
+
+ break;
+ }
+ case SC_RESIST_PROPERTY_GROUND: {
+ struct status_change_entry *sce_all = sc->data[SC_ARMOR_RESIST];
+ struct status_change_entry *sce_wind = sc->data[SC_RESIST_PROPERTY_WIND];
+ struct status_change_entry *sce_fire = sc->data[SC_RESIST_PROPERTY_FIRE];
+
+ // Ground
+ int sum_ground = val1 + ((sce_wind != NULL) ? sce_wind->val2 : 0);
+ if (sce_all != NULL && sce_all->timer != INVALID_TIMER) {
+ const struct TimerData *td = timer->get(sce_all->timer);
+ if (td != NULL) {
+ sum_ground += sce_all->val2;
+ int left = (int)DIFF_TICK(td->tick, timer->gettick());
+ if (left > total_tick && sum_ground - val1 > 0)
+ flag |= SCFLAG_NOICON;
+ }
+ }
+ if (sum_ground <= 0) {
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_GROUND));
+ flag |= SCFLAG_NOICON;
+ }
+
+ // Fire
+ int sum_fire = val2 + ((sce_fire != NULL) ? sce_fire->val1 : 0);
+ sum_fire += (sce_all != NULL) ? sce_all->val3 : 0;
+ if (sum_fire <= 0)
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_FIRE));
+
+ break;
+ }
+ case SC_RESIST_PROPERTY_FIRE: {
+ struct status_change_entry *sce_all = sc->data[SC_ARMOR_RESIST];
+ struct status_change_entry *sce_ground = sc->data[SC_RESIST_PROPERTY_GROUND];
+ struct status_change_entry *sce_water = sc->data[SC_RESIST_PROPERTY_WATER];
+
+ // Fire
+ int sum_fire = val1 + ((sce_ground != NULL) ? sce_ground->val2 : 0);
+ if (sce_all != NULL && sce_all->timer != INVALID_TIMER) {
+ const struct TimerData *td = timer->get(sce_all->timer);
+ if (td != NULL) {
+ sum_fire += sce_all->val3;
+ int left = (int)DIFF_TICK(td->tick, timer->gettick());
+ if (left > total_tick && sum_fire - val1 > 0)
+ flag |= SCFLAG_NOICON;
+ }
+ }
+ if (sum_fire <= 0) {
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_FIRE));
+ flag |= SCFLAG_NOICON;
+ }
+
+ // Water
+ int sum_water = val2 + ((sce_water != NULL) ? sce_water->val1 : 0);
+ sum_water += (sce_all != NULL) ? sce_all->val1 : 0;
+ if (sum_water <= 0)
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_WATER));
+
+ break;
+ }
+ case SC_RESIST_PROPERTY_WIND: {
+ struct status_change_entry *sce_all = sc->data[SC_ARMOR_RESIST];
+ struct status_change_entry *sce_water = sc->data[SC_RESIST_PROPERTY_WATER];
+ struct status_change_entry *sce_ground = sc->data[SC_RESIST_PROPERTY_GROUND];
+
+ // Wind
+ int sum_wind = val1 + ((sce_water != NULL) ? sce_water->val2 : 0);
+ if (sce_all != NULL && sce_all->timer != INVALID_TIMER) {
+ const struct TimerData *td = timer->get(sce_all->timer);
+ if (td != NULL) {
+ sum_wind += sce_all->val4;
+ int left = (int)DIFF_TICK(td->tick, timer->gettick());
+ if (left > total_tick && sum_wind - val1 > 0)
+ flag |= SCFLAG_NOICON;
+ }
+ }
+ if (sum_wind <= 0) {
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_WIND));
+ flag |= SCFLAG_NOICON;
+ }
+
+ // Ground
+ int sum_ground = val2 + ((sce_ground != NULL) ? sce_ground->val1 : 0);
+ sum_ground += (sce_all != NULL) ? sce_all->val2 : 0;
+ if (sum_ground <= 0)
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_GROUND));
+
+ break;
+ }
case SC_MER_FLEE:
case SC_MER_ATK:
case SC_MER_HIT:
@@ -10514,7 +10798,7 @@ static int status_change_clear(struct block_list *bl, int type)
/*==========================================
* Special condition we want to effectuate, check before ending a status.
*------------------------------------------*/
-static int status_change_end_(struct block_list *bl, enum sc_type type, int tid, const char *file, int line)
+static int status_change_end_(struct block_list *bl, enum sc_type type, int tid)
{
struct map_session_data *sd;
struct status_change *sc;
@@ -10582,6 +10866,9 @@ static int status_change_end_(struct block_list *bl, enum sc_type type, int tid,
vd = status->get_viewdata(bl);
calc_flag = status->dbs->ChangeFlagTable[type];
+
+ bool remove_icon = true;
+
switch(type) {
case SC_GRANITIC_ARMOR:
{
@@ -10681,23 +10968,9 @@ static int status_change_end_(struct block_list *bl, enum sc_type type, int tid,
break;
case SC_DANCING:
{
- const char* prevfile = "<unknown>";
- int prevline = 0;
struct map_session_data *dsd;
struct status_change_entry *dsc;
- if (sd) {
- if (sd->delunit_prevfile) {
- // initially this is NULL, when a character logs in
- prevfile = sd->delunit_prevfile;
- prevline = sd->delunit_prevline;
- } else {
- prevfile = "<none>";
- }
- sd->delunit_prevfile = file;
- sd->delunit_prevline = line;
- }
-
if (sce->val4 && sce->val4 != BCT_SELF && (dsd=map->id2sd(sce->val4)) != NULL) {
// end status on partner as well
dsc = dsd->sc.data[SC_DANCING];
@@ -10713,19 +10986,10 @@ static int status_change_end_(struct block_list *bl, enum sc_type type, int tid,
// erase associated land skill
struct skill_unit_group *group = skill->id2group(sce->val2);
- if (group == NULL) {
- ShowDebug("status_change_end: SC_DANCING is missing skill unit group (val1=%d, val2=%d, val3=%d, val4=%d, timer=%d, tid=%d, char_id=%d, map=%s, x=%d, y=%d, prev=%s:%d, from=%s:%d). Please report this! (#3504)\n",
- sce->val1, sce->val2, sce->val3, sce->val4, sce->timer, tid,
- sd ? sd->status.char_id : 0,
- mapindex_id2name(map_id2index(bl->m)), bl->x, bl->y,
- prevfile, prevline,
- file, line);
- }
-
sce->val2 = 0;
if( group )
- skill->del_unitgroup(group,ALC_MARK);
+ skill->del_unitgroup(group);
}
if ((sce->val1&0xFFFF) == CG_MOONLIT)
@@ -10829,7 +11093,7 @@ static int status_change_end_(struct block_list *bl, enum sc_type type, int tid,
struct skill_unit_group* group = skill->id2group(sce->val3);
sce->val3 = 0;
if( group )
- skill->del_unitgroup(group,ALC_MARK);
+ skill->del_unitgroup(group);
}
break;
case SC_HERMODE:
@@ -10848,7 +11112,7 @@ static int status_change_end_(struct block_list *bl, enum sc_type type, int tid,
struct skill_unit_group* group = skill->id2group(sce->val4);
sce->val4 = 0;
if( group ) /* might have been cleared before status ended, e.g. land protector */
- skill->del_unitgroup(group,ALC_MARK);
+ skill->del_unitgroup(group);
}
break;
case SC_KAAHI:
@@ -10946,7 +11210,7 @@ static int status_change_end_(struct block_list *bl, enum sc_type type, int tid,
struct skill_unit_group* group = skill->id2group(sce->val2);
sce->val2 = 0;
if (group) /* might have been cleared before status ended, e.g. land protector */
- skill->del_unitgroup(group,ALC_MARK);
+ skill->del_unitgroup(group);
}
break;
case SC_BANDING:
@@ -10954,7 +11218,7 @@ static int status_change_end_(struct block_list *bl, enum sc_type type, int tid,
struct skill_unit_group *group = skill->id2group(sce->val4);
sce->val4 = 0;
if( group ) /* might have been cleared before status ended, e.g. land protector */
- skill->del_unitgroup(group,ALC_MARK);
+ skill->del_unitgroup(group);
}
break;
case SC_CURSEDCIRCLE_ATKER:
@@ -11013,6 +11277,202 @@ static int status_change_end_(struct block_list *bl, enum sc_type type, int tid,
break;
}
break;
+ case SC_ARMOR_RESIST: {
+ struct status_change_entry *sce_water = sc->data[SC_RESIST_PROPERTY_WATER];
+ struct status_change_entry *sce_ground = sc->data[SC_RESIST_PROPERTY_GROUND];
+ struct status_change_entry *sce_fire = sc->data[SC_RESIST_PROPERTY_FIRE];
+ struct status_change_entry *sce_wind = sc->data[SC_RESIST_PROPERTY_WIND];
+
+ // Water
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_WATER));
+ if (sce_water != NULL && sce_water->timer != INVALID_TIMER) {
+ int sum_water = sce_water->val1 + ((sce_fire != NULL) ? sce_fire->val2 : 0);
+ const struct TimerData *td = timer->get(sce_water->timer);
+ if (td != NULL && sce_water->val1 > 0 && sum_water > 0) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_WATER);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_WATER);
+ int sc_tck = (int)DIFF_TICK(td->tick, timer->gettick());
+ int sc_ttl = sce_water->total_tick;
+ clif->status_change_sub(bl, sc_icn, sc_typ, 1, sc_tck, sc_ttl, 0, 0, 0);
+ }
+ }
+
+ // Ground
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_GROUND));
+ if (sce_ground != NULL && sce_ground->timer != INVALID_TIMER) {
+ int sum_ground = sce_ground->val1 + ((sce_wind != NULL) ? sce_wind->val2 : 0);
+ const struct TimerData *td = timer->get(sce_ground->timer);
+ if (td != NULL && sce_ground->val1 > 0 && sum_ground > 0) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_GROUND);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_GROUND);
+ int sc_tck = (int)DIFF_TICK(td->tick, timer->gettick());
+ int sc_ttl = sce_ground->total_tick;
+ clif->status_change_sub(bl, sc_icn, sc_typ, 1, sc_tck, sc_ttl, 0, 0, 0);
+ }
+ }
+
+ // Fire
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_FIRE));
+ if (sce_fire != NULL && sce_fire->timer != INVALID_TIMER) {
+ int sum_fire = sce_fire->val1 + ((sce_ground != NULL) ? sce_ground->val2 : 0);
+ const struct TimerData *td = timer->get(sce_fire->timer);
+ if (td != NULL && sce_fire->val1 > 0 && sum_fire > 0) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_FIRE);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_FIRE);
+ int sc_tck = (int)DIFF_TICK(td->tick, timer->gettick());
+ int sc_ttl = sce_fire->total_tick;
+ clif->status_change_sub(bl, sc_icn, sc_typ, 1, sc_tck, sc_ttl, 0, 0, 0);
+ }
+ }
+
+ // Wind
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(SC_RESIST_PROPERTY_WIND));
+ if (sce_wind != NULL && sce_wind->timer != INVALID_TIMER) {
+ int sum_wind = sce_wind->val1 + ((sce_water != NULL) ? sce_water->val2 : 0);
+ const struct TimerData *td = timer->get(sce_wind->timer);
+ if (td != NULL && sce_wind->val1 > 0 && sum_wind > 0) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_WIND);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_WIND);
+ int sc_tck = (int)DIFF_TICK(td->tick, timer->gettick());
+ int sc_ttl = sce_wind->total_tick;
+ clif->status_change_sub(bl, sc_icn, sc_typ, 1, sc_tck, sc_ttl, 0, 0, 0);
+ }
+ }
+
+ break;
+ }
+ case SC_RESIST_PROPERTY_WATER:
+ if (sc->data[SC_ARMOR_RESIST] != NULL && sc->data[SC_ARMOR_RESIST]->timer != INVALID_TIMER) {
+ const struct TimerData *td = timer->get(sc->data[SC_ARMOR_RESIST]->timer);
+ if (td == NULL)
+ break;
+
+ // Water
+ int sum_water = sc->data[SC_ARMOR_RESIST]->val1;
+ if (sc->data[SC_RESIST_PROPERTY_FIRE] != NULL)
+ sum_water += sc->data[SC_RESIST_PROPERTY_FIRE]->val2;
+ if (sc->data[SC_ARMOR_RESIST]->val1 > 0 && sum_water > 0) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_WATER);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_WATER);
+ int sc_tck = (int)DIFF_TICK(td->tick, timer->gettick());
+ int sc_ttl = sc->data[SC_ARMOR_RESIST]->total_tick;
+ clif->status_change_sub(bl, sc_icn, sc_typ, 1, sc_tck, sc_ttl, 0, 0, 0);
+ remove_icon = false;
+ }
+
+ // Wind
+ int sum_wind = sc->data[SC_ARMOR_RESIST]->val4;
+ if (sc->data[SC_RESIST_PROPERTY_WIND] != NULL)
+ sum_wind += sc->data[SC_RESIST_PROPERTY_WIND]->val1;
+ if (sc->data[SC_ARMOR_RESIST]->val4 > 0 && sum_wind > 0) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_WIND);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_WIND);
+ int sc_tck = (int)DIFF_TICK(td->tick, timer->gettick());
+ int sc_ttl = sc->data[SC_ARMOR_RESIST]->total_tick;
+ clif->status_change_sub(bl, sc_icn, sc_typ, 1, sc_tck, sc_ttl, 0, 0, 0);
+ }
+ }
+
+ break;
+ case SC_RESIST_PROPERTY_GROUND:
+ if (sc->data[SC_ARMOR_RESIST] != NULL && sc->data[SC_ARMOR_RESIST]->timer != INVALID_TIMER) {
+ const struct TimerData *td = timer->get(sc->data[SC_ARMOR_RESIST]->timer);
+ if (td == NULL)
+ break;
+
+ // Ground
+ int sum_ground = sc->data[SC_ARMOR_RESIST]->val2;
+ if (sc->data[SC_RESIST_PROPERTY_WIND] != NULL)
+ sum_ground += sc->data[SC_RESIST_PROPERTY_WIND]->val2;
+ if (sc->data[SC_ARMOR_RESIST]->val2 > 0 && sum_ground > 0) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_GROUND);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_GROUND);
+ int sc_tck = (int)DIFF_TICK(td->tick, timer->gettick());
+ int sc_ttl = sc->data[SC_ARMOR_RESIST]->total_tick;
+ clif->status_change_sub(bl, sc_icn, sc_typ, 1, sc_tck, sc_ttl, 0, 0, 0);
+ remove_icon = false;
+ }
+
+ // Fire
+ int sum_fire = sc->data[SC_ARMOR_RESIST]->val3;
+ if (sc->data[SC_RESIST_PROPERTY_FIRE] != NULL)
+ sum_fire += sc->data[SC_RESIST_PROPERTY_FIRE]->val1;
+ if (sc->data[SC_ARMOR_RESIST]->val3 > 0 && sum_fire > 0) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_FIRE);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_FIRE);
+ int sc_tck = (int)DIFF_TICK(td->tick, timer->gettick());
+ int sc_ttl = sc->data[SC_ARMOR_RESIST]->total_tick;
+ clif->status_change_sub(bl, sc_icn, sc_typ, 1, sc_tck, sc_ttl, 0, 0, 0);
+ }
+ }
+
+ break;
+ case SC_RESIST_PROPERTY_FIRE:
+ if (sc->data[SC_ARMOR_RESIST] != NULL && sc->data[SC_ARMOR_RESIST]->timer != INVALID_TIMER) {
+ const struct TimerData *td = timer->get(sc->data[SC_ARMOR_RESIST]->timer);
+ if (td == NULL)
+ break;
+
+ // Fire
+ int sum_fire = sc->data[SC_ARMOR_RESIST]->val3;
+ if (sc->data[SC_RESIST_PROPERTY_GROUND] != NULL)
+ sum_fire += sc->data[SC_RESIST_PROPERTY_GROUND]->val2;
+ if (sc->data[SC_ARMOR_RESIST]->val3 > 0 && sum_fire > 0) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_FIRE);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_FIRE);
+ int sc_tck = (int)DIFF_TICK(td->tick, timer->gettick());
+ int sc_ttl = sc->data[SC_ARMOR_RESIST]->total_tick;
+ clif->status_change_sub(bl, sc_icn, sc_typ, 1, sc_tck, sc_ttl, 0, 0, 0);
+ remove_icon = false;
+ }
+
+ // Water
+ int sum_water = sc->data[SC_ARMOR_RESIST]->val1;
+ if (sc->data[SC_RESIST_PROPERTY_WATER] != NULL)
+ sum_water += sc->data[SC_RESIST_PROPERTY_WATER]->val1;
+ if (sc->data[SC_ARMOR_RESIST]->val1 > 0 && sum_water > 0) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_WATER);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_WATER);
+ int sc_tck = (int)DIFF_TICK(td->tick, timer->gettick());
+ int sc_ttl = sc->data[SC_ARMOR_RESIST]->total_tick;
+ clif->status_change_sub(bl, sc_icn, sc_typ, 1, sc_tck, sc_ttl, 0, 0, 0);
+ }
+ }
+
+ break;
+ case SC_RESIST_PROPERTY_WIND:
+ if (sc->data[SC_ARMOR_RESIST] != NULL && sc->data[SC_ARMOR_RESIST]->timer != INVALID_TIMER) {
+ const struct TimerData *td = timer->get(sc->data[SC_ARMOR_RESIST]->timer);
+ if (td == NULL)
+ break;
+
+ // Wind
+ int sum_wind = sc->data[SC_ARMOR_RESIST]->val4;
+ if (sc->data[SC_RESIST_PROPERTY_WATER] != NULL)
+ sum_wind += sc->data[SC_RESIST_PROPERTY_WATER]->val2;
+ if (sc->data[SC_ARMOR_RESIST]->val4 > 0 && sum_wind > 0) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_WIND);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_WIND);
+ int sc_tck = (int)DIFF_TICK(td->tick, timer->gettick());
+ int sc_ttl = sc->data[SC_ARMOR_RESIST]->total_tick;
+ clif->status_change_sub(bl, sc_icn, sc_typ, 1, sc_tck, sc_ttl, 0, 0, 0);
+ remove_icon = false;
+ }
+
+ // Ground
+ int sum_ground = sc->data[SC_ARMOR_RESIST]->val2;
+ if (sc->data[SC_RESIST_PROPERTY_GROUND] != NULL)
+ sum_ground += sc->data[SC_RESIST_PROPERTY_GROUND]->val1;
+ if (sc->data[SC_ARMOR_RESIST]->val2 > 0 && sum_ground > 0) {
+ int sc_icn = status->get_sc_icon(SC_RESIST_PROPERTY_GROUND);
+ int sc_typ = status->get_sc_relevant_bl_types(SC_RESIST_PROPERTY_GROUND);
+ int sc_tck = (int)DIFF_TICK(td->tick, timer->gettick());
+ int sc_ttl = sc->data[SC_ARMOR_RESIST]->total_tick;
+ clif->status_change_sub(bl, sc_icn, sc_typ, 1, sc_tck, sc_ttl, 0, 0, 0);
+ }
+ }
+
+ break;
}
opt_flag = 1;
@@ -11226,7 +11686,8 @@ static int status_change_end_(struct block_list *bl, enum sc_type type, int tid,
#endif
//On Aegis, when turning off a status change, first goes the sc packet, then the option packet.
- clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(type));
+ if (remove_icon)
+ clif->sc_end(bl, bl->id, AREA, status->get_sc_icon(type));
if( opt_flag&8 ) //bugreport:681
clif->changeoption2(bl);
diff --git a/src/map/status.h b/src/map/status.h
index ada18bc0a..43cfd6931 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -854,6 +854,13 @@ typedef enum sc_type {
SC_RESIST_PROPERTY_WIND,
SC_CLIENT_ONLY_EQUIP_ARROW,
SC_MADOGEAR,
+ SC_POPECOOKIE,
+ SC_VITALIZE_POTION,
+ SC_SKF_MATK,
+ SC_SKF_ATK,
+ SC_SKF_ASPD,
+ SC_SKF_CAST,
+ SC_ALMIGHTY,
#ifndef SC_MAX
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
#endif
@@ -1207,7 +1214,7 @@ struct status_change {
#define sc_start2(src, bl, type, rate, val1, val2, tick) (status->change_start((src),(bl),(type),100*(rate),(val1),(val2),0,0,(tick),SCFLAG_NONE))
#define sc_start4(src, bl, type, rate, val1, val2, val3, val4, tick) (status->change_start((src),(bl),(type),100*(rate),(val1),(val2),(val3),(val4),(tick),SCFLAG_NONE))
-#define status_change_end(bl,type,tid) (status->change_end_((bl),(type),(tid),__FILE__,__LINE__))
+#define status_change_end(bl,type,tid) (status->change_end_((bl),(type),(tid)))
#define status_calc_bl(bl, flag) (status->calc_bl_((bl), (enum scb_flag)(flag), SCO_NONE))
#define status_calc_mob(md, opt) (status->calc_bl_(&(md)->bl, SCB_ALL, (opt)))
@@ -1301,7 +1308,7 @@ struct status_interface {
int (*get_sc_def) (struct block_list *src, struct block_list *bl, enum sc_type type, int rate, int tick, int flag);
int (*change_start) (struct block_list *src, struct block_list *bl, enum sc_type type, int rate, int val1, int val2, int val3, int val4, int tick, int flag);
int (*change_start_sub) (struct block_list *src, struct block_list *bl, enum sc_type type, int rate, int val1, int val2, int val3, int val4, int tick, int total_tick, int flag);
- int (*change_end_) (struct block_list* bl, enum sc_type type, int tid, const char* file, int line);
+ int (*change_end_) (struct block_list* bl, enum sc_type type, int tid);
bool (*is_immune_to_status) (struct status_change* sc, enum sc_type type);
bool (*is_boss_resist_sc) (enum sc_type type);
bool (*end_sc_before_start) (struct block_list *bl, struct status_data *st, struct status_change* sc, enum sc_type type, int undead_flag, int val1, int val2, int val3, int val4);
diff --git a/src/map/trade.c b/src/map/trade.c
index e727c3c70..31970fbf9 100644
--- a/src/map/trade.c
+++ b/src/map/trade.c
@@ -63,7 +63,7 @@ static void trade_traderequest(struct map_session_data *sd, struct map_session_d
return;
}
- if (target_sd->npc_id) {
+ if (target_sd->npc_id != 0 && target_sd->state.using_megaphone == 0) {
//Trade fails if you are using an NPC.
clif->tradestart(sd, 2);
return;
@@ -166,9 +166,10 @@ static void trade_tradeack(struct map_session_data *sd, int type)
}
//Check if you can start trade.
- if (sd->npc_id || sd->state.vending || sd->state.prevend || sd->state.buyingstore || sd->state.storage_flag != STORAGE_FLAG_CLOSED
- || tsd->npc_id || tsd->state.vending || tsd->state.prevend || tsd->state.buyingstore || tsd->state.storage_flag != STORAGE_FLAG_CLOSED
- ) {
+ if ((sd->npc_id != 0 && sd->state.using_megaphone == 0) || sd->state.vending != 0 || sd->state.prevend != 0
+ || sd->state.buyingstore != 0 || sd->state.storage_flag != STORAGE_FLAG_CLOSED
+ || (tsd->npc_id != 0 && tsd->state.using_megaphone == 0) || tsd->state.vending != 0 || tsd->state.prevend != 0
+ || tsd->state.buyingstore != 0 || tsd->state.storage_flag != STORAGE_FLAG_CLOSED) {
//Fail
clif->tradestart(sd, 2);
clif->tradestart(tsd, 2);
diff --git a/src/map/unit.c b/src/map/unit.c
index 29a01aea7..fb6d992ae 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -57,6 +57,7 @@
#include "common/showmsg.h"
#include "common/socket.h"
#include "common/timer.h"
+#include "common/utils.h"
#include <stdio.h>
#include <stdlib.h>
@@ -71,20 +72,69 @@ struct unit_interface *unit;
/**
* Returns the unit_data for the given block_list. If the object is using
* shared unit_data (i.e. in case of BL_NPC), it returns the shared data.
- * @param bl block_list to process
+ *
+ * __Warning:__ if bl->type is not known or NULL,
+ * an assertion will be triggered and NULL returned.
+ * @param bl block_list to process, it is expected to be not NULL.
* @return a pointer to the given object's unit_data
**/
static struct unit_data *unit_bl2ud(struct block_list *bl)
{
- if (bl == NULL) return NULL;
- if (bl->type == BL_PC) return &BL_UCAST(BL_PC, bl)->ud;
- if (bl->type == BL_MOB) return &BL_UCAST(BL_MOB, bl)->ud;
- if (bl->type == BL_PET) return &BL_UCAST(BL_PET, bl)->ud;
- if (bl->type == BL_NPC) return BL_UCAST(BL_NPC, bl)->ud;
- if (bl->type == BL_HOM) return &BL_UCAST(BL_HOM, bl)->ud;
- if (bl->type == BL_MER) return &BL_UCAST(BL_MER, bl)->ud;
- if (bl->type == BL_ELEM) return &BL_UCAST(BL_ELEM, bl)->ud;
- return NULL;
+ Assert_retr(NULL, bl != NULL);
+ switch (bl->type) {
+ case BL_PC:
+ return &BL_UCAST(BL_PC, bl)->ud;
+ case BL_MOB:
+ return &BL_UCAST(BL_MOB, bl)->ud;
+ case BL_PET:
+ return &BL_UCAST(BL_PET, bl)->ud;
+ case BL_NPC:
+ return BL_UCAST(BL_NPC, bl)->ud;
+ case BL_HOM:
+ return &BL_UCAST(BL_HOM, bl)->ud;
+ case BL_MER:
+ return &BL_UCAST(BL_MER, bl)->ud;
+ case BL_ELEM:
+ return &BL_UCAST(BL_ELEM, bl)->ud;
+ case BL_SKILL: // No assertion to not spam the server console when attacking a skill type unit such as Ice Wall.
+ return NULL;
+ default:
+ Assert_retr(NULL, false);
+ }
+}
+
+/**
+ * Returns the const unit_data for the given const block_list. If the object is using
+ * shared unit_data (i.e. in case of BL_NPC), it returns the shared data.
+ *
+ * __Warning:__ if bl->type is not known or NULL,
+ * an assertion will be triggered and NULL returned.
+ * @param bl block_list to process, it is expected to be not NULL.
+ * @return a pointer to the given object's unit_data
+ **/
+static const struct unit_data *unit_cbl2ud(const struct block_list *bl)
+{
+ Assert_retr(NULL, bl != NULL);
+ switch (bl->type) {
+ case BL_PC:
+ return &BL_UCCAST(BL_PC, bl)->ud;
+ case BL_MOB:
+ return &BL_UCCAST(BL_MOB, bl)->ud;
+ case BL_PET:
+ return &BL_UCCAST(BL_PET, bl)->ud;
+ case BL_NPC:
+ return BL_UCCAST(BL_NPC, bl)->ud;
+ case BL_HOM:
+ return &BL_UCCAST(BL_HOM, bl)->ud;
+ case BL_MER:
+ return &BL_UCCAST(BL_MER, bl)->ud;
+ case BL_ELEM:
+ return &BL_UCCAST(BL_ELEM, bl)->ud;
+ case BL_SKILL: // No assertion to not spam the server console when attacking a skill type unit such as Ice Wall.
+ return NULL;
+ default:
+ Assert_retr(NULL, false);
+ }
}
/**
@@ -105,42 +155,46 @@ static struct unit_data *unit_bl2ud2(struct block_list *bl)
return unit->bl2ud(bl);
}
-static int unit_walktoxy_sub(struct block_list *bl)
+/**
+ * TODO: understand purpose of this function
+ * @param bl block_list to process
+ * @return 0: success, 1: fail, 2: nullpointer
+ */
+static int unit_walk_toxy_sub(struct block_list *bl)
{
- int i;
- struct walkpath_data wpd;
- struct unit_data *ud = NULL;
-
- nullpo_retr(1, bl);
- ud = unit->bl2ud(bl);
- if(ud == NULL) return 0;
+ nullpo_retr(2, bl);
+ struct unit_data *ud = unit->bl2ud(bl);
+ if (ud == NULL)
+ return 2;
- memset(&wpd, 0, sizeof(wpd));
+ struct walkpath_data wpd = {0};
- if( !path->search(&wpd,bl,bl->m,bl->x,bl->y,ud->to_x,ud->to_y,ud->state.walk_easy,CELL_CHKNOPASS) )
- return 0;
+ if (!path->search(&wpd, bl, bl->m, bl->x, bl->y, ud->to_x, ud->to_y, ud->state.walk_easy, CELL_CHKNOPASS))
+ return 1;
#ifdef OFFICIAL_WALKPATH
- if( !path->search_long(NULL, bl, bl->m, bl->x, bl->y, ud->to_x, ud->to_y, CELL_CHKNOPASS) // Check if there is an obstacle between
- && wpd.path_len > 14 // Official number of walkable cells is 14 if and only if there is an obstacle between. [malufett]
- && (bl->type != BL_NPC) ) // If type is a NPC, please disregard.
- return 0;
+ if (bl->type != BL_NPC // If type is an NPC, disregard.
+ && !path->search_long(NULL, bl, bl->m, bl->x, bl->y, ud->to_x, ud->to_y, CELL_CHKNOPASS) // Check if there is an obstacle between
+ && wpd.path_len > 14) { // Official number of walkable cells is 14 if and only if there is an obstacle between. [malufett]
+ return 1;
+ }
#endif
- memcpy(&ud->walkpath,&wpd,sizeof(wpd));
+ ud->walkpath = wpd;
- if (ud->target_to && ud->chaserange>1) {
- //Generally speaking, the walk path is already to an adjacent tile
- //so we only need to shorten the path if the range is greater than 1.
+ if (ud->target_to != 0 && ud->chaserange > 1) {
+ // Generally speaking, the walk path is already to an adjacent tile
+ // so we only need to shorten the path if the range is greater than 1.
- //Trim the last part of the path to account for range,
- //but always move at least one cell when requested to move.
- for (i = (ud->chaserange*10)-10; i > 0 && ud->walkpath.path_len>1;) {
- uint8 dir;
+ // Trim the last part of the path to account for range,
+ // but always move at least one cell when requested to move.
+ for (int i = ud->chaserange * 10 - 10; i > 0 && ud->walkpath.path_len > 1;) {
+ enum unit_dir dir;
ud->walkpath.path_len--;
dir = ud->walkpath.path[ud->walkpath.path_len];
- if (dir&1)
- i -= MOVE_COST*20; //When chasing, units will target a diamond-shaped area in range [Playtester]
+ Assert_retr(1, dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX);
+ if (unit_is_diagonal_dir(dir))
+ i -= MOVE_COST * 20; // When chasing, units will target a diamond-shaped area in range [Playtester]
else
i -= MOVE_COST;
ud->to_x -= dirx[dir];
@@ -148,7 +202,7 @@ static int unit_walktoxy_sub(struct block_list *bl)
}
}
- ud->state.change_walk_target=0;
+ ud->state.change_walk_target = 0;
if (bl->type == BL_PC) {
struct map_session_data *sd = BL_UCAST(BL_PC, bl);
@@ -157,15 +211,17 @@ static int unit_walktoxy_sub(struct block_list *bl)
}
clif->move(ud);
- if(ud->walkpath.path_pos>=ud->walkpath.path_len)
- i = -1;
- else if(ud->walkpath.path[ud->walkpath.path_pos]&1)
- i = status->get_speed(bl)*MOVE_DIAGONAL_COST/MOVE_COST;
+ int timer_delay;
+ if (ud->walkpath.path_pos >= ud->walkpath.path_len)
+ timer_delay = -1;
+ else if ((ud->walkpath.path[ud->walkpath.path_pos] & 1) != 0)
+ timer_delay = status->get_speed(bl) * MOVE_DIAGONAL_COST / MOVE_COST;
else
- i = status->get_speed(bl);
- if( i > 0)
- ud->walktimer = timer->add(timer->gettick()+i,unit->walktoxy_timer,bl->id,i);
- return 1;
+ timer_delay = status->get_speed(bl);
+
+ if (timer_delay > 0)
+ ud->walktimer = timer->add(timer->gettick() + timer_delay, unit->walk_toxy_timer, bl->id, 0); //TODO: check if unit->walk_toxy_timer uses any intptr data
+ return 0;
}
/**
@@ -173,289 +229,281 @@ static int unit_walktoxy_sub(struct block_list *bl)
* @param tid: Timer ID
* @param tick: Unused
* @param id: ID of bl to do the action
- * @param data: Not used
- * @return 1: Success 0: Fail (No valid bl)
+ * @param data: Unused
+ * @return 0: success, 1: fail, 2: nullpointer
*/
-static int unit_step_timer(int tid, int64 tick, int id, intptr_t data)
+static int unit_steptimer(int tid, int64 tick, int id, intptr_t data)
{
- struct block_list *bl;
- struct unit_data *ud;
- int target_id;
-
- bl = map->id2bl(id);
-
- if (!bl || bl->prev == NULL)
- return 0;
-
- ud = unit->bl2ud(bl);
-
- if(!ud)
- return 0;
+ struct block_list *bl = map->id2bl(id);
+ if (bl == NULL || bl->prev == NULL)
+ return 2;
+ struct unit_data *ud = unit->bl2ud(bl);
+ if (ud == NULL)
+ return 2;
- if(ud->steptimer != tid) {
- ShowError("unit_step_timer mismatch %d != %d\n",ud->steptimer,tid);
- return 0;
+ if (ud->steptimer != tid) {
+ ShowError("unit_steptimer mismatch %d != %d\n", ud->steptimer, tid);
+ return 1;
}
ud->steptimer = INVALID_TIMER;
- if(!ud->stepaction)
- return 0;
+ if (!ud->stepaction)
+ return 1;
- //Set to false here because if an error occurs, it should not be executed again
+ // Set to false here because if an error occurs, it should not be executed again
ud->stepaction = false;
- if(!ud->target_to)
- return 0;
+ if (ud->target_to == 0)
+ return 1;
- //Flush target_to as it might contain map coordinates which should not be used by other functions
- target_id = ud->target_to;
+ // Flush target_to as it might contain map coordinates which should not be used by other functions
+ int target_id = ud->target_to;
ud->target_to = 0;
- //If stepaction is set then we remembered a client request that should be executed on the next step
- //Execute request now if target is in attack range
- if(ud->stepskill_id && skill->get_inf(ud->stepskill_id) & INF_GROUND_SKILL) {
- //Execute ground skill
+ // If stepaction is set then we remembered a client request that should be executed on the next step
+ // Execute request now if target is in attack range
+ if (ud->stepskill_id != 0 && (skill->get_inf(ud->stepskill_id) & INF_GROUND_SKILL) != 0) {
+ // Execute ground skill
struct map_data *md = &map->list[bl->m];
- unit->skilluse_pos(bl, target_id%md->xs, target_id/md->xs, ud->stepskill_id, ud->stepskill_lv);
+ unit->skilluse_pos(bl, target_id % md->xs, target_id / md->xs, ud->stepskill_id, ud->stepskill_lv);
} else {
- //If a player has target_id set and target is in range, attempt attack
+ // If a player has target_id set and target is in range, attempt attack
struct block_list *tbl = map->id2bl(target_id);
- if (!tbl || !status->check_visibility(bl, tbl)) {
- return 0;
- }
- if(ud->stepskill_id == 0) {
- //Execute normal attack
- unit->attack(bl, tbl->id, (ud->state.attack_continue) + 2);
- } else {
- //Execute non-ground skill
- unit->skilluse_id(bl, tbl->id, ud->stepskill_id, ud->stepskill_lv);
- }
+ if (tbl == NULL || status->check_visibility(bl, tbl) == 0)
+ return 1; // Target does not exist (player offline, monster died, etc.) or target is not visible to source.
+ if (ud->stepskill_id == 0)
+ unit->attack(bl, tbl->id, ud->state.attack_continue + 2); // Execute normal attack
+ else
+ unit->skilluse_id(bl, tbl->id, ud->stepskill_id, ud->stepskill_lv); // Execute non-ground skill
}
- return 1;
+ return 0;
}
-static int unit_walktoxy_timer(int tid, int64 tick, int id, intptr_t data)
+/**
+ * Warps homunculus or mercenary towards his master in case he's too far away for 3 seconds.
+ * @param master_bl: block_list of master
+ * @param slave_bl: block_list of homunculus/mercenary master owns
+ * @return 0: success, 1: fail
+ */
+static int unit_warpto_master(struct block_list *master_bl, struct block_list *slave_bl)
{
- int i;
- int x,y,dx,dy;
- unsigned char icewall_walk_block;
- uint8 dir;
- struct block_list *bl;
- struct map_session_data *sd;
- struct mob_data *md;
- struct unit_data *ud;
- struct mercenary_data *mrd;
+ nullpo_retr(1, master_bl);
+ nullpo_retr(1, slave_bl);
+ int64 *masterteleport_timer;
+ struct homun_data *hd = BL_CAST(BL_HOM, slave_bl);
+ struct mercenary_data *md = BL_CAST(BL_MER, slave_bl);
+
+ bool check = true;
+ if (hd != NULL) {
+ masterteleport_timer = &hd->masterteleport_timer;
+ check = homun_alive(hd);
+ } else if (md != NULL) {
+ masterteleport_timer = &md->masterteleport_timer;
+ } else {
+ return 1;
+ }
- bl = map->id2bl(id);
- if(bl == NULL)
- return 0;
- sd = BL_CAST(BL_PC, bl);
- md = BL_CAST(BL_MOB, bl);
- mrd = BL_CAST(BL_MER, bl);
- ud = unit->bl2ud(bl);
+ if (check && !check_distance_bl(master_bl, slave_bl, MAX_MER_DISTANCE)) {
+ if (*masterteleport_timer == 0) {
+ *masterteleport_timer = timer->gettick();
+ return 0;
+ } else if (DIFF_TICK(timer->gettick(), *masterteleport_timer) > 3000) {
+ unit->warp(slave_bl, master_bl->m, master_bl->x, master_bl->y, CLR_TELEPORT);
+ }
+ }
+ *masterteleport_timer = 0; // resets tick in case he isn't far anymore.
- if(ud == NULL) return 0;
+ return 0;
+}
+
+/**
+ * Timer for walking to target coordinates or object.
+ * @param tid: timer id
+ * @param tick: tick
+ * @param id: id of bl to do the action
+ * @param data: unused
+ * @return 0: success, 1: fail
+ */
+static int unit_walk_toxy_timer(int tid, int64 tick, int id, intptr_t data)
+{
+ struct block_list *bl = map->id2bl(id);
+ if (bl == NULL)
+ return 1;
+ struct unit_data *ud = unit->bl2ud(bl);
+ if (ud == NULL)
+ return 1;
- if(ud->walktimer != tid){
+ if (ud->walktimer != tid) {
ShowError("unit_walk_timer mismatch %d != %d\n",ud->walktimer,tid);
- return 0;
+ return 1;
}
+
ud->walktimer = INVALID_TIMER;
- if (bl->prev == NULL) return 0; // Stop moved because it is missing from the block_list
- if(ud->walkpath.path_pos>=ud->walkpath.path_len)
- return 0;
+ if (bl->prev == NULL) // Stop moved because it is missing from the block_list.
+ return 1;
- if(ud->walkpath.path[ud->walkpath.path_pos]>=8)
+ if (ud->walkpath.path_pos >= ud->walkpath.path_len)
return 1;
- x = bl->x;
- y = bl->y;
- dir = ud->walkpath.path[ud->walkpath.path_pos];
+ enum unit_dir dir = ud->walkpath.path[ud->walkpath.path_pos];
+ Assert_retr(1, dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX);
+ int x = bl->x;
+ int y = bl->y;
+
ud->dir = dir;
- dx = dirx[(int)dir];
- dy = diry[(int)dir];
+ int dx = dirx[dir];
+ int dy = diry[dir];
- //Get icewall walk block depending on boss mode (players can't be trapped)
- if(md && md->status.mode&MD_BOSS)
- icewall_walk_block = battle_config.boss_icewall_walk_block;
- else if(md)
- icewall_walk_block = battle_config.mob_icewall_walk_block;
- else
- icewall_walk_block = 0;
+ // Get icewall walk block depending on boss mode (players can't be trapped)
+ unsigned char icewall_walk_block = 0;
+ struct mob_data *md = BL_CAST(BL_MOB, bl);
+ if (md != NULL) {
+ if ((md->status.mode & MD_BOSS) != 0)
+ icewall_walk_block = battle_config.boss_icewall_walk_block;
+ else
+ icewall_walk_block = battle_config.mob_icewall_walk_block;
+ }
- //Monsters will walk into an icewall from the west and south if they already started walking
+ // Monsters will walk into an icewall from the west and south if they already started walking
if (map->getcell(bl->m, bl, x + dx, y + dy, CELL_CHKNOPASS)
&& (icewall_walk_block == 0 || !map->getcell(bl->m, bl, x + dx, y + dy, CELL_CHKICEWALL) || dx < 0 || dy < 0))
- return unit->walktoxy_sub(bl);
+ return unit->walk_toxy_sub(bl);
- //Monsters can only leave icewalls to the west and south
- //But if movement fails more than icewall_walk_block times, they can ignore this rule
- if (md && md->walktoxy_fail_count < icewall_walk_block && map->getcell(bl->m, bl, x, y, CELL_CHKICEWALL) && (dx > 0 || dy > 0)) {
- //Needs to be done here so that rudeattack skills are invoked
+ // Monsters can only leave icewalls to the west and south
+ // But if movement fails more than icewall_walk_block times, they can ignore this rule
+ if (md != NULL && md->walktoxy_fail_count < icewall_walk_block && map->getcell(bl->m, bl, x, y, CELL_CHKICEWALL) != 0 && (dx > 0 || dy > 0)) {
+ // Needs to be done here so that rudeattack skills are invoked
md->walktoxy_fail_count++;
clif->fixpos(bl);
- //Monsters in this situation first use a chase skill, then unlock target and then use an idle skill
- if (!(++ud->walk_count%WALK_SKILL_INTERVAL))
+ // Monsters in this situation first use a chase skill, then unlock target and then use an idle skill
+ if ((++ud->walk_count % WALK_SKILL_INTERVAL) == 0)
mob->skill_use(md, tick, -1);
mob->unlocktarget(md, tick);
- if (!(++ud->walk_count%WALK_SKILL_INTERVAL))
+ if ((++ud->walk_count % WALK_SKILL_INTERVAL) != 0)
mob->skill_use(md, tick, -1);
- return 0;
+ return 1;
}
+ struct map_session_data *sd = BL_CAST(BL_PC, bl);
//Refresh view for all those we lose sight
- map->foreachinmovearea(clif->outsight, bl, AREA_SIZE, dx, dy, sd?BL_ALL:BL_PC, bl);
+ map->foreachinmovearea(clif->outsight, bl, AREA_SIZE, dx, dy, (sd != NULL ? BL_ALL : BL_PC), bl);
x += dx;
y += dy;
map->moveblock(bl, x, y, tick);
- ud->walk_count++; //walked cell counter, to be used for walk-triggered skills. [Skotlex]
+ ud->walk_count++; // walked cell counter, to be used for walk-triggered skills. [Skotlex]
status_change_end(bl, SC_ROLLINGCUTTER, INVALID_TIMER); //If you move, you lose your counters. [malufett]
if (bl->x != x || bl->y != y || ud->walktimer != INVALID_TIMER)
- return 0; //map->moveblock has altered the object beyond what we expected (moved/warped it)
+ return 1; // map->moveblock has altered the object beyond what we expected (moved/warped it)
ud->walktimer = -2; // arbitrary non-INVALID_TIMER value to make the clif code send walking packets
- map->foreachinmovearea(clif->insight, bl, AREA_SIZE, -dx, -dy, sd?BL_ALL:BL_PC, bl);
+ map->foreachinmovearea(clif->insight, bl, AREA_SIZE, -dx, -dy, (sd != NULL ? BL_ALL : BL_PC), bl);
ud->walktimer = INVALID_TIMER;
- if(sd) {
- if( sd->touching_id )
- npc->touchnext_areanpc(sd,false);
+ struct mercenary_data *mrd = BL_CAST(BL_MER, bl);
+ if (sd != NULL) {
+ if (sd->touching_id != 0)
+ npc->touchnext_areanpc(sd, false);
if (map->getcell(bl->m, bl, x, y, CELL_CHKNPC)) {
- npc->touch_areanpc(sd,bl->m,x,y);
+ npc->touch_areanpc(sd, bl->m, x, y);
if (bl->prev == NULL) //Script could have warped char, abort remaining of the function.
return 0;
- } else
+ } else {
npc->untouch_areanpc(sd, bl->m, x, y);
-
- if( sd->md ) { // mercenary should be warped after being 3 seconds too far from the master [greenbox]
- if( !check_distance_bl(&sd->bl, &sd->md->bl, MAX_MER_DISTANCE) ) {
- if (sd->md->masterteleport_timer == 0)
- sd->md->masterteleport_timer = timer->gettick();
- else if (DIFF_TICK(timer->gettick(), sd->md->masterteleport_timer) > 3000) {
- sd->md->masterteleport_timer = 0;
- unit->warp( &sd->md->bl, sd->bl.m, sd->bl.x, sd->bl.y, CLR_TELEPORT );
- }
- } else // reset the tick, he is not far anymore
- sd->md->masterteleport_timer = 0;
- }
- if( sd->hd ) {
- if( homun_alive(sd->hd) && !check_distance_bl(&sd->bl, &sd->hd->bl, MAX_MER_DISTANCE) ) {
- if (sd->hd->masterteleport_timer == 0)
- sd->hd->masterteleport_timer = timer->gettick();
- else if (DIFF_TICK(timer->gettick(), sd->hd->masterteleport_timer) > 3000) {
- sd->hd->masterteleport_timer = 0;
- unit->warp( &sd->hd->bl, sd->bl.m, sd->bl.x, sd->bl.y, CLR_TELEPORT );
- }
- } else
- sd->hd->masterteleport_timer = 0;
}
+
+ if (sd->md != NULL) // mercenary should be warped after being 3 seconds too far from the master [greenbox]
+ unit->warpto_master(bl, &sd->md->bl);
+ if (sd->hd != NULL)
+ unit->warpto_master(bl, &sd->hd->bl);
} else if (md) {
- //Movement was successful, reset walktoxy_fail_count
+ // Movement was successful, reset walktoxy_fail_count
md->walktoxy_fail_count = 0;
- if (map->getcell(bl->m, bl, x, y, CELL_CHKNPC)) {
- if( npc->touch_areanpc2(md) ) return 0; // Warped
- } else
+
+ if (map->getcell(bl->m, bl, x, y, CELL_CHKNPC) != 0 && npc->touch_areanpc2(md))
+ return 0; // Warped
+ else
md->areanpc_id = 0;
- if (md->min_chase > md->db->range3) md->min_chase--;
- //Walk skills are triggered regardless of target due to the idle-walk mob state.
- //But avoid triggering on stop-walk calls.
- if (tid != INVALID_TIMER
- && !(ud->walk_count%WALK_SKILL_INTERVAL)
- && map->list[bl->m].users > 0
- && mob->skill_use(md, tick, -1)
- ) {
+
+ if (md->min_chase > md->db->range3)
+ md->min_chase--;
+ // Walk skills are triggered regardless of target due to the idle-walk mob state.
+ // But avoid triggering on stop-walk calls.
+ if (tid != INVALID_TIMER && (ud->walk_count % WALK_SKILL_INTERVAL) == 0
+ && map->list[bl->m].users > 0 && mob->skill_use(md, tick, -1) == 0) {
+ // Walk skills are supposed to be used while walking
if (!(ud->skill_id == NPC_SELFDESTRUCTION && ud->skilltimer != INVALID_TIMER)
- && md->state.skillstate != MSS_WALK //Walk skills are supposed to be used while walking
- ) {
- //Skill used, abort walking
- clif->fixpos(bl); //Fix position as walk has been canceled.
- return 0;
+ && md->state.skillstate != MSS_WALK) {
+ // Skill used, abort walking
+ clif->fixpos(bl); // Fix position as walk has been canceled.
+ return 1;
}
- //Resend walk packet for proper Self Destruction display.
+ // Resend walk packet for proper Self Destruction display.
clif->move(ud);
}
- }
- else if( mrd && mrd->master )
- {
- if (!check_distance_bl(&mrd->master->bl, bl, MAX_MER_DISTANCE))
- {
- // mercenary should be warped after being 3 seconds too far from the master [greenbox]
- if (mrd->masterteleport_timer == 0)
- {
- mrd->masterteleport_timer = timer->gettick();
- }
- else if (DIFF_TICK(timer->gettick(), mrd->masterteleport_timer) > 3000)
- {
- mrd->masterteleport_timer = 0;
- unit->warp( bl, mrd->master->bl.m, mrd->master->bl.x, mrd->master->bl.y, CLR_TELEPORT );
- }
- }
- else
- {
- mrd->masterteleport_timer = 0;
- }
+ } else if (mrd != NULL && mrd->master != NULL) {
+ unit->warpto_master(&mrd->master->bl, bl);
}
- if(tid == INVALID_TIMER) //A directly invoked timer is from battle_stop_walking, therefore the rest is irrelevant.
+ if(tid == INVALID_TIMER) // A directly invoked timer is from battle_stop_walking, therefore the rest is irrelevant.
return 0;
- //If stepaction is set then we remembered a client request that should be executed on the next step
- if (ud->stepaction && ud->target_to) {
- //Delete old stepaction even if not executed yet, the latest command is what counts
- if(ud->steptimer != INVALID_TIMER) {
- timer->delete(ud->steptimer, unit->step_timer);
+ // If stepaction is set then we remembered a client request that should be executed on the next step
+ if (ud->stepaction && ud->target_to != 0) {
+ // Delete old stepaction even if not executed yet, the latest command is what counts
+ if (ud->steptimer != INVALID_TIMER) {
+ timer->delete(ud->steptimer, unit->steptimer);
ud->steptimer = INVALID_TIMER;
}
- //Delay stepactions by half a step (so they are executed at full step)
- if(ud->walkpath.path[ud->walkpath.path_pos]&1)
- i = status->get_speed(bl)*14/20;
+ // Delay stepactions by half a step (so they are executed at full step)
+ int timer_delay;
+ if ((ud->walkpath.path[ud->walkpath.path_pos] & 1) != 0)
+ timer_delay = status->get_speed(bl) * 14 / 20;
else
- i = status->get_speed(bl)/2;
- ud->steptimer = timer->add(tick+i, unit->step_timer, bl->id, 0);
+ timer_delay = status->get_speed(bl) / 2;
+ ud->steptimer = timer->add(tick + timer_delay, unit->steptimer, bl->id, 0);
}
- if(ud->state.change_walk_target) {
- if(unit->walktoxy_sub(bl)) {
- return 1;
- } else {
- clif->fixpos(bl);
+ if (ud->state.change_walk_target) {
+ if (unit->walk_toxy_sub(bl) == 0)
return 0;
- }
+ clif->fixpos(bl);
+ return 1;
}
+ int timer_delay;
ud->walkpath.path_pos++;
if(ud->walkpath.path_pos>=ud->walkpath.path_len)
- i = -1;
- else if(ud->walkpath.path[ud->walkpath.path_pos]&1)
- i = status->get_speed(bl)*14/10;
+ timer_delay = -1;
+ else if ((ud->walkpath.path[ud->walkpath.path_pos] & 1) != 0)
+ timer_delay = status->get_speed(bl) * 14 / 10;
else
- i = status->get_speed(bl);
+ timer_delay = status->get_speed(bl);
- if(i > 0) {
- ud->walktimer = timer->add(tick+i,unit->walktoxy_timer,id,i);
- if( md && DIFF_TICK(tick,md->dmgtick) < 3000 )//not required not damaged recently
+ if (timer_delay > 0) {
+ ud->walktimer = timer->add(tick + timer_delay, unit->walk_toxy_timer, id, 0);
+ if (md != NULL && DIFF_TICK(tick, md->dmgtick) < 3000) // not required not damaged recently
clif->move(ud);
- } else if(ud->state.running) {
- //Keep trying to run.
- if ( !(unit->run(bl, NULL, SC_RUN) || unit->run(bl, sd, SC_WUGDASH)) )
+ } else if (ud->state.running != 0) {
+ // Keep trying to run.
+ if (!(unit->run(bl, NULL, SC_RUN) || unit->run(bl, sd, SC_WUGDASH)))
ud->state.running = 0;
- } else if (!ud->stepaction && ud->target_to) {
- //Update target trajectory.
+ } else if (!ud->stepaction && ud->target_to != 0) {
+ // Update target trajectory.
struct block_list *tbl = map->id2bl(ud->target_to);
- if (!tbl || !status->check_visibility(bl, tbl)) {
- //Cancel chase.
+ if (tbl == NULL || status->check_visibility(bl, tbl) == 0) { // not visible
+ // Cancel chase.
ud->to_x = bl->x;
ud->to_y = bl->y;
- if (tbl && bl->type == BL_MOB && mob->warpchase(BL_UCAST(BL_MOB, bl), tbl))
+ if (tbl != NULL && bl->type == BL_MOB && mob->warpchase(BL_UCAST(BL_MOB, bl), tbl) != 0)
return 0;
ud->target_to = 0;
- return 0;
+ return 1;
}
if (tbl->m == bl->m && check_distance_bl(bl, tbl, ud->chaserange)) {
//Reached destination.
@@ -466,81 +514,106 @@ static int unit_walktoxy_timer(int tid, int64 tick, int id, intptr_t data)
clif->fixpos(bl);
unit->attack(bl, tbl->id, ud->state.attack_continue);
}
- } else { //Update chase-path
- unit->walktobl(bl, tbl, ud->chaserange, ud->state.walk_easy|(ud->state.attack_continue? 1 : 0));
+ } else { // Update chase-path
+ unit->walktobl(bl, tbl, ud->chaserange, ud->state.walk_easy | ud->state.attack_continue);
return 0;
}
} else {
- //Stopped walking. Update to_x and to_y to current location [Skotlex]
+ // Stopped walking. Update to_x and to_y to current location [Skotlex]
ud->to_x = bl->x;
ud->to_y = bl->y;
- if (battle_config.official_cell_stack_limit && map->count_oncell(bl->m, x, y, BL_CHAR|BL_NPC, 0x1 | 0x2) > battle_config.official_cell_stack_limit) {
- //Walked on occupied cell, call unit_walktoxy again
- if(ud->steptimer != INVALID_TIMER) {
- //Execute step timer on next step instead
- timer->delete(ud->steptimer, unit->step_timer);
+ if (battle_config.official_cell_stack_limit != 0 && map->count_oncell(bl->m, x, y, BL_CHAR | BL_NPC, 0x1 | 0x2) > battle_config.official_cell_stack_limit) {
+ // Walked on occupied cell, call unit->walk_toxy again
+ if (ud->steptimer != INVALID_TIMER) {
+ // Execute step timer on next step instead
+ timer->delete(ud->steptimer, unit->steptimer);
ud->steptimer = INVALID_TIMER;
}
- return unit->walktoxy(bl, x, y, 8);
+ return unit->walk_toxy(bl, x, y, 8);
}
}
return 0;
}
-static int unit_delay_walktoxy_timer(int tid, int64 tick, int id, intptr_t data)
+/**
+ * Timer for delayed execution of unit->walk_toxy once triggered
+ * @param tid: Timer ID, unused
+ * @param tick: Tick, unused
+ * @param id: ID of block_list to execute the action
+ * @param data: uint32 data cast to intptr_t with x-coord in lowest 16 bits and y-coord in highest 16 bits
+ * @return 0: success, 1: failure
+ */
+static int unit_delay_walk_toxy_timer(int tid, int64 tick, int id, intptr_t data)
{
struct block_list *bl = map->id2bl(id);
-
- if (!bl || bl->prev == NULL)
- return 0;
- unit->walktoxy(bl, (short)((data>>16)&0xffff), (short)(data&0xffff), 0);
- return 1;
+ if (bl == NULL || bl->prev == NULL)
+ return 1;
+ short x = (short)GetWord((uint32)data, 0);
+ short y = (short)GetWord((uint32)data, 1);
+ unit->walk_toxy(bl, x, y, 0);
+ return 0;
}
-//flag parameter:
-//&1 -> 1/0 = easy/hard
-//&2 -> force walking
-//&4 -> Delay walking if the reason you can't walk is the canwalk delay
-//&8 -> Search for an unoccupied cell and cancel if none available
-static int unit_walktoxy(struct block_list *bl, short x, short y, int flag)
+/**
+ * Makes a unit walk to (x, y) coordinates
+ * @param bl: block_list of unit to move
+ * @param x: x-coordinate
+ * @param y: y-coordinate
+ * @param flag: flag paramater with following options:
+ * - `& 1` -> 1/0 = easy / hard
+ * - `& 2` -> Force walking
+ * - `& 4` -> Delay walking, if the reason you can't walk is the `canwalk delay`
+ * - `& 8` -> Search for an unoccupied cell and cancel if none available
+ * .
+ * @return 0: success, 1: failure
+ */
+static int unit_walk_toxy(struct block_list *bl, short x, short y, int flag)
{
+ // TODO: change flag to enum? [skyleo]
struct unit_data* ud = NULL;
struct status_change* sc = NULL;
struct walkpath_data wpd;
- nullpo_ret(bl);
+ nullpo_retr(1, bl);
ud = unit->bl2ud(bl);
- if( ud == NULL) return 0;
+ if (ud == NULL)
+ return 1;
- if (battle_config.check_occupied_cells && (flag&8) && !map->closest_freecell(bl->m, bl, &x, &y, BL_CHAR|BL_NPC, 1)) //This might change x and y
- return 0;
+ if ((flag & 8) != 0 && battle_config.check_occupied_cells != 0) {
+ if (!map->closest_freecell(bl->m, bl, &x, &y, BL_CHAR | BL_NPC, 1)) // This might change x and y
+ return 1;
+ }
- if (!path->search(&wpd, bl, bl->m, bl->x, bl->y, x, y, flag&1, CELL_CHKNOPASS)) // Count walk path cells
- return 0;
+ if (!path->search(&wpd, bl, bl->m, bl->x, bl->y, x, y, flag & 1, CELL_CHKNOPASS)) // Count walk path cells
+ return 1;
+ if (bl->type != BL_NPC) {
#ifdef OFFICIAL_WALKPATH
- if( !path->search_long(NULL, bl, bl->m, bl->x, bl->y, x, y, CELL_CHKNOPASS) // Check if there is an obstacle between
- && (wpd.path_len > (battle_config.max_walk_path/17)*14) // Official number of walkable cells is 14 if and only if there is an obstacle between. [malufett]
- && (bl->type != BL_NPC) ) // If type is a NPC, please disregard.
- return 0;
+ // Check if there is an obstacle between
+ // Official number of walkable cells is 14 if and only if there is an obstacle between. [malufett]
+ if (!path->search_long(NULL, bl, bl->m, bl->x, bl->y, x, y, CELL_CHKNOPASS)
+ && (wpd.path_len > (battle_config.max_walk_path / 17) * 14))
+ return 1;
#endif
- if ((wpd.path_len > battle_config.max_walk_path) && (bl->type != BL_NPC))
- return 0;
+ if (wpd.path_len > battle_config.max_walk_path)
+ return 1;
+ }
- if (flag&4 && DIFF_TICK(ud->canmove_tick, timer->gettick()) > 0 &&
- DIFF_TICK(ud->canmove_tick, timer->gettick()) < 2000) {
+ if ((flag & 4) != 0 && DIFF_TICK(ud->canmove_tick, timer->gettick()) > 0
+ && DIFF_TICK(ud->canmove_tick, timer->gettick()) < 2000) {
// Delay walking command. [Skotlex]
- timer->add(ud->canmove_tick+1, unit->delay_walktoxy_timer, bl->id, (x<<16)|(y&0xFFFF));
- return 1;
+ timer->add(ud->canmove_tick + 1, unit->delay_walk_toxy_timer, bl->id,
+ (intptr_t)MakeDWord((uint16)x, (uint16)y));
+ return 0;
}
- if(!(flag&2) && (!(status_get_mode(bl)&MD_CANMOVE) || !unit->can_move(bl)))
- return 0;
+ if ((flag & 2) == 0 && ((status_get_mode(bl) & MD_CANMOVE) == 0 || unit->can_move(bl) == 0))
+ return 1;
- ud->state.walk_easy = flag&1;
+ ud->state.walk_easy = flag & 1;
ud->to_x = x;
ud->to_y = y;
unit->stop_attack(bl); //Sets target to 0
@@ -548,44 +621,63 @@ static int unit_walktoxy(struct block_list *bl, short x, short y, int flag)
unit->stop_stepaction(bl); // unit->walktoxy removes any remembered stepaction and resets ud->target_to
sc = status->get_sc(bl);
- if( sc ) {
- if( sc->data[SC_CONFUSION] || sc->data[SC__CHAOS] ) //Randomize the target position
+ if (sc != NULL) {
+ if (sc->data[SC_CONFUSION] != NULL || sc->data[SC__CHAOS] != NULL) // Randomize the target position
map->random_dir(bl, &ud->to_x, &ud->to_y);
- if( sc->data[SC_COMBOATTACK] )
+ if (sc->data[SC_COMBOATTACK] != NULL)
status_change_end(bl, SC_COMBOATTACK, INVALID_TIMER);
}
- if(ud->walktimer != INVALID_TIMER) {
+ if (ud->walktimer != INVALID_TIMER) {
// When you come to the center of the grid because the change of destination while you're walking right now
- // Call a function from a timer unit->walktoxy_sub
+ // Call a function from a timer unit->walk_toxy_sub
ud->state.change_walk_target = 1;
- return 1;
+ return 0;
}
- return unit->walktoxy_sub(bl);
+ return unit->walk_toxy_sub(bl);
}
-//To set Mob's CHASE/FOLLOW states (shouldn't be done if there's no path to reach)
-static inline void set_mobstate(struct block_list *bl, int flag)
+/**
+ * Sets CHASE / FOLLOW states, in case bl is a mob.
+ * WARNING: This shouldn't be done if there's no path to reach
+ * @param bl: block_list of mob
+ */
+static inline void set_mobstate(struct block_list *bl)
{
- struct mob_data* md = BL_CAST(BL_MOB,bl);
+ struct mob_data* md = BL_CAST(BL_MOB, bl);
- if( md && flag )
- md->state.skillstate = md->state.aggressive ? MSS_FOLLOW : MSS_RUSH;
+ if (md != NULL) {
+ if (md->state.aggressive != 0)
+ md->state.skillstate = MSS_FOLLOW;
+ else
+ md->state.skillstate = MSS_RUSH;
+ }
}
-static int unit_walktobl_sub(int tid, int64 tick, int id, intptr_t data)
+/**
+ * Timer used for when a unit can't walk towards its target yet due to it's canmove_tick,
+ * keeps retrying until it works or target changes.
+ * @param tid: Timer ID, unused
+ * @param tick: Tick, unused
+ * @param id: ID of block_list to execute the action
+ * @param data: ID of block_list to walk towards
+ * @return 0: success, 1: failure
+ */
+static int unit_walktobl_timer(int tid, int64 tick, int id, intptr_t data)
{
struct block_list *bl = map->id2bl(id);
- struct unit_data *ud = bl?unit->bl2ud(bl):NULL;
-
- if (ud && ud->walktimer == INVALID_TIMER && ud->target == data) {
- if (DIFF_TICK(ud->canmove_tick, tick) > 0) //Keep waiting?
- timer->add(ud->canmove_tick+1, unit->walktobl_sub, id, data);
- else if (unit->can_move(bl)) {
- if (unit->walktoxy_sub(bl))
- set_mobstate(bl, ud->state.attack_continue);
- }
+ if (bl == NULL)
+ return 1;
+ struct unit_data *ud = unit->bl2ud(bl);
+ if (ud == NULL)
+ return 1;
+
+ if (ud->walktimer == INVALID_TIMER && ud->target == data) {
+ if (DIFF_TICK(ud->canmove_tick, tick) > 0) // Keep waiting?
+ timer->add(ud->canmove_tick + 1, unit->walktobl_timer, id, data);
+ else if (unit->can_move(bl) != 0 && unit->walk_toxy_sub(bl) == 0 && ud->state.attack_continue != 0)
+ set_mobstate(bl);
}
return 0;
}
@@ -629,23 +721,27 @@ static int unit_walktobl(struct block_list *bl, struct block_list *tbl, int rang
if(ud->walktimer != INVALID_TIMER) {
ud->state.change_walk_target = 1;
- set_mobstate(bl, flag&2);
+ if ((flag & 2) != 0)
+ set_mobstate(bl);
return 1;
}
if (DIFF_TICK(ud->canmove_tick, timer->gettick()) > 0) {
//Can't move, wait a bit before invoking the movement.
- timer->add(ud->canmove_tick+1, unit->walktobl_sub, bl->id, ud->target);
+ timer->add(ud->canmove_tick + 1, unit->walktobl_timer, bl->id, ud->target);
return 1;
}
if(!unit->can_move(bl))
return 0;
- if (unit->walktoxy_sub(bl)) {
- set_mobstate(bl, flag&2);
+ if (unit->walk_toxy_sub(bl) == 0) {
+ if ((flag & 2) != 0)
+ set_mobstate(bl);
+
return 1;
}
+
return 0;
}
@@ -732,14 +828,14 @@ static bool unit_run(struct block_list *bl, struct map_session_data *sd, enum sc
return false;
}
- if( unit->walktoxy(bl, to_x, to_y, 1) )
+ if (unit->walk_toxy(bl, to_x, to_y, 1) == 0)
return true;
//There must be an obstacle nearby. Attempt walking one cell at a time.
do {
to_x -= dir_x;
to_y -= dir_y;
- } while (--i > 0 && !unit->walktoxy(bl, to_x, to_y, 1));
+ } while (--i > 0 && unit->walk_toxy(bl, to_x, to_y, 1) != 0);
if ( i == 0 ) {
unit->run_hit(bl, sc, sd, type);
@@ -752,19 +848,21 @@ static bool unit_run(struct block_list *bl, struct map_session_data *sd, enum sc
//Makes bl attempt to run dist cells away from target. Uses hard-paths.
static int unit_escape(struct block_list *bl, struct block_list *target, short dist)
{
- uint8 dir;
nullpo_ret(bl);
- dir = map->calc_dir(target, bl->x, bl->y);
+ enum unit_dir dir = map->calc_dir(target, bl->x, bl->y);
+ Assert_retr(1, dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX);
while (dist > 0 && map->getcell(bl->m, bl, bl->x + dist * dirx[dir], bl->y + dist * diry[dir], CELL_CHKNOREACH))
dist--;
- return ( dist > 0 && unit->walktoxy(bl, bl->x + dist*dirx[dir], bl->y + dist*diry[dir], 0) );
+ if (dist > 0 && unit->walk_toxy(bl, bl->x + dist * dirx[dir], bl->y + dist * diry[dir], 0) == 0)
+ return 1;
+ else
+ return 0;
}
//Instant warp function.
static int unit_movepos(struct block_list *bl, short dst_x, short dst_y, int easy, bool checkpath)
{
short dx,dy;
- uint8 dir;
struct unit_data *ud = NULL;
struct map_session_data *sd = NULL;
@@ -783,7 +881,7 @@ static int unit_movepos(struct block_list *bl, short dst_x, short dst_y, int eas
ud->to_x = dst_x;
ud->to_y = dst_y;
- dir = map->calc_dir(bl, dst_x, dst_y);
+ enum unit_dir dir = map->calc_dir(bl, dst_x, dst_y);
ud->dir = dir;
dx = dst_x - bl->x;
@@ -807,7 +905,7 @@ static int unit_movepos(struct block_list *bl, short dst_x, short dst_y, int eas
} else
npc->untouch_areanpc(sd, bl->m, bl->x, bl->y);
- if( sd->status.pet_id > 0 && sd->pd && sd->pd->pet.intimate > 0 )
+ if (sd->status.pet_id > 0 && sd->pd && sd->pd->pet.intimate > PET_INTIMACY_NONE)
{ // Check if pet needs to be teleported. [Skotlex]
int flag = 0;
struct block_list* pbl = &sd->pd->bl;
@@ -825,12 +923,18 @@ static int unit_movepos(struct block_list *bl, short dst_x, short dst_y, int eas
return 1;
}
-static int unit_setdir(struct block_list *bl, unsigned char dir)
+/**
+ * Sets the facing direction of a unit
+ * @param bl: unit to modify
+ * @param dir: the facing direction @see enum unit_dir
+ * @return 0: success, 1: failure
+ */
+static int unit_set_dir(struct block_list *bl, enum unit_dir dir)
{
- struct unit_data *ud;
- nullpo_ret(bl );
- ud = unit->bl2ud(bl);
- if (!ud) return 0;
+ nullpo_retr(1, bl);
+ struct unit_data *ud = unit->bl2ud(bl);
+ if (ud == NULL)
+ return 1;
ud->dir = dir;
if (bl->type == BL_PC)
BL_UCAST(BL_PC, bl)->head_dir = 0;
@@ -838,15 +942,20 @@ static int unit_setdir(struct block_list *bl, unsigned char dir)
return 0;
}
-static uint8 unit_getdir(struct block_list *bl)
+/**
+ * Get the facing direction of a unit
+ * @param bl: unit to request data from
+ * @return the facing direction @see enum unit_dir
+ */
+static enum unit_dir unit_getdir(const struct block_list *bl)
{
- struct unit_data *ud;
- nullpo_ret(bl);
+ nullpo_retr(UNIT_DIR_NORTH, bl);
- if( bl->type == BL_NPC )
+ if (bl->type == BL_NPC)
return BL_UCCAST(BL_NPC, bl)->dir;
- ud = unit->bl2ud(bl);
- if (!ud) return 0;
+ const struct unit_data *ud = unit->cbl2ud(bl);
+ if (ud == NULL)
+ return UNIT_DIR_NORTH;
return ud->dir;
}
@@ -1010,7 +1119,7 @@ static int unit_stop_walking(struct block_list *bl, int flag)
//timer->delete function does not messes with it. If the function's
//behavior changes in the future, this code could break!
td = timer->get(ud->walktimer);
- timer->delete(ud->walktimer, unit->walktoxy_timer);
+ timer->delete(ud->walktimer, unit->walk_toxy_timer);
ud->walktimer = INVALID_TIMER;
ud->state.change_walk_target = 0;
tick = timer->gettick();
@@ -1018,7 +1127,7 @@ static int unit_stop_walking(struct block_list *bl, int flag)
|| (flag&STOPWALKING_FLAG_NEXTCELL && td && DIFF_TICK(td->tick, tick) <= td->data/2) //Enough time has passed to cover half-cell
) {
ud->walkpath.path_len = ud->walkpath.path_pos+1;
- unit->walktoxy_timer(INVALID_TIMER, tick, bl->id, ud->walkpath.path_pos);
+ unit->walk_toxy_timer(INVALID_TIMER, tick, bl->id, ud->walkpath.path_pos);
}
if(flag&STOPWALKING_FLAG_FIXPOS)
@@ -1042,12 +1151,13 @@ static int unit_stop_walking(struct block_list *bl, int flag)
static int unit_skilluse_id(struct block_list *src, int target_id, uint16 skill_id, uint16 skill_lv)
{
int casttime = skill->cast_fix(src, skill_id, skill_lv);
- int castcancel = skill->get_castcancel(skill_id);
+ int castcancel = skill->get_castcancel(skill_id, skill_lv);
int ret = unit->skilluse_id2(src, target_id, skill_id, skill_lv, casttime, castcancel);
struct map_session_data *sd = BL_CAST(BL_PC, src);
if (sd != NULL)
- pc->itemskill_clear(sd);
+ pc->autocast_remove(sd, sd->auto_cast_current.type, sd->auto_cast_current.skill_id,
+ sd->auto_cast_current.skill_lv);
return ret;
}
@@ -1235,7 +1345,7 @@ static int unit_set_walkdelay(struct block_list *bl, int64 tick, int delay, int
} else {
unit->stop_walking(bl, STOPWALKING_FLAG_NEXTCELL);
if (ud->target)
- timer->add(ud->canmove_tick+1, unit->walktobl_sub, bl->id, ud->target);
+ timer->add(ud->canmove_tick + 1, unit->walktobl_timer, bl->id, ud->target);
}
}
}
@@ -1450,13 +1560,13 @@ static int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill
ud->target_to = target_id;
ud->stepskill_id = skill_id;
ud->stepskill_lv = skill_lv;
- return 0; // Attacking will be handled by unit_walktoxy_timer in this case
+ return 0; // Attacking will be handled by unit_walk_toxy_timer in this case
}
//Check range when not using skill on yourself or is a combo-skill during attack
//(these are supposed to always have the same range as your attack)
if( src->id != target_id && (!temp || ud->attacktimer == INVALID_TIMER) ) {
- if( skill->get_state(ud->skill_id) == ST_MOVE_ENABLE ) {
+ if (skill->get_state(skill_id, skill_lv) == ST_MOVE_ENABLE) {
if( !unit->can_reach_bl(src, target, range + 1, 1, NULL, NULL) )
return 0; // Walk-path check failed.
} else if( src->type == BL_MER && skill_id == MA_REMOVETRAP ) {
@@ -1606,7 +1716,7 @@ static int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill
if (!ud->state.running) //need TK_RUN or WUGDASH handler to be done before that, see bugreport:6026
unit->stop_walking(src, STOPWALKING_FLAG_FIXPOS);// even though this is not how official works but this will do the trick. bugreport:6829
- if (sd != NULL && sd->state.itemskill_no_casttime == 1 && skill->is_item_skill(sd, skill_id, skill_lv))
+ if (sd != NULL && sd->auto_cast_current.itemskill_instant_cast && sd->auto_cast_current.type == AUTOCAST_ITEM)
casttime = 0;
// in official this is triggered even if no cast time.
@@ -1644,7 +1754,7 @@ static int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill
if( casttime <= 0 )
ud->state.skillcastcancel = 0;
- if( !sd || sd->skillitem != skill_id || skill->get_cast(skill_id,skill_lv) )
+ if (sd == NULL || sd->auto_cast_current.type < AUTOCAST_ABRA || skill->get_cast(skill_id, skill_lv) != 0)
ud->canact_tick = tick + casttime + 100;
if( sd )
{
@@ -1663,7 +1773,7 @@ static int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill
if( casttime > 0 ) {
if (src->id != target->id) // self-targeted skills shouldn't show different direction
- unit->setdir(src, map->calc_dir(src, target->x, target->y));
+ unit->set_dir(src, map->calc_dir(src, target->x, target->y));
ud->skilltimer = timer->add( tick+casttime, skill->castend_id, src->id, 0 );
if (sd && (pc->checkskill(sd, SA_FREECAST) > 0 || skill_id == LG_EXEEDBREAK || (skill->get_inf2(ud->skill_id) & INF2_FREE_CAST_REDUCED) != 0))
status_calc_bl(&sd->bl, SCB_SPEED|SCB_ASPD);
@@ -1679,12 +1789,13 @@ static int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill
static int unit_skilluse_pos(struct block_list *src, short skill_x, short skill_y, uint16 skill_id, uint16 skill_lv)
{
int casttime = skill->cast_fix(src, skill_id, skill_lv);
- int castcancel = skill->get_castcancel(skill_id);
+ int castcancel = skill->get_castcancel(skill_id, skill_lv);
int ret = unit->skilluse_pos2(src, skill_x, skill_y, skill_id, skill_lv, casttime, castcancel);
struct map_session_data *sd = BL_CAST(BL_PC, src);
if (sd != NULL)
- pc->itemskill_clear(sd);
+ pc->autocast_remove(sd, sd->auto_cast_current.type, sd->auto_cast_current.skill_id,
+ sd->auto_cast_current.skill_lv);
return ret;
}
@@ -1757,10 +1868,10 @@ static int unit_skilluse_pos2(struct block_list *src, short skill_x, short skill
ud->target_to = (skill_x + skill_y*md->xs);
ud->stepskill_id = skill_id;
ud->stepskill_lv = skill_lv;
- return 0; // Attacking will be handled by unit_walktoxy_timer in this case
+ return 0; // Attacking will be handled by unit_walk_toxy_timer in this case
}
- if( skill->get_state(ud->skill_id) == ST_MOVE_ENABLE ) {
+ if (skill->get_state(skill_id, skill_lv) == ST_MOVE_ENABLE) {
if( !unit->can_reach_bl(src, &bl, range + 1, 1, NULL, NULL) )
return 0; //Walk-path check failed.
} else if( !battle->check_range(src, &bl, range) )
@@ -1781,7 +1892,7 @@ static int unit_skilluse_pos2(struct block_list *src, short skill_x, short skill
}
ud->state.skillcastcancel = castcancel&&casttime>0?1:0;
- if( !sd || sd->skillitem != skill_id || skill->get_cast(skill_id,skill_lv) )
+ if (sd == NULL || sd->auto_cast_current.type < AUTOCAST_ABRA || skill->get_cast(skill_id, skill_lv) != 0)
ud->canact_tick = tick + casttime + 100;
#if 0
if (sd) {
@@ -1812,13 +1923,13 @@ static int unit_skilluse_pos2(struct block_list *src, short skill_x, short skill
unit->stop_walking(src, STOPWALKING_FLAG_FIXPOS);
- if (sd != NULL && sd->state.itemskill_no_casttime == 1 && skill->is_item_skill(sd, skill_id, skill_lv))
+ if (sd != NULL && sd->auto_cast_current.itemskill_instant_cast && sd->auto_cast_current.type == AUTOCAST_ITEM)
casttime = 0;
// in official this is triggered even if no cast time.
clif->useskill(src, src->id, 0, skill_x, skill_y, skill_id, skill_lv, casttime);
if( casttime > 0 ) {
- unit->setdir(src, map->calc_dir(src, skill_x, skill_y));
+ unit->set_dir(src, map->calc_dir(src, skill_x, skill_y));
ud->skilltimer = timer->add( tick+casttime, skill->castend_pos, src->id, 0 );
if ((sd && pc->checkskill(sd, SA_FREECAST) > 0) || skill_id == LG_EXEEDBREAK || (skill->get_inf2(ud->skill_id) & INF2_FREE_CAST_REDUCED) != 0) {
status_calc_bl(&sd->bl, SCB_SPEED|SCB_ASPD);
@@ -1897,7 +2008,7 @@ static void unit_stop_stepaction(struct block_list *bl)
return;
//Clear timer
- timer->delete(ud->steptimer, unit->step_timer);
+ timer->delete(ud->steptimer, unit->steptimer);
ud->steptimer = INVALID_TIMER;
}
@@ -1981,7 +2092,7 @@ static int unit_attack(struct block_list *src, int target_id, int continuous)
ud->target_to = ud->target;
ud->stepskill_id = 0;
ud->stepskill_lv = 0;
- return 0; // Attacking will be handled by unit_walktoxy_timer in this case
+ return 0; // Attacking will be handled by unit_walk_toxy_timer in this case
}
if(DIFF_TICK(ud->attackabletime, timer->gettick()) > 0)
@@ -2082,14 +2193,13 @@ static bool unit_can_reach_bl(struct block_list *bl, struct block_list *tbl, int
/*==========================================
* Calculates position of Pet/Mercenary/Homunculus/Elemental
*------------------------------------------*/
-static int unit_calc_pos(struct block_list *bl, int tx, int ty, uint8 dir)
+static int unit_calc_pos(struct block_list *bl, int tx, int ty, enum unit_dir dir)
{
int dx, dy, x, y;
struct unit_data *ud = unit->bl2ud(bl);
nullpo_ret(ud);
- if(dir > 7)
- return 1;
+ Assert_retr(1, dir >= UNIT_DIR_FIRST && dir < UNIT_DIR_MAX);
ud->to_x = tx;
ud->to_y = ty;
@@ -2106,7 +2216,7 @@ static int unit_calc_pos(struct block_list *bl, int tx, int ty, uint8 dir)
if (!unit->can_reach_pos(bl, x, y, 0)) {
int i;
for (i = 0; i < 12; i++) {
- int k = rnd()%8; // Pick a Random Dir
+ enum unit_dir k = rnd() % UNIT_DIR_MAX; // Pick a Random Dir
dx = -dirx[k] * 2;
dy = -diry[k] * 2;
x = tx + dx;
@@ -2232,7 +2342,7 @@ static int unit_attack_timer_sub(struct block_list *src, int tid, int64 tick)
if(md) {
//First attack is always a normal attack
if(md->state.skillstate == MSS_ANGRY || md->state.skillstate == MSS_BERSERK) {
- if (mob->skill_use(md,tick,-1)) {
+ if (mob->skill_use(md, tick, -1) == 0) {
map->freeblock_unlock();
return 1;
}
@@ -2272,7 +2382,7 @@ static int unit_attack_timer_sub(struct block_list *src, int tid, int64 tick)
}
if(ud->state.attack_continue) {
- unit->setdir(src, map->calc_dir(src, target->x, target->y));
+ unit->set_dir(src, map->calc_dir(src, target->x, target->y));
if( src->type == BL_PC )
pc->update_idle_time(sd, BCIDLE_ATTACK);
ud->attacktimer = timer->add(ud->attackabletime,unit->attack_timer,src->id,0);
@@ -2617,7 +2727,7 @@ static int unit_remove_map(struct block_list *bl, enum clr_type clrtype, const c
case BL_PET:
{
struct pet_data *pd = BL_UCAST(BL_PET, bl);
- if( pd->pet.intimate <= 0 && !(pd->msd && !pd->msd->state.active) ) {
+ if (pd->pet.intimate <= PET_INTIMACY_NONE && !(pd->msd && !pd->msd->state.active)) {
//If logging out, this is deleted on unit->free
clif->clearunit_area(bl,clrtype);
map->delblock(bl);
@@ -2776,6 +2886,8 @@ static int unit_free(struct block_list *bl, enum clr_type clrtype)
aFree(sd->instance);
sd->instance = NULL;
}
+
+ VECTOR_CLEAR(sd->auto_cast); // Clear auto-cast vector.
VECTOR_CLEAR(sd->channels);
VECTOR_CLEAR(sd->script_queues);
VECTOR_CLEAR(sd->achievement); // Achievement [Smokexyz/Hercules]
@@ -2831,7 +2943,7 @@ static int unit_free(struct block_list *bl, enum clr_type clrtype)
aFree (pd->loot);
pd->loot = NULL;
}
- if (pd->pet.intimate > 0) {
+ if (pd->pet.intimate > PET_INTIMACY_NONE) {
intif->save_petdata(pd->pet.account_id,&pd->pet);
} else {
//Remove pet.
@@ -2969,10 +3081,10 @@ static int do_init_unit(bool minimal)
return 0;
timer->add_func_list(unit->attack_timer, "unit_attack_timer");
- timer->add_func_list(unit->walktoxy_timer,"unit_walktoxy_timer");
- timer->add_func_list(unit->walktobl_sub, "unit_walktobl_sub");
- timer->add_func_list(unit->delay_walktoxy_timer,"unit_delay_walktoxy_timer");
- timer->add_func_list(unit->step_timer,"unit_step_timer");
+ timer->add_func_list(unit->walk_toxy_timer, "unit_walk_toxy_timer");
+ timer->add_func_list(unit->walktobl_timer, "unit_walktobl_timer");
+ timer->add_func_list(unit->delay_walk_toxy_timer, "unit_delay_walk_toxy_timer");
+ timer->add_func_list(unit->steptimer, "unit_steptimer");
return 0;
}
@@ -2990,26 +3102,28 @@ void unit_defaults(void)
unit->final = do_final_unit;
/* */
unit->bl2ud = unit_bl2ud;
+ unit->cbl2ud = unit_cbl2ud;
unit->bl2ud2 = unit_bl2ud2;
unit->init_ud = unit_init_ud;
unit->attack_timer = unit_attack_timer;
- unit->walktoxy_timer = unit_walktoxy_timer;
- unit->walktoxy_sub = unit_walktoxy_sub;
- unit->delay_walktoxy_timer = unit_delay_walktoxy_timer;
- unit->walktoxy = unit_walktoxy;
- unit->walktobl_sub = unit_walktobl_sub;
+ unit->walk_toxy_timer = unit_walk_toxy_timer;
+ unit->walk_toxy_sub = unit_walk_toxy_sub;
+ unit->delay_walk_toxy_timer = unit_delay_walk_toxy_timer;
+ unit->walk_toxy = unit_walk_toxy;
+ unit->walktobl_timer = unit_walktobl_timer;
unit->walktobl = unit_walktobl;
unit->run = unit_run;
unit->run_hit = unit_run_hit;
unit->escape = unit_escape;
unit->movepos = unit_movepos;
- unit->setdir = unit_setdir;
+ unit->set_dir = unit_set_dir;
unit->getdir = unit_getdir;
unit->blown = unit_blown;
unit->warp = unit_warp;
+ unit->warpto_master = unit_warpto_master;
unit->stop_walking = unit_stop_walking;
unit->skilluse_id = unit_skilluse_id;
- unit->step_timer = unit_step_timer;
+ unit->steptimer = unit_steptimer;
unit->stop_stepaction = unit_stop_stepaction;
unit->is_walking = unit_is_walking;
unit->can_move = unit_can_move;
diff --git a/src/map/unit.h b/src/map/unit.h
index 5437a172a..3f288e0d3 100644
--- a/src/map/unit.h
+++ b/src/map/unit.h
@@ -24,6 +24,7 @@
#include "map/clif.h" // clr_type
#include "map/path.h" // struct walkpath_data
#include "map/skill.h" // 'MAX_SKILLTIMERSKILL, struct skill_timerskill, struct skill_unit_group, struct skill_unit_group_tickset
+#include "map/unitdefines.h" // enum unit_dir
#include "common/hercules.h"
struct map_session_data;
@@ -67,7 +68,7 @@ struct unit_data {
int64 attackabletime;
int64 canact_tick;
int64 canmove_tick;
- uint8 dir;
+ enum unit_dir dir;
unsigned char walk_count;
unsigned char target_count;
struct {
@@ -102,26 +103,28 @@ struct unit_interface {
int (*final) (void);
/* */
struct unit_data* (*bl2ud) (struct block_list *bl);
+ const struct unit_data* (*cbl2ud) (const struct block_list *bl);
struct unit_data* (*bl2ud2) (struct block_list *bl);
void (*init_ud) (struct unit_data *ud);
int (*attack_timer) (int tid, int64 tick, int id, intptr_t data);
- int (*walktoxy_timer) (int tid, int64 tick, int id, intptr_t data);
- int (*walktoxy_sub) (struct block_list *bl);
- int (*delay_walktoxy_timer) (int tid, int64 tick, int id, intptr_t data);
- int (*walktoxy) (struct block_list *bl, short x, short y, int flag);
- int (*walktobl_sub) (int tid, int64 tick, int id, intptr_t data);
+ int (*walk_toxy_timer) (int tid, int64 tick, int id, intptr_t data);
+ int (*walk_toxy_sub) (struct block_list *bl);
+ int (*delay_walk_toxy_timer) (int tid, int64 tick, int id, intptr_t data);
+ int (*walk_toxy) (struct block_list *bl, short x, short y, int flag);
+ int (*walktobl_timer) (int tid, int64 tick, int id, intptr_t data);
int (*walktobl) (struct block_list *bl, struct block_list *tbl, int range, int flag);
bool (*run) (struct block_list *bl, struct map_session_data *sd, enum sc_type type);
void (*run_hit) (struct block_list *bl, struct status_change *sc, struct map_session_data *sd, enum sc_type type);
int (*escape) (struct block_list *bl, struct block_list *target, short dist);
int (*movepos) (struct block_list *bl, short dst_x, short dst_y, int easy, bool checkpath);
- int (*setdir) (struct block_list *bl, unsigned char dir);
- uint8 (*getdir) (struct block_list *bl);
+ int (*set_dir) (struct block_list *bl, enum unit_dir dir);
+ enum unit_dir (*getdir) (const struct block_list *bl);
int (*blown) (struct block_list *bl, int dx, int dy, int count, int flag);
int (*warp) (struct block_list *bl, short m, short x, short y, enum clr_type type);
+ int (*warpto_master) (struct block_list *master_bl, struct block_list *slave_bl);
int (*stop_walking) (struct block_list *bl, int type);
int (*skilluse_id) (struct block_list *src, int target_id, uint16 skill_id, uint16 skill_lv);
- int (*step_timer) (int tid, int64 tick, int id, intptr_t data);
+ int (*steptimer) (int tid, int64 tick, int id, intptr_t data);
void (*stop_stepaction) (struct block_list *bl);
int (*is_walking) (struct block_list *bl);
int (*can_move) (struct block_list *bl);
@@ -137,7 +140,7 @@ struct unit_interface {
int (*cancel_combo) (struct block_list *bl);
bool (*can_reach_pos) (struct block_list *bl, int x, int y, int easy);
bool (*can_reach_bl) (struct block_list *bl, struct block_list *tbl, int range, int easy, short *x, short *y);
- int (*calc_pos) (struct block_list *bl, int tx, int ty, uint8 dir);
+ int (*calc_pos) (struct block_list *bl, int tx, int ty, enum unit_dir dir);
int (*attack_timer_sub) (struct block_list *src, int tid, int64 tick);
int (*skillcastcancel) (struct block_list *bl, int type);
void (*dataset) (struct block_list *bl);
diff --git a/src/map/unitdefines.h b/src/map/unitdefines.h
new file mode 100644
index 000000000..0ee30998c
--- /dev/null
+++ b/src/map/unitdefines.h
@@ -0,0 +1,58 @@
+/**
+ * This file is part of Hercules.
+ * http://herc.ws - http://github.com/HerculesWS/Hercules
+ *
+ * Copyright (C) 2012-2019 Hercules Dev Team
+ * Copyright (C) Athena Dev Teams
+ *
+ * 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/>.
+ */
+#ifndef MAP_UNITDEFINES_H
+#define MAP_UNITDEFINES_H
+
+/**
+ * Used for directions, @see unit_data.dir
+ */
+enum unit_dir {
+ UNIT_DIR_UNDEFINED = -1,
+ UNIT_DIR_FIRST = 0,
+ UNIT_DIR_NORTH = 0,
+ UNIT_DIR_NORTHWEST = 1,
+ UNIT_DIR_WEST = 2,
+ UNIT_DIR_SOUTHWEST = 3,
+ UNIT_DIR_SOUTH = 4,
+ UNIT_DIR_SOUTHEAST = 5,
+ UNIT_DIR_EAST = 6,
+ UNIT_DIR_NORTHEAST = 7,
+ UNIT_DIR_MAX = 8,
+ /* IMPORTANT: Changing the order would break the above macros
+ * and several usages of directions anywhere */
+};
+
+/* Returns the opposite of the facing direction */
+#define unit_get_opposite_dir(dir) ( ((dir) + 4) % UNIT_DIR_MAX )
+
+/* Returns true when direction is diagonal/combined (ex. UNIT_DIR_NORTHWEST, UNIT_DIR_SOUTHWEST, ...) */
+#define unit_is_diagonal_dir(dir) ( ((dir) % 2) == UNIT_DIR_NORTHWEST )
+
+/* Returns true if direction equals val or the opposite direction of val */
+#define unit_is_dir_or_opposite(dir, val) ( ((dir) % 4) == (val) )
+
+/* Returns the next direction after 90° CCW on a compass */
+#define unit_get_ccw90_dir(dir) ( ((dir) + 2) % UNIT_DIR_MAX )
+
+/* Returns a random diagonal direction */
+#define unit_get_rnd_diagonal_dir() ( UNIT_DIR_NORTHWEST + 2 * (rnd() % 4) )
+
+#endif /* MAP_UNITDEFINES_H */
diff --git a/src/map/vending.c b/src/map/vending.c
index 4fd009025..9b3f48f38 100644
--- a/src/map/vending.c
+++ b/src/map/vending.c
@@ -251,8 +251,10 @@ static void vending_openvending(struct map_session_data *sd, const char *message
int vending_skill_lvl;
nullpo_retv(sd);
- if ( pc_isdead(sd) || !sd->state.prevend || pc_istrading(sd))
- return; // can't open vendings lying dead || didn't use via the skill (wpe/hack) || can't have 2 shops at once
+ if (pc_isdead(sd) || sd->state.prevend == 0 || pc_istrading_except_npc(sd)
+ || (sd->npc_id != 0 && sd->state.using_megaphone == 0)) {
+ return; // Can't open vendings lying dead. || Didn't use via the skill. (wpe/hack) || Can't have 2 shops at once.
+ }
vending_skill_lvl = pc->checkskill(sd, MC_VENDING);
// skill level and cart check
diff --git a/src/plugins/HPMHooking/HPMHooking.Defs.inc b/src/plugins/HPMHooking/HPMHooking.Defs.inc
index 7996a59f9..60c00e8db 100644
--- a/src/plugins/HPMHooking/HPMHooking.Defs.inc
+++ b/src/plugins/HPMHooking/HPMHooking.Defs.inc
@@ -1410,6 +1410,10 @@ typedef void (*HPMHOOK_pre_clif_chatname_ack) (int *fd, struct block_list **bl);
typedef void (*HPMHOOK_post_clif_chatname_ack) (int fd, struct block_list *bl);
typedef void (*HPMHOOK_pre_clif_elemname_ack) (int *fd, struct block_list **bl);
typedef void (*HPMHOOK_post_clif_elemname_ack) (int fd, struct block_list *bl);
+typedef void (*HPMHOOK_pre_clif_skillname_ack) (int *fd, struct block_list **bl);
+typedef void (*HPMHOOK_post_clif_skillname_ack) (int fd, struct block_list *bl);
+typedef void (*HPMHOOK_pre_clif_itemname_ack) (int *fd, struct block_list **bl);
+typedef void (*HPMHOOK_post_clif_itemname_ack) (int fd, struct block_list *bl);
typedef void (*HPMHOOK_pre_clif_unknownname_ack) (int *fd, struct block_list **bl);
typedef void (*HPMHOOK_post_clif_unknownname_ack) (int fd, struct block_list *bl);
typedef void (*HPMHOOK_pre_clif_monster_hp_bar) (struct mob_data **md, struct map_session_data **sd);
@@ -2670,6 +2674,8 @@ typedef time_t (*HPMHOOK_pre_clif_attendance_getendtime) (void);
typedef time_t (*HPMHOOK_post_clif_attendance_getendtime) (time_t retVal___);
typedef void (*HPMHOOK_pre_clif_pOpenUIRequest) (int *fd, struct map_session_data **sd);
typedef void (*HPMHOOK_post_clif_pOpenUIRequest) (int fd, struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_open_ui_send) (struct map_session_data **sd, enum zc_ui_types *ui_type);
+typedef void (*HPMHOOK_post_clif_open_ui_send) (struct map_session_data *sd, enum zc_ui_types ui_type);
typedef void (*HPMHOOK_pre_clif_open_ui) (struct map_session_data **sd, enum cz_ui_types *uiType);
typedef void (*HPMHOOK_post_clif_open_ui) (struct map_session_data *sd, enum cz_ui_types uiType);
typedef void (*HPMHOOK_pre_clif_pAttendanceRewardRequest) (int *fd, struct map_session_data **sd);
@@ -2762,6 +2768,14 @@ typedef void (*HPMHOOK_pre_clif_plapineDdukDdak_ack) (int *fd, struct map_sessio
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);
+typedef bool (*HPMHOOK_pre_clif_lapineUpgrade_open) (struct map_session_data **sd, int *item_id);
+typedef bool (*HPMHOOK_post_clif_lapineUpgrade_open) (bool retVal___, struct map_session_data *sd, int item_id);
+typedef bool (*HPMHOOK_pre_clif_lapineUpgrade_result) (struct map_session_data **sd, enum lapineUpgrade_result *result);
+typedef bool (*HPMHOOK_post_clif_lapineUpgrade_result) (bool retVal___, struct map_session_data *sd, enum lapineUpgrade_result result);
+typedef void (*HPMHOOK_pre_clif_pLapineUpgrade_close) (int *fd, struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_pLapineUpgrade_close) (int fd, struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_pLapineUpgrade_makeItem) (int *fd, struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_pLapineUpgrade_makeItem) (int fd, struct map_session_data *sd);
typedef void (*HPMHOOK_pre_clif_pReqGearOff) (int *fd, struct map_session_data **sd);
typedef void (*HPMHOOK_post_clif_pReqGearOff) (int fd, struct map_session_data *sd);
#endif // MAP_CLIF_H
@@ -4734,10 +4748,10 @@ typedef uint32 (*HPMHOOK_pre_map_race_id2mask) (int *race);
typedef uint32 (*HPMHOOK_post_map_race_id2mask) (uint32 retVal___, int race);
typedef void (*HPMHOOK_pre_map_reloadnpc) (bool *clear);
typedef void (*HPMHOOK_post_map_reloadnpc) (bool clear);
-typedef int (*HPMHOOK_pre_map_check_dir) (int *s_dir, int *t_dir);
-typedef int (*HPMHOOK_post_map_check_dir) (int retVal___, int s_dir, int t_dir);
-typedef uint8 (*HPMHOOK_pre_map_calc_dir) (struct block_list **src, int16 *x, int16 *y);
-typedef uint8 (*HPMHOOK_post_map_calc_dir) (uint8 retVal___, struct block_list *src, int16 x, int16 y);
+typedef int (*HPMHOOK_pre_map_check_dir) (enum unit_dir *s_dir, enum unit_dir *t_dir);
+typedef int (*HPMHOOK_post_map_check_dir) (int retVal___, enum unit_dir s_dir, enum unit_dir t_dir);
+typedef enum unit_dir (*HPMHOOK_pre_map_calc_dir) (const struct block_list **src, int16 *x, int16 *y);
+typedef enum unit_dir (*HPMHOOK_post_map_calc_dir) (enum unit_dir retVal___, const struct block_list *src, int16 x, int16 y);
typedef int (*HPMHOOK_pre_map_random_dir) (struct block_list **bl, short **x, short **y);
typedef int (*HPMHOOK_post_map_random_dir) (int retVal___, struct block_list *bl, short *x, short *y);
typedef int (*HPMHOOK_pre_map_cleanup_sub) (struct block_list **bl, va_list ap);
@@ -5212,20 +5226,32 @@ typedef bool (*HPMHOOK_pre_mapit_exists) (struct s_mapiterator **iter);
typedef bool (*HPMHOOK_post_mapit_exists) (bool retVal___, struct s_mapiterator *iter);
#endif // MAP_MAP_H
#ifdef MAP_MAPREG_H /* mapreg */
-typedef void (*HPMHOOK_pre_mapreg_init) (void);
-typedef void (*HPMHOOK_post_mapreg_init) (void);
-typedef void (*HPMHOOK_pre_mapreg_final) (void);
-typedef void (*HPMHOOK_post_mapreg_final) (void);
typedef int (*HPMHOOK_pre_mapreg_readreg) (int64 *uid);
typedef int (*HPMHOOK_post_mapreg_readreg) (int retVal___, int64 uid);
typedef char* (*HPMHOOK_pre_mapreg_readregstr) (int64 *uid);
typedef char* (*HPMHOOK_post_mapreg_readregstr) (char* retVal___, int64 uid);
+typedef bool (*HPMHOOK_pre_mapreg_set_num_db) (int64 *uid, const char **name, unsigned int *index, int *value);
+typedef bool (*HPMHOOK_post_mapreg_set_num_db) (bool retVal___, int64 uid, const char *name, unsigned int index, int value);
+typedef bool (*HPMHOOK_pre_mapreg_delete_num_db) (int64 *uid, const char **name, unsigned int *index);
+typedef bool (*HPMHOOK_post_mapreg_delete_num_db) (bool retVal___, int64 uid, const char *name, unsigned int index);
typedef bool (*HPMHOOK_pre_mapreg_setreg) (int64 *uid, int *val);
typedef bool (*HPMHOOK_post_mapreg_setreg) (bool retVal___, int64 uid, int val);
+typedef bool (*HPMHOOK_pre_mapreg_set_str_db) (int64 *uid, const char **name, unsigned int *index, const char **value);
+typedef bool (*HPMHOOK_post_mapreg_set_str_db) (bool retVal___, int64 uid, const char *name, unsigned int index, const char *value);
+typedef bool (*HPMHOOK_pre_mapreg_delete_str_db) (int64 *uid, const char **name, unsigned int *index);
+typedef bool (*HPMHOOK_post_mapreg_delete_str_db) (bool retVal___, int64 uid, const char *name, unsigned int index);
typedef bool (*HPMHOOK_pre_mapreg_setregstr) (int64 *uid, const char **str);
typedef bool (*HPMHOOK_post_mapreg_setregstr) (bool retVal___, int64 uid, const char *str);
+typedef void (*HPMHOOK_pre_mapreg_load_num_db) (void);
+typedef void (*HPMHOOK_post_mapreg_load_num_db) (void);
+typedef void (*HPMHOOK_pre_mapreg_load_str_db) (void);
+typedef void (*HPMHOOK_post_mapreg_load_str_db) (void);
typedef void (*HPMHOOK_pre_mapreg_load) (void);
typedef void (*HPMHOOK_post_mapreg_load) (void);
+typedef void (*HPMHOOK_pre_mapreg_save_num_db) (const char **name, unsigned int *index, int *value);
+typedef void (*HPMHOOK_post_mapreg_save_num_db) (const char *name, unsigned int index, int value);
+typedef void (*HPMHOOK_pre_mapreg_save_str_db) (const char **name, unsigned int *index, const char **value);
+typedef void (*HPMHOOK_post_mapreg_save_str_db) (const char *name, unsigned int index, const char *value);
typedef void (*HPMHOOK_pre_mapreg_save) (void);
typedef void (*HPMHOOK_post_mapreg_save) (void);
typedef int (*HPMHOOK_pre_mapreg_save_timer) (int *tid, int64 *tick, int *id, intptr_t *data);
@@ -5234,8 +5260,12 @@ typedef int (*HPMHOOK_pre_mapreg_destroyreg) (union DBKey *key, struct DBData **
typedef int (*HPMHOOK_post_mapreg_destroyreg) (int retVal___, union DBKey key, struct DBData *data, va_list ap);
typedef void (*HPMHOOK_pre_mapreg_reload) (void);
typedef void (*HPMHOOK_post_mapreg_reload) (void);
-typedef bool (*HPMHOOK_pre_mapreg_config_read) (const char **filename, const struct config_setting_t **config, bool *imported);
-typedef bool (*HPMHOOK_post_mapreg_config_read) (bool retVal___, const char *filename, const struct config_setting_t *config, bool imported);
+typedef bool (*HPMHOOK_pre_mapreg_config_read_registry) (const char **filename, const struct config_setting_t **config, bool *imported);
+typedef bool (*HPMHOOK_post_mapreg_config_read_registry) (bool retVal___, const char *filename, const struct config_setting_t *config, bool imported);
+typedef void (*HPMHOOK_pre_mapreg_final) (void);
+typedef void (*HPMHOOK_post_mapreg_final) (void);
+typedef void (*HPMHOOK_pre_mapreg_init) (void);
+typedef void (*HPMHOOK_post_mapreg_init) (void);
#endif // MAP_MAPREG_H
#ifdef COMMON_MD5CALC_H /* md5 */
typedef void (*HPMHOOK_pre_md5_string) (const char **string, char **output);
@@ -5452,8 +5482,8 @@ typedef struct block_list* (*HPMHOOK_pre_mob_getmasterhpltmaxrate) (struct mob_d
typedef struct block_list* (*HPMHOOK_post_mob_getmasterhpltmaxrate) (struct block_list* retVal___, struct mob_data *md, int rate);
typedef int (*HPMHOOK_pre_mob_getfriendstatus_sub) (struct block_list **bl, va_list ap);
typedef int (*HPMHOOK_post_mob_getfriendstatus_sub) (int retVal___, struct block_list *bl, va_list ap);
-typedef struct mob_data* (*HPMHOOK_pre_mob_getfriendstatus) (struct mob_data **md, int *cond1, int *cond2);
-typedef struct mob_data* (*HPMHOOK_post_mob_getfriendstatus) (struct mob_data* retVal___, struct mob_data *md, int cond1, int cond2);
+typedef struct block_list* (*HPMHOOK_pre_mob_getfriendstatus) (struct mob_data **md, int *cond1, int *cond2);
+typedef struct block_list* (*HPMHOOK_post_mob_getfriendstatus) (struct block_list* retVal___, struct mob_data *md, int cond1, int cond2);
typedef int (*HPMHOOK_pre_mob_skill_use) (struct mob_data **md, int64 *tick, int *event);
typedef int (*HPMHOOK_post_mob_skill_use) (int retVal___, struct mob_data *md, int64 tick, int event);
typedef int (*HPMHOOK_pre_mob_skill_event) (struct mob_data **md, struct block_list **src, int64 *tick, int *flag);
@@ -5708,8 +5738,8 @@ typedef int (*HPMHOOK_pre_npc_parseview) (const char **w4, const char **start, c
typedef int (*HPMHOOK_post_npc_parseview) (int retVal___, const char *w4, const char *start, const char *buffer, const char *filepath);
typedef bool (*HPMHOOK_pre_npc_viewisid) (const char **viewid);
typedef bool (*HPMHOOK_post_npc_viewisid) (bool retVal___, const char *viewid);
-typedef struct npc_data* (*HPMHOOK_pre_npc_create_npc) (enum npc_subtype *subtype, int *m, int *x, int *y, uint8 *dir, int *class_);
-typedef struct npc_data* (*HPMHOOK_post_npc_create_npc) (struct npc_data* retVal___, enum npc_subtype subtype, int m, int x, int y, uint8 dir, int class_);
+typedef struct npc_data* (*HPMHOOK_pre_npc_create_npc) (enum npc_subtype *subtype, int *m, int *x, int *y, enum unit_dir *dir, int *class_);
+typedef struct npc_data* (*HPMHOOK_post_npc_create_npc) (struct npc_data* retVal___, enum npc_subtype subtype, int m, int x, int y, enum unit_dir dir, int class_);
typedef struct npc_data* (*HPMHOOK_pre_npc_add_warp) (char **name, short *from_mapid, short *from_x, short *from_y, short *xs, short *ys, unsigned short *to_mapindex, short *to_x, short *to_y);
typedef struct npc_data* (*HPMHOOK_post_npc_add_warp) (struct npc_data* retVal___, char *name, short from_mapid, short from_x, short from_y, short xs, short ys, unsigned short to_mapindex, short to_x, short to_y);
typedef const char* (*HPMHOOK_pre_npc_parse_warp) (const char **w1, const char **w2, const char **w3, const char **w4, const char **start, const char **buffer, const char **filepath, int **retval);
@@ -5830,6 +5860,10 @@ typedef int (*HPMHOOK_pre_npc_secure_timeout_timer) (int *tid, int64 *tick, int
typedef int (*HPMHOOK_post_npc_secure_timeout_timer) (int retVal___, int tid, int64 tick, int id, intptr_t data);
#endif // MAP_NPC_H
#ifdef COMMON_NULLPO_H /* nullpo */
+typedef void (*HPMHOOK_pre_nullpo_init) (void);
+typedef void (*HPMHOOK_post_nullpo_init) (void);
+typedef void (*HPMHOOK_pre_nullpo_final) (void);
+typedef void (*HPMHOOK_post_nullpo_final) (void);
typedef void (*HPMHOOK_pre_nullpo_assert_report) (const char **file, int *line, const char **func, const char **targetname, const char **title);
typedef void (*HPMHOOK_post_nullpo_assert_report) (const char *file, int line, const char *func, const char *targetname, const char *title);
#endif // COMMON_NULLPO_H
@@ -6184,8 +6218,14 @@ typedef int (*HPMHOOK_pre_pc_checkitem) (struct map_session_data **sd);
typedef int (*HPMHOOK_post_pc_checkitem) (int retVal___, struct map_session_data *sd);
typedef int (*HPMHOOK_pre_pc_useitem) (struct map_session_data **sd, int *n);
typedef int (*HPMHOOK_post_pc_useitem) (int retVal___, struct map_session_data *sd, int n);
-typedef int (*HPMHOOK_pre_pc_itemskill_clear) (struct map_session_data **sd);
-typedef int (*HPMHOOK_post_pc_itemskill_clear) (int retVal___, struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_pc_autocast_clear_current) (struct map_session_data **sd);
+typedef void (*HPMHOOK_post_pc_autocast_clear_current) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_pc_autocast_clear) (struct map_session_data **sd);
+typedef void (*HPMHOOK_post_pc_autocast_clear) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_pc_autocast_set_current) (struct map_session_data **sd, int *skill_id);
+typedef void (*HPMHOOK_post_pc_autocast_set_current) (struct map_session_data *sd, int skill_id);
+typedef void (*HPMHOOK_pre_pc_autocast_remove) (struct map_session_data **sd, enum autocast_type *type, int *skill_id, int *skill_lv);
+typedef void (*HPMHOOK_post_pc_autocast_remove) (struct map_session_data *sd, enum autocast_type type, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_pc_skillatk_bonus) (struct map_session_data **sd, uint16 *skill_id);
typedef int (*HPMHOOK_post_pc_skillatk_bonus) (int retVal___, struct map_session_data *sd, uint16 skill_id);
typedef int (*HPMHOOK_pre_pc_skillheal_bonus) (struct map_session_data **sd, uint16 *skill_id);
@@ -6206,6 +6246,10 @@ typedef int (*HPMHOOK_pre_pc_percentheal) (struct map_session_data **sd, int *hp
typedef int (*HPMHOOK_post_pc_percentheal) (int retVal___, struct map_session_data *sd, int hp, int sp);
typedef int (*HPMHOOK_pre_pc_jobchange) (struct map_session_data **sd, int *class, int *upper);
typedef int (*HPMHOOK_post_pc_jobchange) (int retVal___, struct map_session_data *sd, int class, int upper);
+typedef void (*HPMHOOK_pre_pc_hide) (struct map_session_data **sd, bool *show_msg);
+typedef void (*HPMHOOK_post_pc_hide) (struct map_session_data *sd, bool show_msg);
+typedef void (*HPMHOOK_pre_pc_unhide) (struct map_session_data **sd, bool *show_msg);
+typedef void (*HPMHOOK_post_pc_unhide) (struct map_session_data *sd, bool show_msg);
typedef int (*HPMHOOK_pre_pc_setoption) (struct map_session_data **sd, int *type);
typedef int (*HPMHOOK_post_pc_setoption) (int retVal___, struct map_session_data *sd, int type);
typedef int (*HPMHOOK_pre_pc_setcart) (struct map_session_data **sd, int *type);
@@ -6336,10 +6380,10 @@ typedef void (*HPMHOOK_pre_pc_itemcd_do) (struct map_session_data **sd, bool *lo
typedef void (*HPMHOOK_post_pc_itemcd_do) (struct map_session_data *sd, bool load);
typedef int (*HPMHOOK_pre_pc_load_combo) (struct map_session_data **sd);
typedef int (*HPMHOOK_post_pc_load_combo) (int retVal___, struct map_session_data *sd);
-typedef void (*HPMHOOK_pre_pc_add_charm) (struct map_session_data **sd, int *interval, int *max, int *type);
-typedef void (*HPMHOOK_post_pc_add_charm) (struct map_session_data *sd, int interval, int max, int type);
-typedef void (*HPMHOOK_pre_pc_del_charm) (struct map_session_data **sd, int *count, int *type);
-typedef void (*HPMHOOK_post_pc_del_charm) (struct map_session_data *sd, int count, int type);
+typedef void (*HPMHOOK_pre_pc_add_charm) (struct map_session_data **sd, int *interval, int *max, enum spirit_charm_types *type);
+typedef void (*HPMHOOK_post_pc_add_charm) (struct map_session_data *sd, int interval, int max, enum spirit_charm_types type);
+typedef void (*HPMHOOK_pre_pc_del_charm) (struct map_session_data **sd, int *count, enum spirit_charm_types *type);
+typedef void (*HPMHOOK_post_pc_del_charm) (struct map_session_data *sd, int count, enum spirit_charm_types type);
typedef void (*HPMHOOK_pre_pc_baselevelchanged) (struct map_session_data **sd);
typedef void (*HPMHOOK_post_pc_baselevelchanged) (struct map_session_data *sd);
typedef int (*HPMHOOK_pre_pc_level_penalty_mod) (int *diff, unsigned char *race, uint32 *mode, int *type);
@@ -6496,6 +6540,10 @@ typedef int (*HPMHOOK_pre_pet_final) (void);
typedef int (*HPMHOOK_post_pet_final) (int retVal___);
typedef int (*HPMHOOK_pre_pet_hungry_val) (struct pet_data **pd);
typedef int (*HPMHOOK_post_pet_hungry_val) (int retVal___, struct pet_data *pd);
+typedef void (*HPMHOOK_pre_pet_set_hunger) (struct pet_data **pd, int *value);
+typedef void (*HPMHOOK_post_pet_set_hunger) (struct pet_data *pd, int value);
+typedef int (*HPMHOOK_pre_pet_get_card4_value) (int *rename_flag, int *intimacy);
+typedef int (*HPMHOOK_post_pet_get_card4_value) (int retVal___, int rename_flag, int intimacy);
typedef void (*HPMHOOK_pre_pet_set_intimate) (struct pet_data **pd, int *value);
typedef void (*HPMHOOK_post_pet_set_intimate) (struct pet_data *pd, int value);
typedef int (*HPMHOOK_pre_pet_create_egg) (struct map_session_data **sd, int *item_id);
@@ -6520,6 +6568,8 @@ typedef int (*HPMHOOK_pre_pet_return_egg) (struct map_session_data **sd, struct
typedef int (*HPMHOOK_post_pet_return_egg) (int retVal___, struct map_session_data *sd, struct pet_data *pd);
typedef int (*HPMHOOK_pre_pet_data_init) (struct map_session_data **sd, struct s_pet **petinfo);
typedef int (*HPMHOOK_post_pet_data_init) (int retVal___, struct map_session_data *sd, struct s_pet *petinfo);
+typedef int (*HPMHOOK_pre_pet_spawn) (struct map_session_data **sd, bool *birth_process);
+typedef int (*HPMHOOK_post_pet_spawn) (int retVal___, struct map_session_data *sd, bool birth_process);
typedef int (*HPMHOOK_pre_pet_birth_process) (struct map_session_data **sd, struct s_pet **petinfo);
typedef int (*HPMHOOK_post_pet_birth_process) (int retVal___, struct map_session_data *sd, struct s_pet *petinfo);
typedef int (*HPMHOOK_pre_pet_recv_petdata) (int *account_id, struct s_pet **p, int *flag);
@@ -6836,8 +6886,8 @@ typedef void (*HPMHOOK_pre_script_set_constant2) (const char **name, int *value,
typedef void (*HPMHOOK_post_script_set_constant2) (const char *name, int value, bool is_parameter, bool is_deprecated);
typedef bool (*HPMHOOK_pre_script_get_constant) (const char **name, int **value);
typedef bool (*HPMHOOK_post_script_get_constant) (bool retVal___, const char *name, int *value);
-typedef void (*HPMHOOK_pre_script_label_add) (int *key, int *pos);
-typedef void (*HPMHOOK_post_script_label_add) (int key, int pos);
+typedef void (*HPMHOOK_pre_script_label_add) (int *key, int *pos, enum script_label_flags *flags);
+typedef void (*HPMHOOK_post_script_label_add) (int key, int pos, enum script_label_flags flags);
typedef void (*HPMHOOK_pre_script_run) (struct script_code **rootscript, int *pos, int *rid, int *oid);
typedef void (*HPMHOOK_post_script_run) (struct script_code *rootscript, int pos, int rid, int oid);
typedef void (*HPMHOOK_pre_script_run_npc) (struct script_code **rootscript, int *pos, int *rid, int *oid);
@@ -6902,6 +6952,8 @@ typedef const char* (*HPMHOOK_pre_script_parse_syntax_close_sub) (const char **p
typedef const char* (*HPMHOOK_post_script_parse_syntax_close_sub) (const char* retVal___, const char *p, int *flag);
typedef const char* (*HPMHOOK_pre_script_parse_syntax) (const char **p);
typedef const char* (*HPMHOOK_post_script_parse_syntax) (const char* retVal___, const char *p);
+typedef const char* (*HPMHOOK_pre_script_parse_syntax_function) (const char **p, bool *is_public);
+typedef const char* (*HPMHOOK_post_script_parse_syntax_function) (const char* retVal___, const char *p, bool is_public);
typedef c_op (*HPMHOOK_pre_script_get_com) (const struct script_buf **scriptbuf, int **pos);
typedef c_op (*HPMHOOK_post_script_get_com) (c_op retVal___, const struct script_buf *scriptbuf, int *pos);
typedef int (*HPMHOOK_pre_script_get_num) (const struct script_buf **scriptbuf, int **pos);
@@ -6966,6 +7018,8 @@ typedef const char* (*HPMHOOK_pre_script_print_line) (StringBuf **buf, const cha
typedef const char* (*HPMHOOK_post_script_print_line) (const char* retVal___, StringBuf *buf, const char *p, const char *mark, int line);
typedef void (*HPMHOOK_pre_script_errorwarning_sub) (StringBuf **buf, const char **src, const char **file, int *start_line, const char **error_msg, const char **error_pos);
typedef void (*HPMHOOK_post_script_errorwarning_sub) (StringBuf *buf, const char *src, const char *file, int start_line, const char *error_msg, const char *error_pos);
+typedef bool (*HPMHOOK_pre_script_is_permanent_variable) (const char **name);
+typedef bool (*HPMHOOK_post_script_is_permanent_variable) (bool retVal___, const char *name);
typedef int (*HPMHOOK_pre_script_set_reg) (struct script_state **st, struct map_session_data **sd, int64 *num, const char **name, const void **value, struct reg_db **ref);
typedef int (*HPMHOOK_post_script_set_reg) (int retVal___, struct script_state *st, struct map_session_data *sd, int64 num, const char *name, const void *value, struct reg_db *ref);
typedef void (*HPMHOOK_pre_script_set_reg_ref_str) (struct script_state **st, struct reg_db **n, int64 *num, const char **name, const char **str);
@@ -7182,10 +7236,10 @@ typedef void (*HPMHOOK_pre_skill_read_db) (bool *minimal);
typedef void (*HPMHOOK_post_skill_read_db) (bool minimal);
typedef int (*HPMHOOK_pre_skill_get_index) (int *skill_id);
typedef int (*HPMHOOK_post_skill_get_index) (int retVal___, int skill_id);
-typedef int (*HPMHOOK_pre_skill_get_type) (int *skill_id);
-typedef int (*HPMHOOK_post_skill_get_type) (int retVal___, int skill_id);
-typedef int (*HPMHOOK_pre_skill_get_hit) (int *skill_id);
-typedef int (*HPMHOOK_post_skill_get_hit) (int retVal___, int skill_id);
+typedef int (*HPMHOOK_pre_skill_get_type) (int *skill_id, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_get_type) (int retVal___, int skill_id, int skill_lv);
+typedef int (*HPMHOOK_pre_skill_get_hit) (int *skill_id, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_get_hit) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_inf) (int *skill_id);
typedef int (*HPMHOOK_post_skill_get_inf) (int retVal___, int skill_id);
typedef int (*HPMHOOK_pre_skill_get_ele) (int *skill_id, int *skill_lv);
@@ -7204,20 +7258,32 @@ typedef int (*HPMHOOK_pre_skill_get_hp) (int *skill_id, int *skill_lv);
typedef int (*HPMHOOK_post_skill_get_hp) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_mhp) (int *skill_id, int *skill_lv);
typedef int (*HPMHOOK_post_skill_get_mhp) (int retVal___, int skill_id, int skill_lv);
+typedef int (*HPMHOOK_pre_skill_get_msp) (int *skill_id, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_get_msp) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_sp) (int *skill_id, int *skill_lv);
typedef int (*HPMHOOK_post_skill_get_sp) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_hp_rate) (int *skill_id, int *skill_lv);
typedef int (*HPMHOOK_post_skill_get_hp_rate) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_sp_rate) (int *skill_id, int *skill_lv);
typedef int (*HPMHOOK_post_skill_get_sp_rate) (int retVal___, int skill_id, int skill_lv);
-typedef int (*HPMHOOK_pre_skill_get_state) (int *skill_id);
-typedef int (*HPMHOOK_post_skill_get_state) (int retVal___, int skill_id);
+typedef int (*HPMHOOK_pre_skill_get_state) (int *skill_id, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_get_state) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_spiritball) (int *skill_id, int *skill_lv);
typedef int (*HPMHOOK_post_skill_get_spiritball) (int retVal___, int skill_id, int skill_lv);
+typedef int (*HPMHOOK_pre_skill_get_item_index) (int *skill_id, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_get_item_index) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_itemid) (int *skill_id, int *item_idx);
typedef int (*HPMHOOK_post_skill_get_itemid) (int retVal___, int skill_id, int item_idx);
-typedef int (*HPMHOOK_pre_skill_get_itemqty) (int *skill_id, int *item_idx);
-typedef int (*HPMHOOK_post_skill_get_itemqty) (int retVal___, int skill_id, int item_idx);
+typedef int (*HPMHOOK_pre_skill_get_itemqty) (int *skill_id, int *item_idx, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_get_itemqty) (int retVal___, int skill_id, int item_idx, int skill_lv);
+typedef bool (*HPMHOOK_pre_skill_get_item_any_flag) (int *skill_id, int *skill_lv);
+typedef bool (*HPMHOOK_post_skill_get_item_any_flag) (bool retVal___, int skill_id, int skill_lv);
+typedef int (*HPMHOOK_pre_skill_get_equip_id) (int *skill_id, int *item_idx);
+typedef int (*HPMHOOK_post_skill_get_equip_id) (int retVal___, int skill_id, int item_idx);
+typedef int (*HPMHOOK_pre_skill_get_equip_amount) (int *skill_id, int *item_idx, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_get_equip_amount) (int retVal___, int skill_id, int item_idx, int skill_lv);
+typedef bool (*HPMHOOK_pre_skill_get_equip_any_flag) (int *skill_id, int *skill_lv);
+typedef bool (*HPMHOOK_post_skill_get_equip_any_flag) (bool retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_zeny) (int *skill_id, int *skill_lv);
typedef int (*HPMHOOK_post_skill_get_zeny) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_num) (int *skill_id, int *skill_lv);
@@ -7236,32 +7302,32 @@ typedef int (*HPMHOOK_pre_skill_get_castnodex) (int *skill_id, int *skill_lv);
typedef int (*HPMHOOK_post_skill_get_castnodex) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_delaynodex) (int *skill_id, int *skill_lv);
typedef int (*HPMHOOK_post_skill_get_delaynodex) (int retVal___, int skill_id, int skill_lv);
-typedef int (*HPMHOOK_pre_skill_get_castdef) (int *skill_id);
-typedef int (*HPMHOOK_post_skill_get_castdef) (int retVal___, int skill_id);
+typedef int (*HPMHOOK_pre_skill_get_castdef) (int *skill_id, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_get_castdef) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_weapontype) (int *skill_id);
typedef int (*HPMHOOK_post_skill_get_weapontype) (int retVal___, int skill_id);
typedef int (*HPMHOOK_pre_skill_get_ammotype) (int *skill_id);
typedef int (*HPMHOOK_post_skill_get_ammotype) (int retVal___, int skill_id);
typedef int (*HPMHOOK_pre_skill_get_ammo_qty) (int *skill_id, int *skill_lv);
typedef int (*HPMHOOK_post_skill_get_ammo_qty) (int retVal___, int skill_id, int skill_lv);
-typedef int (*HPMHOOK_pre_skill_get_unit_id) (int *skill_id, int *flag);
-typedef int (*HPMHOOK_post_skill_get_unit_id) (int retVal___, int skill_id, int flag);
+typedef int (*HPMHOOK_pre_skill_get_unit_id) (int *skill_id, int *skill_lv, int *flag);
+typedef int (*HPMHOOK_post_skill_get_unit_id) (int retVal___, int skill_id, int skill_lv, int flag);
typedef int (*HPMHOOK_pre_skill_get_inf2) (int *skill_id);
typedef int (*HPMHOOK_post_skill_get_inf2) (int retVal___, int skill_id);
-typedef int (*HPMHOOK_pre_skill_get_castcancel) (int *skill_id);
-typedef int (*HPMHOOK_post_skill_get_castcancel) (int retVal___, int skill_id);
+typedef int (*HPMHOOK_pre_skill_get_castcancel) (int *skill_id, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_get_castcancel) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_maxcount) (int *skill_id, int *skill_lv);
typedef int (*HPMHOOK_post_skill_get_maxcount) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_blewcount) (int *skill_id, int *skill_lv);
typedef int (*HPMHOOK_post_skill_get_blewcount) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_unit_flag) (int *skill_id);
typedef int (*HPMHOOK_post_skill_get_unit_flag) (int retVal___, int skill_id);
-typedef int (*HPMHOOK_pre_skill_get_unit_target) (int *skill_id);
-typedef int (*HPMHOOK_post_skill_get_unit_target) (int retVal___, int skill_id);
-typedef int (*HPMHOOK_pre_skill_get_unit_interval) (int *skill_id);
-typedef int (*HPMHOOK_post_skill_get_unit_interval) (int retVal___, int skill_id);
-typedef int (*HPMHOOK_pre_skill_get_unit_bl_target) (int *skill_id);
-typedef int (*HPMHOOK_post_skill_get_unit_bl_target) (int retVal___, int skill_id);
+typedef int (*HPMHOOK_pre_skill_get_unit_target) (int *skill_id, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_get_unit_target) (int retVal___, int skill_id, int skill_lv);
+typedef int (*HPMHOOK_pre_skill_get_unit_interval) (int *skill_id, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_get_unit_interval) (int retVal___, int skill_id, int skill_lv);
+typedef int (*HPMHOOK_pre_skill_get_unit_bl_target) (int *skill_id, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_get_unit_bl_target) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_unit_layout_type) (int *skill_id, int *skill_lv);
typedef int (*HPMHOOK_post_skill_get_unit_layout_type) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_get_unit_range) (int *skill_id, int *skill_lv);
@@ -7282,8 +7348,8 @@ typedef bool (*HPMHOOK_pre_skill_is_combo) (int *skill_id);
typedef bool (*HPMHOOK_post_skill_is_combo) (bool retVal___, int skill_id);
typedef int (*HPMHOOK_pre_skill_name2id) (const char **name);
typedef int (*HPMHOOK_post_skill_name2id) (int retVal___, const char *name);
-typedef int (*HPMHOOK_pre_skill_isammotype) (struct map_session_data **sd, int *skill_id);
-typedef int (*HPMHOOK_post_skill_isammotype) (int retVal___, struct map_session_data *sd, int skill_id);
+typedef int (*HPMHOOK_pre_skill_isammotype) (struct map_session_data **sd, int *skill_id, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_isammotype) (int retVal___, struct map_session_data *sd, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_castend_id) (int *tid, int64 *tick, int *id, intptr_t *data);
typedef int (*HPMHOOK_post_skill_castend_id) (int retVal___, int tid, int64 tick, int id, intptr_t data);
typedef int (*HPMHOOK_pre_skill_castend_pos) (int *tid, int64 *tick, int *id, intptr_t *data);
@@ -7298,8 +7364,8 @@ typedef int (*HPMHOOK_pre_skill_additional_effect) (struct block_list **src, str
typedef int (*HPMHOOK_post_skill_additional_effect) (int retVal___, struct block_list *src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int attack_type, int dmg_lv, int64 tick);
typedef int (*HPMHOOK_pre_skill_counter_additional_effect) (struct block_list **src, struct block_list **bl, uint16 *skill_id, uint16 *skill_lv, int *attack_type, int64 *tick);
typedef int (*HPMHOOK_post_skill_counter_additional_effect) (int retVal___, struct block_list *src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int attack_type, int64 tick);
-typedef int (*HPMHOOK_pre_skill_blown) (struct block_list **src, struct block_list **target, int *count, int8 *dir, int *flag);
-typedef int (*HPMHOOK_post_skill_blown) (int retVal___, struct block_list *src, struct block_list *target, int count, int8 dir, int flag);
+typedef int (*HPMHOOK_pre_skill_blown) (struct block_list **src, struct block_list **target, int *count, enum unit_dir *dir, int *flag);
+typedef int (*HPMHOOK_post_skill_blown) (int retVal___, struct block_list *src, struct block_list *target, int count, enum unit_dir dir, int flag);
typedef int (*HPMHOOK_pre_skill_break_equip) (struct block_list **bl, unsigned short *where, int *rate, int *flag);
typedef int (*HPMHOOK_post_skill_break_equip) (int retVal___, struct block_list *bl, unsigned short where, int rate, int flag);
typedef int (*HPMHOOK_pre_skill_strip_equip) (struct block_list **bl, unsigned short *where, int *rate, int *lv, int *time);
@@ -7314,8 +7380,8 @@ typedef int (*HPMHOOK_pre_skill_delunit) (struct skill_unit **su);
typedef int (*HPMHOOK_post_skill_delunit) (int retVal___, struct skill_unit *su);
typedef struct skill_unit_group* (*HPMHOOK_pre_skill_init_unitgroup) (struct block_list **src, int *count, uint16 *skill_id, uint16 *skill_lv, int *unit_id, int *limit, int *interval);
typedef struct skill_unit_group* (*HPMHOOK_post_skill_init_unitgroup) (struct skill_unit_group* retVal___, struct block_list *src, int count, uint16 skill_id, uint16 skill_lv, int unit_id, int limit, int interval);
-typedef int (*HPMHOOK_pre_skill_del_unitgroup) (struct skill_unit_group **group, const char **file, int *line, const char **func);
-typedef int (*HPMHOOK_post_skill_del_unitgroup) (int retVal___, struct skill_unit_group *group, const char *file, int line, const char *func);
+typedef int (*HPMHOOK_pre_skill_del_unitgroup) (struct skill_unit_group **group);
+typedef int (*HPMHOOK_post_skill_del_unitgroup) (int retVal___, struct skill_unit_group *group);
typedef int (*HPMHOOK_pre_skill_clear_unitgroup) (struct block_list **src);
typedef int (*HPMHOOK_post_skill_clear_unitgroup) (int retVal___, struct block_list *src);
typedef int (*HPMHOOK_pre_skill_clear_group) (struct block_list **bl, int *flag);
@@ -7332,12 +7398,18 @@ typedef int (*HPMHOOK_pre_skill_vf_cast_fix) (struct block_list **bl, double *ti
typedef int (*HPMHOOK_post_skill_vf_cast_fix) (int retVal___, struct block_list *bl, double time, uint16 skill_id, uint16 skill_lv);
typedef int (*HPMHOOK_pre_skill_delay_fix) (struct block_list **bl, uint16 *skill_id, uint16 *skill_lv);
typedef int (*HPMHOOK_post_skill_delay_fix) (int retVal___, struct block_list *bl, uint16 skill_id, uint16 skill_lv);
-typedef bool (*HPMHOOK_pre_skill_is_item_skill) (struct map_session_data **sd, int *skill_id, int *skill_lv);
-typedef bool (*HPMHOOK_post_skill_is_item_skill) (bool retVal___, struct map_session_data *sd, int skill_id, int skill_lv);
+typedef int (*HPMHOOK_pre_skill_check_condition_required_equip) (struct map_session_data **sd, int *skill_id, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_check_condition_required_equip) (int retVal___, struct map_session_data *sd, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_check_condition_castbegin) (struct map_session_data **sd, uint16 *skill_id, uint16 *skill_lv);
typedef int (*HPMHOOK_post_skill_check_condition_castbegin) (int retVal___, struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
+typedef int (*HPMHOOK_pre_skill_check_condition_required_items) (struct map_session_data **sd, int *skill_id, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_check_condition_required_items) (int retVal___, struct map_session_data *sd, int skill_id, int skill_lv);
+typedef bool (*HPMHOOK_pre_skill_items_required) (struct map_session_data **sd, int *skill_id, int *skill_lv);
+typedef bool (*HPMHOOK_post_skill_items_required) (bool retVal___, struct map_session_data *sd, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_check_condition_castend) (struct map_session_data **sd, uint16 *skill_id, uint16 *skill_lv);
typedef int (*HPMHOOK_post_skill_check_condition_castend) (int retVal___, struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
+typedef int (*HPMHOOK_pre_skill_get_any_item_index) (struct map_session_data **sd, int *skill_id, int *skill_lv);
+typedef int (*HPMHOOK_post_skill_get_any_item_index) (int retVal___, struct map_session_data *sd, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_consume_requirement) (struct map_session_data **sd, uint16 *skill_id, uint16 *skill_lv, short *type);
typedef int (*HPMHOOK_post_skill_consume_requirement) (int retVal___, struct map_session_data *sd, uint16 skill_id, uint16 skill_lv, short type);
typedef struct skill_condition (*HPMHOOK_pre_skill_get_requirement) (struct map_session_data **sd, uint16 *skill_id, uint16 *skill_lv);
@@ -7384,6 +7456,8 @@ typedef int (*HPMHOOK_pre_skill_not_ok_hom_unknown) (uint16 *skill_id, struct ho
typedef int (*HPMHOOK_post_skill_not_ok_hom_unknown) (int retVal___, uint16 skill_id, struct homun_data *hd);
typedef int (*HPMHOOK_pre_skill_not_ok_mercenary) (uint16 *skill_id, struct mercenary_data **md);
typedef int (*HPMHOOK_post_skill_not_ok_mercenary) (int retVal___, uint16 skill_id, struct mercenary_data *md);
+typedef void (*HPMHOOK_pre_skill_validate_autocast_data) (struct map_session_data **sd, int *skill_id, int *skill_lv);
+typedef void (*HPMHOOK_post_skill_validate_autocast_data) (struct map_session_data *sd, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_chastle_mob_changetarget) (struct block_list **bl, va_list ap);
typedef int (*HPMHOOK_post_skill_chastle_mob_changetarget) (int retVal___, struct block_list *bl, va_list ap);
typedef int (*HPMHOOK_pre_skill_can_produce_mix) (struct map_session_data **sd, int *nameid, int *trigger, int *qty);
@@ -7422,8 +7496,8 @@ typedef int (*HPMHOOK_pre_skill_check_unit_range2) (struct block_list **bl, int
typedef int (*HPMHOOK_post_skill_check_unit_range2) (int retVal___, struct block_list *bl, int x, int y, uint16 skill_id, uint16 skill_lv);
typedef int (*HPMHOOK_pre_skill_check_unit_range2_sub) (struct block_list **bl, va_list ap);
typedef int (*HPMHOOK_post_skill_check_unit_range2_sub) (int retVal___, struct block_list *bl, va_list ap);
-typedef void (*HPMHOOK_pre_skill_toggle_magicpower) (struct block_list **bl, uint16 *skill_id);
-typedef void (*HPMHOOK_post_skill_toggle_magicpower) (struct block_list *bl, uint16 skill_id);
+typedef void (*HPMHOOK_pre_skill_toggle_magicpower) (struct block_list **bl, uint16 *skill_id, int *skill_lv);
+typedef void (*HPMHOOK_post_skill_toggle_magicpower) (struct block_list *bl, uint16 skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_magic_reflect) (struct block_list **src, struct block_list **bl, int *type);
typedef int (*HPMHOOK_post_skill_magic_reflect) (int retVal___, struct block_list *src, struct block_list *bl, int type);
typedef int (*HPMHOOK_pre_skill_onskillusage) (struct map_session_data **sd, struct block_list **bl, uint16 *skill_id, int64 *tick);
@@ -7464,10 +7538,10 @@ typedef int (*HPMHOOK_pre_skill_check_condition_char_sub) (struct block_list **b
typedef int (*HPMHOOK_post_skill_check_condition_char_sub) (int retVal___, struct block_list *bl, va_list ap);
typedef int (*HPMHOOK_pre_skill_check_condition_mob_master_sub) (struct block_list **bl, va_list ap);
typedef int (*HPMHOOK_post_skill_check_condition_mob_master_sub) (int retVal___, struct block_list *bl, va_list ap);
-typedef void (*HPMHOOK_pre_skill_brandishspear_first) (struct square **tc, uint8 *dir, int16 *x, int16 *y);
-typedef void (*HPMHOOK_post_skill_brandishspear_first) (struct square *tc, uint8 dir, int16 x, int16 y);
-typedef void (*HPMHOOK_pre_skill_brandishspear_dir) (struct square **tc, uint8 *dir, int *are);
-typedef void (*HPMHOOK_post_skill_brandishspear_dir) (struct square *tc, uint8 dir, int are);
+typedef void (*HPMHOOK_pre_skill_brandishspear_first) (struct square **tc, enum unit_dir *dir, int16 *x, int16 *y);
+typedef void (*HPMHOOK_post_skill_brandishspear_first) (struct square *tc, enum unit_dir dir, int16 x, int16 y);
+typedef void (*HPMHOOK_pre_skill_brandishspear_dir) (struct square **tc, enum unit_dir *dir, int *are);
+typedef void (*HPMHOOK_post_skill_brandishspear_dir) (struct square *tc, enum unit_dir dir, int are);
typedef int (*HPMHOOK_pre_skill_get_fixed_cast) (int *skill_id, int *skill_lv);
typedef int (*HPMHOOK_post_skill_get_fixed_cast) (int retVal___, int skill_id, int skill_lv);
typedef int (*HPMHOOK_pre_skill_sit_count) (struct block_list **bl, va_list ap);
@@ -7504,42 +7578,130 @@ typedef void (*HPMHOOK_pre_skill_init_unit_layout) (void);
typedef void (*HPMHOOK_post_skill_init_unit_layout) (void);
typedef void (*HPMHOOK_pre_skill_init_unit_layout_unknown) (int *skill_idx, int *pos);
typedef void (*HPMHOOK_post_skill_init_unit_layout_unknown) (int skill_idx, int pos);
+typedef void (*HPMHOOK_pre_skill_validate_id) (struct config_setting_t **conf, struct s_skill_db **sk, int *conf_index);
+typedef void (*HPMHOOK_post_skill_validate_id) (struct config_setting_t *conf, struct s_skill_db *sk, int conf_index);
+typedef bool (*HPMHOOK_pre_skill_name_contains_invalid_character) (const char **name);
+typedef bool (*HPMHOOK_post_skill_name_contains_invalid_character) (bool retVal___, const char *name);
+typedef void (*HPMHOOK_pre_skill_validate_name) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_name) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_max_level) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_max_level) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_description) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_description) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_range) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_range) (struct config_setting_t *conf, struct s_skill_db *sk);
typedef void (*HPMHOOK_pre_skill_validate_hittype) (struct config_setting_t **conf, struct s_skill_db **sk);
typedef void (*HPMHOOK_post_skill_validate_hittype) (struct config_setting_t *conf, struct s_skill_db *sk);
typedef void (*HPMHOOK_pre_skill_validate_skilltype) (struct config_setting_t **conf, struct s_skill_db **sk);
typedef void (*HPMHOOK_post_skill_validate_skilltype) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_skillinfo) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_skillinfo) (struct config_setting_t *conf, struct s_skill_db *sk);
typedef void (*HPMHOOK_pre_skill_validate_attacktype) (struct config_setting_t **conf, struct s_skill_db **sk);
typedef void (*HPMHOOK_post_skill_validate_attacktype) (struct config_setting_t *conf, struct s_skill_db *sk);
typedef void (*HPMHOOK_pre_skill_validate_element) (struct config_setting_t **conf, struct s_skill_db **sk);
typedef void (*HPMHOOK_post_skill_validate_element) (struct config_setting_t *conf, struct s_skill_db *sk);
-typedef void (*HPMHOOK_pre_skill_validate_skillinfo) (struct config_setting_t **conf, struct s_skill_db **sk);
-typedef void (*HPMHOOK_post_skill_validate_skillinfo) (struct config_setting_t *conf, struct s_skill_db *sk);
typedef void (*HPMHOOK_pre_skill_validate_damagetype) (struct config_setting_t **conf, struct s_skill_db **sk);
typedef void (*HPMHOOK_post_skill_validate_damagetype) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_splash_range) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_splash_range) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_number_of_hits) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_number_of_hits) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_interrupt_cast) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_interrupt_cast) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_cast_def_rate) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_cast_def_rate) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_number_of_instances) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_number_of_instances) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_knock_back_tiles) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_knock_back_tiles) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_cast_time) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_cast_time) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_act_delay) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_act_delay) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_walk_delay) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_walk_delay) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_skill_data1) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_skill_data1) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_skill_data2) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_skill_data2) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_cooldown) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_cooldown) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_fixed_cast_time) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_fixed_cast_time) (struct config_setting_t *conf, struct s_skill_db *sk);
typedef void (*HPMHOOK_pre_skill_validate_castnodex) (struct config_setting_t **conf, struct s_skill_db **sk, bool *delay);
typedef void (*HPMHOOK_post_skill_validate_castnodex) (struct config_setting_t *conf, struct s_skill_db *sk, bool delay);
+typedef void (*HPMHOOK_pre_skill_validate_hp_cost) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_hp_cost) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_sp_cost) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_sp_cost) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_hp_rate_cost) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_hp_rate_cost) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_sp_rate_cost) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_sp_rate_cost) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_max_hp_trigger) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_max_hp_trigger) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_max_sp_trigger) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_max_sp_trigger) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_zeny_cost) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_zeny_cost) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef int (*HPMHOOK_pre_skill_validate_weapontype_sub) (const char **type, bool *on, struct s_skill_db **sk);
+typedef int (*HPMHOOK_post_skill_validate_weapontype_sub) (int retVal___, const char *type, bool on, struct s_skill_db *sk);
typedef void (*HPMHOOK_pre_skill_validate_weapontype) (struct config_setting_t **conf, struct s_skill_db **sk);
typedef void (*HPMHOOK_post_skill_validate_weapontype) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef int (*HPMHOOK_pre_skill_validate_ammotype_sub) (const char **type, bool *on, struct s_skill_db **sk);
+typedef int (*HPMHOOK_post_skill_validate_ammotype_sub) (int retVal___, const char *type, bool on, struct s_skill_db *sk);
typedef void (*HPMHOOK_pre_skill_validate_ammotype) (struct config_setting_t **conf, struct s_skill_db **sk);
typedef void (*HPMHOOK_post_skill_validate_ammotype) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_ammo_amount) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_ammo_amount) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef int (*HPMHOOK_pre_skill_validate_state_sub) (const char **state);
+typedef int (*HPMHOOK_post_skill_validate_state_sub) (int retVal___, const char *state);
typedef void (*HPMHOOK_pre_skill_validate_state) (struct config_setting_t **conf, struct s_skill_db **sk);
typedef void (*HPMHOOK_post_skill_validate_state) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_spirit_sphere_cost) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_spirit_sphere_cost) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_item_requirements_sub_item_amount) (struct config_setting_t **conf, struct s_skill_db **sk, int *item_index);
+typedef void (*HPMHOOK_post_skill_validate_item_requirements_sub_item_amount) (struct config_setting_t *conf, struct s_skill_db *sk, int item_index);
+typedef void (*HPMHOOK_pre_skill_validate_item_requirements_sub_items) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_item_requirements_sub_items) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_item_requirements_sub_any_flag) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_item_requirements_sub_any_flag) (struct config_setting_t *conf, struct s_skill_db *sk);
typedef void (*HPMHOOK_pre_skill_validate_item_requirements) (struct config_setting_t **conf, struct s_skill_db **sk);
typedef void (*HPMHOOK_post_skill_validate_item_requirements) (struct config_setting_t *conf, struct s_skill_db *sk);
-typedef void (*HPMHOOK_pre_skill_validate_unit_target) (struct config_setting_t **conf, struct s_skill_db **sk);
-typedef void (*HPMHOOK_post_skill_validate_unit_target) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_equip_requirements_sub_item_amount) (struct config_setting_t **conf, struct s_skill_db **sk, int *item_index);
+typedef void (*HPMHOOK_post_skill_validate_equip_requirements_sub_item_amount) (struct config_setting_t *conf, struct s_skill_db *sk, int item_index);
+typedef void (*HPMHOOK_pre_skill_validate_equip_requirements_sub_items) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_equip_requirements_sub_items) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_equip_requirements_sub_any_flag) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_equip_requirements_sub_any_flag) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_equip_requirements) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_equip_requirements) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef int (*HPMHOOK_pre_skill_validate_requirements_item_name) (const char **name);
+typedef int (*HPMHOOK_post_skill_validate_requirements_item_name) (int retVal___, const char *name);
+typedef void (*HPMHOOK_pre_skill_validate_requirements) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_requirements) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef int (*HPMHOOK_pre_skill_validate_unit_id_sub) (int *unit_id);
+typedef int (*HPMHOOK_post_skill_validate_unit_id_sub) (int retVal___, int unit_id);
+typedef void (*HPMHOOK_pre_skill_validate_unit_id) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_unit_id) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_unit_layout) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_unit_layout) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_unit_range) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_unit_range) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_unit_interval) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_unit_interval) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef int (*HPMHOOK_pre_skill_validate_unit_flag_sub) (const char **type, bool *on, struct s_skill_db **sk);
+typedef int (*HPMHOOK_post_skill_validate_unit_flag_sub) (int retVal___, const char *type, bool on, struct s_skill_db *sk);
typedef void (*HPMHOOK_pre_skill_validate_unit_flag) (struct config_setting_t **conf, struct s_skill_db **sk);
typedef void (*HPMHOOK_post_skill_validate_unit_flag) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef int (*HPMHOOK_pre_skill_validate_unit_target_sub) (const char **target);
+typedef int (*HPMHOOK_post_skill_validate_unit_target_sub) (int retVal___, const char *target);
+typedef void (*HPMHOOK_pre_skill_validate_unit_target) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_unit_target) (struct config_setting_t *conf, struct s_skill_db *sk);
+typedef void (*HPMHOOK_pre_skill_validate_unit) (struct config_setting_t **conf, struct s_skill_db **sk);
+typedef void (*HPMHOOK_post_skill_validate_unit) (struct config_setting_t *conf, struct s_skill_db *sk);
typedef void (*HPMHOOK_pre_skill_validate_additional_fields) (struct config_setting_t **conf, struct s_skill_db **sk);
typedef void (*HPMHOOK_post_skill_validate_additional_fields) (struct config_setting_t *conf, struct s_skill_db *sk);
-typedef bool (*HPMHOOK_pre_skill_validate_skilldb) (struct s_skill_db **skt, const char **source);
-typedef bool (*HPMHOOK_post_skill_validate_skilldb) (bool retVal___, struct s_skill_db *skt, const char *source);
-typedef int (*HPMHOOK_pre_skill_validate_weapontype_sub) (const char **type, bool *on, struct s_skill_db **sk);
-typedef int (*HPMHOOK_post_skill_validate_weapontype_sub) (int retVal___, const char *type, bool on, struct s_skill_db *sk);
-typedef int (*HPMHOOK_pre_skill_validate_ammotype_sub) (const char **type, bool *on, struct s_skill_db **sk);
-typedef int (*HPMHOOK_post_skill_validate_ammotype_sub) (int retVal___, const char *type, bool on, struct s_skill_db *sk);
-typedef int (*HPMHOOK_pre_skill_validate_unit_flag_sub) (const char **type, bool *on, struct s_skill_db **sk);
-typedef int (*HPMHOOK_post_skill_validate_unit_flag_sub) (int retVal___, const char *type, bool on, struct s_skill_db *sk);
typedef bool (*HPMHOOK_pre_skill_read_skilldb) (const char **filename);
typedef bool (*HPMHOOK_post_skill_read_skilldb) (bool retVal___, const char *filename);
typedef void (*HPMHOOK_pre_skill_config_set_level) (struct config_setting_t **conf, int **arr);
@@ -7608,8 +7770,8 @@ typedef int (*HPMHOOK_pre_skill_attack_copy_unknown) (int **attack_type, struct
typedef int (*HPMHOOK_post_skill_attack_copy_unknown) (int retVal___, int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag);
typedef int (*HPMHOOK_pre_skill_attack_dir_unknown) (int **attack_type, struct block_list **src, struct block_list **dsrc, struct block_list **bl, uint16 **skill_id, uint16 **skill_lv, int64 **tick, int **flag);
typedef int (*HPMHOOK_post_skill_attack_dir_unknown) (int retVal___, int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag);
-typedef void (*HPMHOOK_pre_skill_attack_blow_unknown) (int **attack_type, struct block_list **src, struct block_list **dsrc, struct block_list **bl, uint16 **skill_id, uint16 **skill_lv, int64 **tick, int **flag, int **type, struct Damage **dmg, int64 **damage, int8 **dir);
-typedef void (*HPMHOOK_post_skill_attack_blow_unknown) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, int8 *dir);
+typedef void (*HPMHOOK_pre_skill_attack_blow_unknown) (int **attack_type, struct block_list **src, struct block_list **dsrc, struct block_list **bl, uint16 **skill_id, uint16 **skill_lv, int64 **tick, int **flag, int **type, struct Damage **dmg, int64 **damage, enum unit_dir **dir);
+typedef void (*HPMHOOK_post_skill_attack_blow_unknown) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, enum unit_dir *dir);
typedef void (*HPMHOOK_pre_skill_attack_post_unknown) (int **attack_type, struct block_list **src, struct block_list **dsrc, struct block_list **bl, uint16 **skill_id, uint16 **skill_lv, int64 **tick, int **flag);
typedef void (*HPMHOOK_post_skill_attack_post_unknown) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag);
typedef bool (*HPMHOOK_pre_skill_timerskill_dead_unknown) (struct block_list **src, struct unit_data **ud, struct skill_timerskill **skl);
@@ -7662,6 +7824,8 @@ typedef int (*HPMHOOK_pre_skill_check_npc_chaospanic) (struct block_list **bl, v
typedef int (*HPMHOOK_post_skill_check_npc_chaospanic) (int retVal___, struct block_list *bl, va_list args);
typedef int (*HPMHOOK_pre_skill_count_wos) (struct block_list **bl, va_list ap);
typedef int (*HPMHOOK_post_skill_count_wos) (int retVal___, struct block_list *bl, va_list ap);
+typedef int (*HPMHOOK_pre_skill_get_linked_song_dance_id) (int *skill_id);
+typedef int (*HPMHOOK_post_skill_get_linked_song_dance_id) (int retVal___, int skill_id);
#endif // MAP_SKILL_H
#ifdef COMMON_SOCKET_H /* sockt */
typedef void (*HPMHOOK_pre_sockt_init) (void);
@@ -7872,8 +8036,8 @@ typedef int (*HPMHOOK_pre_status_change_start) (struct block_list **src, struct
typedef int (*HPMHOOK_post_status_change_start) (int retVal___, struct block_list *src, struct block_list *bl, enum sc_type type, int rate, int val1, int val2, int val3, int val4, int tick, int flag);
typedef int (*HPMHOOK_pre_status_change_start_sub) (struct block_list **src, struct block_list **bl, enum sc_type *type, int *rate, int *val1, int *val2, int *val3, int *val4, int *tick, int *total_tick, int *flag);
typedef int (*HPMHOOK_post_status_change_start_sub) (int retVal___, struct block_list *src, struct block_list *bl, enum sc_type type, int rate, int val1, int val2, int val3, int val4, int tick, int total_tick, int flag);
-typedef int (*HPMHOOK_pre_status_change_end_) (struct block_list **bl, enum sc_type *type, int *tid, const char **file, int *line);
-typedef int (*HPMHOOK_post_status_change_end_) (int retVal___, struct block_list *bl, enum sc_type type, int tid, const char *file, int line);
+typedef int (*HPMHOOK_pre_status_change_end_) (struct block_list **bl, enum sc_type *type, int *tid);
+typedef int (*HPMHOOK_post_status_change_end_) (int retVal___, struct block_list *bl, enum sc_type type, int tid);
typedef bool (*HPMHOOK_pre_status_is_immune_to_status) (struct status_change **sc, enum sc_type *type);
typedef bool (*HPMHOOK_post_status_is_immune_to_status) (bool retVal___, struct status_change *sc, enum sc_type type);
typedef bool (*HPMHOOK_pre_status_is_boss_resist_sc) (enum sc_type *type);
@@ -8288,22 +8452,24 @@ typedef int (*HPMHOOK_pre_unit_final) (void);
typedef int (*HPMHOOK_post_unit_final) (int retVal___);
typedef struct unit_data* (*HPMHOOK_pre_unit_bl2ud) (struct block_list **bl);
typedef struct unit_data* (*HPMHOOK_post_unit_bl2ud) (struct unit_data* retVal___, struct block_list *bl);
+typedef const struct unit_data* (*HPMHOOK_pre_unit_cbl2ud) (const struct block_list **bl);
+typedef const struct unit_data* (*HPMHOOK_post_unit_cbl2ud) (const struct unit_data* retVal___, const struct block_list *bl);
typedef struct unit_data* (*HPMHOOK_pre_unit_bl2ud2) (struct block_list **bl);
typedef struct unit_data* (*HPMHOOK_post_unit_bl2ud2) (struct unit_data* retVal___, struct block_list *bl);
typedef void (*HPMHOOK_pre_unit_init_ud) (struct unit_data **ud);
typedef void (*HPMHOOK_post_unit_init_ud) (struct unit_data *ud);
typedef int (*HPMHOOK_pre_unit_attack_timer) (int *tid, int64 *tick, int *id, intptr_t *data);
typedef int (*HPMHOOK_post_unit_attack_timer) (int retVal___, int tid, int64 tick, int id, intptr_t data);
-typedef int (*HPMHOOK_pre_unit_walktoxy_timer) (int *tid, int64 *tick, int *id, intptr_t *data);
-typedef int (*HPMHOOK_post_unit_walktoxy_timer) (int retVal___, int tid, int64 tick, int id, intptr_t data);
-typedef int (*HPMHOOK_pre_unit_walktoxy_sub) (struct block_list **bl);
-typedef int (*HPMHOOK_post_unit_walktoxy_sub) (int retVal___, struct block_list *bl);
-typedef int (*HPMHOOK_pre_unit_delay_walktoxy_timer) (int *tid, int64 *tick, int *id, intptr_t *data);
-typedef int (*HPMHOOK_post_unit_delay_walktoxy_timer) (int retVal___, int tid, int64 tick, int id, intptr_t data);
-typedef int (*HPMHOOK_pre_unit_walktoxy) (struct block_list **bl, short *x, short *y, int *flag);
-typedef int (*HPMHOOK_post_unit_walktoxy) (int retVal___, struct block_list *bl, short x, short y, int flag);
-typedef int (*HPMHOOK_pre_unit_walktobl_sub) (int *tid, int64 *tick, int *id, intptr_t *data);
-typedef int (*HPMHOOK_post_unit_walktobl_sub) (int retVal___, int tid, int64 tick, int id, intptr_t data);
+typedef int (*HPMHOOK_pre_unit_walk_toxy_timer) (int *tid, int64 *tick, int *id, intptr_t *data);
+typedef int (*HPMHOOK_post_unit_walk_toxy_timer) (int retVal___, int tid, int64 tick, int id, intptr_t data);
+typedef int (*HPMHOOK_pre_unit_walk_toxy_sub) (struct block_list **bl);
+typedef int (*HPMHOOK_post_unit_walk_toxy_sub) (int retVal___, struct block_list *bl);
+typedef int (*HPMHOOK_pre_unit_delay_walk_toxy_timer) (int *tid, int64 *tick, int *id, intptr_t *data);
+typedef int (*HPMHOOK_post_unit_delay_walk_toxy_timer) (int retVal___, int tid, int64 tick, int id, intptr_t data);
+typedef int (*HPMHOOK_pre_unit_walk_toxy) (struct block_list **bl, short *x, short *y, int *flag);
+typedef int (*HPMHOOK_post_unit_walk_toxy) (int retVal___, struct block_list *bl, short x, short y, int flag);
+typedef int (*HPMHOOK_pre_unit_walktobl_timer) (int *tid, int64 *tick, int *id, intptr_t *data);
+typedef int (*HPMHOOK_post_unit_walktobl_timer) (int retVal___, int tid, int64 tick, int id, intptr_t data);
typedef int (*HPMHOOK_pre_unit_walktobl) (struct block_list **bl, struct block_list **tbl, int *range, int *flag);
typedef int (*HPMHOOK_post_unit_walktobl) (int retVal___, struct block_list *bl, struct block_list *tbl, int range, int flag);
typedef bool (*HPMHOOK_pre_unit_run) (struct block_list **bl, struct map_session_data **sd, enum sc_type *type);
@@ -8314,20 +8480,22 @@ typedef int (*HPMHOOK_pre_unit_escape) (struct block_list **bl, struct block_lis
typedef int (*HPMHOOK_post_unit_escape) (int retVal___, struct block_list *bl, struct block_list *target, short dist);
typedef int (*HPMHOOK_pre_unit_movepos) (struct block_list **bl, short *dst_x, short *dst_y, int *easy, bool *checkpath);
typedef int (*HPMHOOK_post_unit_movepos) (int retVal___, struct block_list *bl, short dst_x, short dst_y, int easy, bool checkpath);
-typedef int (*HPMHOOK_pre_unit_setdir) (struct block_list **bl, unsigned char *dir);
-typedef int (*HPMHOOK_post_unit_setdir) (int retVal___, struct block_list *bl, unsigned char dir);
-typedef uint8 (*HPMHOOK_pre_unit_getdir) (struct block_list **bl);
-typedef uint8 (*HPMHOOK_post_unit_getdir) (uint8 retVal___, struct block_list *bl);
+typedef int (*HPMHOOK_pre_unit_set_dir) (struct block_list **bl, enum unit_dir *dir);
+typedef int (*HPMHOOK_post_unit_set_dir) (int retVal___, struct block_list *bl, enum unit_dir dir);
+typedef enum unit_dir (*HPMHOOK_pre_unit_getdir) (const struct block_list **bl);
+typedef enum unit_dir (*HPMHOOK_post_unit_getdir) (enum unit_dir retVal___, const struct block_list *bl);
typedef int (*HPMHOOK_pre_unit_blown) (struct block_list **bl, int *dx, int *dy, int *count, int *flag);
typedef int (*HPMHOOK_post_unit_blown) (int retVal___, struct block_list *bl, int dx, int dy, int count, int flag);
typedef int (*HPMHOOK_pre_unit_warp) (struct block_list **bl, short *m, short *x, short *y, enum clr_type *type);
typedef int (*HPMHOOK_post_unit_warp) (int retVal___, struct block_list *bl, short m, short x, short y, enum clr_type type);
+typedef int (*HPMHOOK_pre_unit_warpto_master) (struct block_list **master_bl, struct block_list **slave_bl);
+typedef int (*HPMHOOK_post_unit_warpto_master) (int retVal___, struct block_list *master_bl, struct block_list *slave_bl);
typedef int (*HPMHOOK_pre_unit_stop_walking) (struct block_list **bl, int *type);
typedef int (*HPMHOOK_post_unit_stop_walking) (int retVal___, struct block_list *bl, int type);
typedef int (*HPMHOOK_pre_unit_skilluse_id) (struct block_list **src, int *target_id, uint16 *skill_id, uint16 *skill_lv);
typedef int (*HPMHOOK_post_unit_skilluse_id) (int retVal___, struct block_list *src, int target_id, uint16 skill_id, uint16 skill_lv);
-typedef int (*HPMHOOK_pre_unit_step_timer) (int *tid, int64 *tick, int *id, intptr_t *data);
-typedef int (*HPMHOOK_post_unit_step_timer) (int retVal___, int tid, int64 tick, int id, intptr_t data);
+typedef int (*HPMHOOK_pre_unit_steptimer) (int *tid, int64 *tick, int *id, intptr_t *data);
+typedef int (*HPMHOOK_post_unit_steptimer) (int retVal___, int tid, int64 tick, int id, intptr_t data);
typedef void (*HPMHOOK_pre_unit_stop_stepaction) (struct block_list **bl);
typedef void (*HPMHOOK_post_unit_stop_stepaction) (struct block_list *bl);
typedef int (*HPMHOOK_pre_unit_is_walking) (struct block_list **bl);
@@ -8358,8 +8526,8 @@ typedef bool (*HPMHOOK_pre_unit_can_reach_pos) (struct block_list **bl, int *x,
typedef bool (*HPMHOOK_post_unit_can_reach_pos) (bool retVal___, struct block_list *bl, int x, int y, int easy);
typedef bool (*HPMHOOK_pre_unit_can_reach_bl) (struct block_list **bl, struct block_list **tbl, int *range, int *easy, short **x, short **y);
typedef bool (*HPMHOOK_post_unit_can_reach_bl) (bool retVal___, struct block_list *bl, struct block_list *tbl, int range, int easy, short *x, short *y);
-typedef int (*HPMHOOK_pre_unit_calc_pos) (struct block_list **bl, int *tx, int *ty, uint8 *dir);
-typedef int (*HPMHOOK_post_unit_calc_pos) (int retVal___, struct block_list *bl, int tx, int ty, uint8 dir);
+typedef int (*HPMHOOK_pre_unit_calc_pos) (struct block_list **bl, int *tx, int *ty, enum unit_dir *dir);
+typedef int (*HPMHOOK_post_unit_calc_pos) (int retVal___, struct block_list *bl, int tx, int ty, enum unit_dir dir);
typedef int (*HPMHOOK_pre_unit_attack_timer_sub) (struct block_list **src, int *tid, int64 *tick);
typedef int (*HPMHOOK_post_unit_attack_timer_sub) (int retVal___, struct block_list *src, int tid, int64 tick);
typedef int (*HPMHOOK_pre_unit_skillcastcancel) (struct block_list **bl, int *type);
diff --git a/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
index 20f57dcb9..ab34a4f18 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
@@ -1308,6 +1308,10 @@ struct {
struct HPMHookPoint *HP_mutex_cond_signal_post;
struct HPMHookPoint *HP_mutex_cond_broadcast_pre;
struct HPMHookPoint *HP_mutex_cond_broadcast_post;
+ struct HPMHookPoint *HP_nullpo_init_pre;
+ struct HPMHookPoint *HP_nullpo_init_post;
+ struct HPMHookPoint *HP_nullpo_final_pre;
+ struct HPMHookPoint *HP_nullpo_final_post;
struct HPMHookPoint *HP_nullpo_assert_report_pre;
struct HPMHookPoint *HP_nullpo_assert_report_post;
struct HPMHookPoint *HP_packets_init_pre;
@@ -2933,6 +2937,10 @@ struct {
int HP_mutex_cond_signal_post;
int HP_mutex_cond_broadcast_pre;
int HP_mutex_cond_broadcast_post;
+ int HP_nullpo_init_pre;
+ int HP_nullpo_init_post;
+ int HP_nullpo_final_pre;
+ int HP_nullpo_final_post;
int HP_nullpo_assert_report_pre;
int HP_nullpo_assert_report_post;
int HP_packets_init_pre;
diff --git a/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
index e8e211f8b..238580b83 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
@@ -696,6 +696,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(mutex->cond_signal, HP_mutex_cond_signal) },
{ HP_POP(mutex->cond_broadcast, HP_mutex_cond_broadcast) },
/* nullpo_interface */
+ { HP_POP(nullpo->init, HP_nullpo_init) },
+ { HP_POP(nullpo->final, HP_nullpo_final) },
{ HP_POP(nullpo->assert_report, HP_nullpo_assert_report) },
/* packets_interface */
{ HP_POP(packets->init, HP_packets_init) },
diff --git a/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
index a022abb54..8c1dec681 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
@@ -17160,6 +17160,58 @@ void HP_mutex_cond_broadcast(struct cond_data *c) {
return;
}
/* nullpo_interface */
+void HP_nullpo_init(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_nullpo_init_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_nullpo_init_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_nullpo_init_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.nullpo.init();
+ }
+ if (HPMHooks.count.HP_nullpo_init_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_nullpo_init_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_nullpo_init_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
+void HP_nullpo_final(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_nullpo_final_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_nullpo_final_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_nullpo_final_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.nullpo.final();
+ }
+ if (HPMHooks.count.HP_nullpo_final_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_nullpo_final_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_nullpo_final_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
void HP_nullpo_assert_report(const char *file, int line, const char *func, const char *targetname, const char *title) {
int hIndex = 0;
if (HPMHooks.count.HP_nullpo_assert_report_pre > 0) {
diff --git a/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc
index c638a1ef6..2875df334 100644
--- a/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc
@@ -520,6 +520,10 @@ struct {
struct HPMHookPoint *HP_mutex_cond_signal_post;
struct HPMHookPoint *HP_mutex_cond_broadcast_pre;
struct HPMHookPoint *HP_mutex_cond_broadcast_post;
+ struct HPMHookPoint *HP_nullpo_init_pre;
+ struct HPMHookPoint *HP_nullpo_init_post;
+ struct HPMHookPoint *HP_nullpo_final_pre;
+ struct HPMHookPoint *HP_nullpo_final_post;
struct HPMHookPoint *HP_nullpo_assert_report_pre;
struct HPMHookPoint *HP_nullpo_assert_report_post;
struct HPMHookPoint *HP_packets_init_pre;
@@ -1325,6 +1329,10 @@ struct {
int HP_mutex_cond_signal_post;
int HP_mutex_cond_broadcast_pre;
int HP_mutex_cond_broadcast_post;
+ int HP_nullpo_init_pre;
+ int HP_nullpo_init_post;
+ int HP_nullpo_final_pre;
+ int HP_nullpo_final_post;
int HP_nullpo_assert_report_pre;
int HP_nullpo_assert_report_post;
int HP_packets_init_pre;
diff --git a/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc
index ef6081f41..61864325b 100644
--- a/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc
@@ -290,6 +290,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(mutex->cond_signal, HP_mutex_cond_signal) },
{ HP_POP(mutex->cond_broadcast, HP_mutex_cond_broadcast) },
/* nullpo_interface */
+ { HP_POP(nullpo->init, HP_nullpo_init) },
+ { HP_POP(nullpo->final, HP_nullpo_final) },
{ HP_POP(nullpo->assert_report, HP_nullpo_assert_report) },
/* packets_interface */
{ HP_POP(packets->init, HP_packets_init) },
diff --git a/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc
index 20c709bce..1c1817276 100644
--- a/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc
@@ -6638,6 +6638,58 @@ void HP_mutex_cond_broadcast(struct cond_data *c) {
return;
}
/* nullpo_interface */
+void HP_nullpo_init(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_nullpo_init_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_nullpo_init_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_nullpo_init_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.nullpo.init();
+ }
+ if (HPMHooks.count.HP_nullpo_init_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_nullpo_init_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_nullpo_init_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
+void HP_nullpo_final(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_nullpo_final_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_nullpo_final_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_nullpo_final_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.nullpo.final();
+ }
+ if (HPMHooks.count.HP_nullpo_final_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_nullpo_final_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_nullpo_final_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
void HP_nullpo_assert_report(const char *file, int line, const char *func, const char *targetname, const char *title) {
int hIndex = 0;
if (HPMHooks.count.HP_nullpo_assert_report_pre > 0) {
diff --git a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
index 6d8776f18..62d2327da 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
@@ -1000,6 +1000,10 @@ struct {
struct HPMHookPoint *HP_clif_chatname_ack_post;
struct HPMHookPoint *HP_clif_elemname_ack_pre;
struct HPMHookPoint *HP_clif_elemname_ack_post;
+ struct HPMHookPoint *HP_clif_skillname_ack_pre;
+ struct HPMHookPoint *HP_clif_skillname_ack_post;
+ struct HPMHookPoint *HP_clif_itemname_ack_pre;
+ struct HPMHookPoint *HP_clif_itemname_ack_post;
struct HPMHookPoint *HP_clif_unknownname_ack_pre;
struct HPMHookPoint *HP_clif_unknownname_ack_post;
struct HPMHookPoint *HP_clif_monster_hp_bar_pre;
@@ -2260,6 +2264,8 @@ struct {
struct HPMHookPoint *HP_clif_attendance_getendtime_post;
struct HPMHookPoint *HP_clif_pOpenUIRequest_pre;
struct HPMHookPoint *HP_clif_pOpenUIRequest_post;
+ struct HPMHookPoint *HP_clif_open_ui_send_pre;
+ struct HPMHookPoint *HP_clif_open_ui_send_post;
struct HPMHookPoint *HP_clif_open_ui_pre;
struct HPMHookPoint *HP_clif_open_ui_post;
struct HPMHookPoint *HP_clif_pAttendanceRewardRequest_pre;
@@ -2352,6 +2358,14 @@ struct {
struct HPMHookPoint *HP_clif_plapineDdukDdak_ack_post;
struct HPMHookPoint *HP_clif_plapineDdukDdak_close_pre;
struct HPMHookPoint *HP_clif_plapineDdukDdak_close_post;
+ struct HPMHookPoint *HP_clif_lapineUpgrade_open_pre;
+ struct HPMHookPoint *HP_clif_lapineUpgrade_open_post;
+ struct HPMHookPoint *HP_clif_lapineUpgrade_result_pre;
+ struct HPMHookPoint *HP_clif_lapineUpgrade_result_post;
+ struct HPMHookPoint *HP_clif_pLapineUpgrade_close_pre;
+ struct HPMHookPoint *HP_clif_pLapineUpgrade_close_post;
+ struct HPMHookPoint *HP_clif_pLapineUpgrade_makeItem_pre;
+ struct HPMHookPoint *HP_clif_pLapineUpgrade_makeItem_post;
struct HPMHookPoint *HP_clif_pReqGearOff_pre;
struct HPMHookPoint *HP_clif_pReqGearOff_post;
struct HPMHookPoint *HP_cmdline_init_pre;
@@ -3816,20 +3830,32 @@ struct {
struct HPMHookPoint *HP_mapit_prev_post;
struct HPMHookPoint *HP_mapit_exists_pre;
struct HPMHookPoint *HP_mapit_exists_post;
- struct HPMHookPoint *HP_mapreg_init_pre;
- struct HPMHookPoint *HP_mapreg_init_post;
- struct HPMHookPoint *HP_mapreg_final_pre;
- struct HPMHookPoint *HP_mapreg_final_post;
struct HPMHookPoint *HP_mapreg_readreg_pre;
struct HPMHookPoint *HP_mapreg_readreg_post;
struct HPMHookPoint *HP_mapreg_readregstr_pre;
struct HPMHookPoint *HP_mapreg_readregstr_post;
+ struct HPMHookPoint *HP_mapreg_set_num_db_pre;
+ struct HPMHookPoint *HP_mapreg_set_num_db_post;
+ struct HPMHookPoint *HP_mapreg_delete_num_db_pre;
+ struct HPMHookPoint *HP_mapreg_delete_num_db_post;
struct HPMHookPoint *HP_mapreg_setreg_pre;
struct HPMHookPoint *HP_mapreg_setreg_post;
+ struct HPMHookPoint *HP_mapreg_set_str_db_pre;
+ struct HPMHookPoint *HP_mapreg_set_str_db_post;
+ struct HPMHookPoint *HP_mapreg_delete_str_db_pre;
+ struct HPMHookPoint *HP_mapreg_delete_str_db_post;
struct HPMHookPoint *HP_mapreg_setregstr_pre;
struct HPMHookPoint *HP_mapreg_setregstr_post;
+ struct HPMHookPoint *HP_mapreg_load_num_db_pre;
+ struct HPMHookPoint *HP_mapreg_load_num_db_post;
+ struct HPMHookPoint *HP_mapreg_load_str_db_pre;
+ struct HPMHookPoint *HP_mapreg_load_str_db_post;
struct HPMHookPoint *HP_mapreg_load_pre;
struct HPMHookPoint *HP_mapreg_load_post;
+ struct HPMHookPoint *HP_mapreg_save_num_db_pre;
+ struct HPMHookPoint *HP_mapreg_save_num_db_post;
+ struct HPMHookPoint *HP_mapreg_save_str_db_pre;
+ struct HPMHookPoint *HP_mapreg_save_str_db_post;
struct HPMHookPoint *HP_mapreg_save_pre;
struct HPMHookPoint *HP_mapreg_save_post;
struct HPMHookPoint *HP_mapreg_save_timer_pre;
@@ -3838,8 +3864,12 @@ struct {
struct HPMHookPoint *HP_mapreg_destroyreg_post;
struct HPMHookPoint *HP_mapreg_reload_pre;
struct HPMHookPoint *HP_mapreg_reload_post;
- struct HPMHookPoint *HP_mapreg_config_read_pre;
- struct HPMHookPoint *HP_mapreg_config_read_post;
+ struct HPMHookPoint *HP_mapreg_config_read_registry_pre;
+ struct HPMHookPoint *HP_mapreg_config_read_registry_post;
+ struct HPMHookPoint *HP_mapreg_final_pre;
+ struct HPMHookPoint *HP_mapreg_final_post;
+ struct HPMHookPoint *HP_mapreg_init_pre;
+ struct HPMHookPoint *HP_mapreg_init_post;
struct HPMHookPoint *HP_md5_string_pre;
struct HPMHookPoint *HP_md5_string_post;
struct HPMHookPoint *HP_md5_binary_pre;
@@ -4420,6 +4450,10 @@ struct {
struct HPMHookPoint *HP_npc_questinfo_clear_post;
struct HPMHookPoint *HP_npc_secure_timeout_timer_pre;
struct HPMHookPoint *HP_npc_secure_timeout_timer_post;
+ struct HPMHookPoint *HP_nullpo_init_pre;
+ struct HPMHookPoint *HP_nullpo_init_post;
+ struct HPMHookPoint *HP_nullpo_final_pre;
+ struct HPMHookPoint *HP_nullpo_final_post;
struct HPMHookPoint *HP_nullpo_assert_report_pre;
struct HPMHookPoint *HP_nullpo_assert_report_post;
struct HPMHookPoint *HP_packets_init_pre;
@@ -4764,8 +4798,14 @@ struct {
struct HPMHookPoint *HP_pc_checkitem_post;
struct HPMHookPoint *HP_pc_useitem_pre;
struct HPMHookPoint *HP_pc_useitem_post;
- struct HPMHookPoint *HP_pc_itemskill_clear_pre;
- struct HPMHookPoint *HP_pc_itemskill_clear_post;
+ struct HPMHookPoint *HP_pc_autocast_clear_current_pre;
+ struct HPMHookPoint *HP_pc_autocast_clear_current_post;
+ struct HPMHookPoint *HP_pc_autocast_clear_pre;
+ struct HPMHookPoint *HP_pc_autocast_clear_post;
+ struct HPMHookPoint *HP_pc_autocast_set_current_pre;
+ struct HPMHookPoint *HP_pc_autocast_set_current_post;
+ struct HPMHookPoint *HP_pc_autocast_remove_pre;
+ struct HPMHookPoint *HP_pc_autocast_remove_post;
struct HPMHookPoint *HP_pc_skillatk_bonus_pre;
struct HPMHookPoint *HP_pc_skillatk_bonus_post;
struct HPMHookPoint *HP_pc_skillheal_bonus_pre;
@@ -4786,6 +4826,10 @@ struct {
struct HPMHookPoint *HP_pc_percentheal_post;
struct HPMHookPoint *HP_pc_jobchange_pre;
struct HPMHookPoint *HP_pc_jobchange_post;
+ struct HPMHookPoint *HP_pc_hide_pre;
+ struct HPMHookPoint *HP_pc_hide_post;
+ struct HPMHookPoint *HP_pc_unhide_pre;
+ struct HPMHookPoint *HP_pc_unhide_post;
struct HPMHookPoint *HP_pc_setoption_pre;
struct HPMHookPoint *HP_pc_setoption_post;
struct HPMHookPoint *HP_pc_setcart_pre;
@@ -5072,6 +5116,10 @@ struct {
struct HPMHookPoint *HP_pet_final_post;
struct HPMHookPoint *HP_pet_hungry_val_pre;
struct HPMHookPoint *HP_pet_hungry_val_post;
+ struct HPMHookPoint *HP_pet_set_hunger_pre;
+ struct HPMHookPoint *HP_pet_set_hunger_post;
+ struct HPMHookPoint *HP_pet_get_card4_value_pre;
+ struct HPMHookPoint *HP_pet_get_card4_value_post;
struct HPMHookPoint *HP_pet_set_intimate_pre;
struct HPMHookPoint *HP_pet_set_intimate_post;
struct HPMHookPoint *HP_pet_create_egg_pre;
@@ -5096,6 +5144,8 @@ struct {
struct HPMHookPoint *HP_pet_return_egg_post;
struct HPMHookPoint *HP_pet_data_init_pre;
struct HPMHookPoint *HP_pet_data_init_post;
+ struct HPMHookPoint *HP_pet_spawn_pre;
+ struct HPMHookPoint *HP_pet_spawn_post;
struct HPMHookPoint *HP_pet_birth_process_pre;
struct HPMHookPoint *HP_pet_birth_process_post;
struct HPMHookPoint *HP_pet_recv_petdata_pre;
@@ -5432,6 +5482,8 @@ struct {
struct HPMHookPoint *HP_script_parse_syntax_close_sub_post;
struct HPMHookPoint *HP_script_parse_syntax_pre;
struct HPMHookPoint *HP_script_parse_syntax_post;
+ struct HPMHookPoint *HP_script_parse_syntax_function_pre;
+ struct HPMHookPoint *HP_script_parse_syntax_function_post;
struct HPMHookPoint *HP_script_get_com_pre;
struct HPMHookPoint *HP_script_get_com_post;
struct HPMHookPoint *HP_script_get_num_pre;
@@ -5496,6 +5548,8 @@ struct {
struct HPMHookPoint *HP_script_print_line_post;
struct HPMHookPoint *HP_script_errorwarning_sub_pre;
struct HPMHookPoint *HP_script_errorwarning_sub_post;
+ struct HPMHookPoint *HP_script_is_permanent_variable_pre;
+ struct HPMHookPoint *HP_script_is_permanent_variable_post;
struct HPMHookPoint *HP_script_set_reg_pre;
struct HPMHookPoint *HP_script_set_reg_post;
struct HPMHookPoint *HP_script_set_reg_ref_str_pre;
@@ -5728,6 +5782,8 @@ struct {
struct HPMHookPoint *HP_skill_get_hp_post;
struct HPMHookPoint *HP_skill_get_mhp_pre;
struct HPMHookPoint *HP_skill_get_mhp_post;
+ struct HPMHookPoint *HP_skill_get_msp_pre;
+ struct HPMHookPoint *HP_skill_get_msp_post;
struct HPMHookPoint *HP_skill_get_sp_pre;
struct HPMHookPoint *HP_skill_get_sp_post;
struct HPMHookPoint *HP_skill_get_hp_rate_pre;
@@ -5738,10 +5794,20 @@ struct {
struct HPMHookPoint *HP_skill_get_state_post;
struct HPMHookPoint *HP_skill_get_spiritball_pre;
struct HPMHookPoint *HP_skill_get_spiritball_post;
+ struct HPMHookPoint *HP_skill_get_item_index_pre;
+ struct HPMHookPoint *HP_skill_get_item_index_post;
struct HPMHookPoint *HP_skill_get_itemid_pre;
struct HPMHookPoint *HP_skill_get_itemid_post;
struct HPMHookPoint *HP_skill_get_itemqty_pre;
struct HPMHookPoint *HP_skill_get_itemqty_post;
+ struct HPMHookPoint *HP_skill_get_item_any_flag_pre;
+ struct HPMHookPoint *HP_skill_get_item_any_flag_post;
+ struct HPMHookPoint *HP_skill_get_equip_id_pre;
+ struct HPMHookPoint *HP_skill_get_equip_id_post;
+ struct HPMHookPoint *HP_skill_get_equip_amount_pre;
+ struct HPMHookPoint *HP_skill_get_equip_amount_post;
+ struct HPMHookPoint *HP_skill_get_equip_any_flag_pre;
+ struct HPMHookPoint *HP_skill_get_equip_any_flag_post;
struct HPMHookPoint *HP_skill_get_zeny_pre;
struct HPMHookPoint *HP_skill_get_zeny_post;
struct HPMHookPoint *HP_skill_get_num_pre;
@@ -5856,12 +5922,18 @@ struct {
struct HPMHookPoint *HP_skill_vf_cast_fix_post;
struct HPMHookPoint *HP_skill_delay_fix_pre;
struct HPMHookPoint *HP_skill_delay_fix_post;
- struct HPMHookPoint *HP_skill_is_item_skill_pre;
- struct HPMHookPoint *HP_skill_is_item_skill_post;
+ struct HPMHookPoint *HP_skill_check_condition_required_equip_pre;
+ struct HPMHookPoint *HP_skill_check_condition_required_equip_post;
struct HPMHookPoint *HP_skill_check_condition_castbegin_pre;
struct HPMHookPoint *HP_skill_check_condition_castbegin_post;
+ struct HPMHookPoint *HP_skill_check_condition_required_items_pre;
+ struct HPMHookPoint *HP_skill_check_condition_required_items_post;
+ struct HPMHookPoint *HP_skill_items_required_pre;
+ struct HPMHookPoint *HP_skill_items_required_post;
struct HPMHookPoint *HP_skill_check_condition_castend_pre;
struct HPMHookPoint *HP_skill_check_condition_castend_post;
+ struct HPMHookPoint *HP_skill_get_any_item_index_pre;
+ struct HPMHookPoint *HP_skill_get_any_item_index_post;
struct HPMHookPoint *HP_skill_consume_requirement_pre;
struct HPMHookPoint *HP_skill_consume_requirement_post;
struct HPMHookPoint *HP_skill_get_requirement_pre;
@@ -5908,6 +5980,8 @@ struct {
struct HPMHookPoint *HP_skill_not_ok_hom_unknown_post;
struct HPMHookPoint *HP_skill_not_ok_mercenary_pre;
struct HPMHookPoint *HP_skill_not_ok_mercenary_post;
+ struct HPMHookPoint *HP_skill_validate_autocast_data_pre;
+ struct HPMHookPoint *HP_skill_validate_autocast_data_post;
struct HPMHookPoint *HP_skill_chastle_mob_changetarget_pre;
struct HPMHookPoint *HP_skill_chastle_mob_changetarget_post;
struct HPMHookPoint *HP_skill_can_produce_mix_pre;
@@ -6028,42 +6102,130 @@ struct {
struct HPMHookPoint *HP_skill_init_unit_layout_post;
struct HPMHookPoint *HP_skill_init_unit_layout_unknown_pre;
struct HPMHookPoint *HP_skill_init_unit_layout_unknown_post;
+ struct HPMHookPoint *HP_skill_validate_id_pre;
+ struct HPMHookPoint *HP_skill_validate_id_post;
+ struct HPMHookPoint *HP_skill_name_contains_invalid_character_pre;
+ struct HPMHookPoint *HP_skill_name_contains_invalid_character_post;
+ struct HPMHookPoint *HP_skill_validate_name_pre;
+ struct HPMHookPoint *HP_skill_validate_name_post;
+ struct HPMHookPoint *HP_skill_validate_max_level_pre;
+ struct HPMHookPoint *HP_skill_validate_max_level_post;
+ struct HPMHookPoint *HP_skill_validate_description_pre;
+ struct HPMHookPoint *HP_skill_validate_description_post;
+ struct HPMHookPoint *HP_skill_validate_range_pre;
+ struct HPMHookPoint *HP_skill_validate_range_post;
struct HPMHookPoint *HP_skill_validate_hittype_pre;
struct HPMHookPoint *HP_skill_validate_hittype_post;
struct HPMHookPoint *HP_skill_validate_skilltype_pre;
struct HPMHookPoint *HP_skill_validate_skilltype_post;
+ struct HPMHookPoint *HP_skill_validate_skillinfo_pre;
+ struct HPMHookPoint *HP_skill_validate_skillinfo_post;
struct HPMHookPoint *HP_skill_validate_attacktype_pre;
struct HPMHookPoint *HP_skill_validate_attacktype_post;
struct HPMHookPoint *HP_skill_validate_element_pre;
struct HPMHookPoint *HP_skill_validate_element_post;
- struct HPMHookPoint *HP_skill_validate_skillinfo_pre;
- struct HPMHookPoint *HP_skill_validate_skillinfo_post;
struct HPMHookPoint *HP_skill_validate_damagetype_pre;
struct HPMHookPoint *HP_skill_validate_damagetype_post;
+ struct HPMHookPoint *HP_skill_validate_splash_range_pre;
+ struct HPMHookPoint *HP_skill_validate_splash_range_post;
+ struct HPMHookPoint *HP_skill_validate_number_of_hits_pre;
+ struct HPMHookPoint *HP_skill_validate_number_of_hits_post;
+ struct HPMHookPoint *HP_skill_validate_interrupt_cast_pre;
+ struct HPMHookPoint *HP_skill_validate_interrupt_cast_post;
+ struct HPMHookPoint *HP_skill_validate_cast_def_rate_pre;
+ struct HPMHookPoint *HP_skill_validate_cast_def_rate_post;
+ struct HPMHookPoint *HP_skill_validate_number_of_instances_pre;
+ struct HPMHookPoint *HP_skill_validate_number_of_instances_post;
+ struct HPMHookPoint *HP_skill_validate_knock_back_tiles_pre;
+ struct HPMHookPoint *HP_skill_validate_knock_back_tiles_post;
+ struct HPMHookPoint *HP_skill_validate_cast_time_pre;
+ struct HPMHookPoint *HP_skill_validate_cast_time_post;
+ struct HPMHookPoint *HP_skill_validate_act_delay_pre;
+ struct HPMHookPoint *HP_skill_validate_act_delay_post;
+ struct HPMHookPoint *HP_skill_validate_walk_delay_pre;
+ struct HPMHookPoint *HP_skill_validate_walk_delay_post;
+ struct HPMHookPoint *HP_skill_validate_skill_data1_pre;
+ struct HPMHookPoint *HP_skill_validate_skill_data1_post;
+ struct HPMHookPoint *HP_skill_validate_skill_data2_pre;
+ struct HPMHookPoint *HP_skill_validate_skill_data2_post;
+ struct HPMHookPoint *HP_skill_validate_cooldown_pre;
+ struct HPMHookPoint *HP_skill_validate_cooldown_post;
+ struct HPMHookPoint *HP_skill_validate_fixed_cast_time_pre;
+ struct HPMHookPoint *HP_skill_validate_fixed_cast_time_post;
struct HPMHookPoint *HP_skill_validate_castnodex_pre;
struct HPMHookPoint *HP_skill_validate_castnodex_post;
+ struct HPMHookPoint *HP_skill_validate_hp_cost_pre;
+ struct HPMHookPoint *HP_skill_validate_hp_cost_post;
+ struct HPMHookPoint *HP_skill_validate_sp_cost_pre;
+ struct HPMHookPoint *HP_skill_validate_sp_cost_post;
+ struct HPMHookPoint *HP_skill_validate_hp_rate_cost_pre;
+ struct HPMHookPoint *HP_skill_validate_hp_rate_cost_post;
+ struct HPMHookPoint *HP_skill_validate_sp_rate_cost_pre;
+ struct HPMHookPoint *HP_skill_validate_sp_rate_cost_post;
+ struct HPMHookPoint *HP_skill_validate_max_hp_trigger_pre;
+ struct HPMHookPoint *HP_skill_validate_max_hp_trigger_post;
+ struct HPMHookPoint *HP_skill_validate_max_sp_trigger_pre;
+ struct HPMHookPoint *HP_skill_validate_max_sp_trigger_post;
+ struct HPMHookPoint *HP_skill_validate_zeny_cost_pre;
+ struct HPMHookPoint *HP_skill_validate_zeny_cost_post;
+ struct HPMHookPoint *HP_skill_validate_weapontype_sub_pre;
+ struct HPMHookPoint *HP_skill_validate_weapontype_sub_post;
struct HPMHookPoint *HP_skill_validate_weapontype_pre;
struct HPMHookPoint *HP_skill_validate_weapontype_post;
+ struct HPMHookPoint *HP_skill_validate_ammotype_sub_pre;
+ struct HPMHookPoint *HP_skill_validate_ammotype_sub_post;
struct HPMHookPoint *HP_skill_validate_ammotype_pre;
struct HPMHookPoint *HP_skill_validate_ammotype_post;
+ struct HPMHookPoint *HP_skill_validate_ammo_amount_pre;
+ struct HPMHookPoint *HP_skill_validate_ammo_amount_post;
+ struct HPMHookPoint *HP_skill_validate_state_sub_pre;
+ struct HPMHookPoint *HP_skill_validate_state_sub_post;
struct HPMHookPoint *HP_skill_validate_state_pre;
struct HPMHookPoint *HP_skill_validate_state_post;
+ struct HPMHookPoint *HP_skill_validate_spirit_sphere_cost_pre;
+ struct HPMHookPoint *HP_skill_validate_spirit_sphere_cost_post;
+ struct HPMHookPoint *HP_skill_validate_item_requirements_sub_item_amount_pre;
+ struct HPMHookPoint *HP_skill_validate_item_requirements_sub_item_amount_post;
+ struct HPMHookPoint *HP_skill_validate_item_requirements_sub_items_pre;
+ struct HPMHookPoint *HP_skill_validate_item_requirements_sub_items_post;
+ struct HPMHookPoint *HP_skill_validate_item_requirements_sub_any_flag_pre;
+ struct HPMHookPoint *HP_skill_validate_item_requirements_sub_any_flag_post;
struct HPMHookPoint *HP_skill_validate_item_requirements_pre;
struct HPMHookPoint *HP_skill_validate_item_requirements_post;
- struct HPMHookPoint *HP_skill_validate_unit_target_pre;
- struct HPMHookPoint *HP_skill_validate_unit_target_post;
+ struct HPMHookPoint *HP_skill_validate_equip_requirements_sub_item_amount_pre;
+ struct HPMHookPoint *HP_skill_validate_equip_requirements_sub_item_amount_post;
+ struct HPMHookPoint *HP_skill_validate_equip_requirements_sub_items_pre;
+ struct HPMHookPoint *HP_skill_validate_equip_requirements_sub_items_post;
+ struct HPMHookPoint *HP_skill_validate_equip_requirements_sub_any_flag_pre;
+ struct HPMHookPoint *HP_skill_validate_equip_requirements_sub_any_flag_post;
+ struct HPMHookPoint *HP_skill_validate_equip_requirements_pre;
+ struct HPMHookPoint *HP_skill_validate_equip_requirements_post;
+ struct HPMHookPoint *HP_skill_validate_requirements_item_name_pre;
+ struct HPMHookPoint *HP_skill_validate_requirements_item_name_post;
+ struct HPMHookPoint *HP_skill_validate_requirements_pre;
+ struct HPMHookPoint *HP_skill_validate_requirements_post;
+ struct HPMHookPoint *HP_skill_validate_unit_id_sub_pre;
+ struct HPMHookPoint *HP_skill_validate_unit_id_sub_post;
+ struct HPMHookPoint *HP_skill_validate_unit_id_pre;
+ struct HPMHookPoint *HP_skill_validate_unit_id_post;
+ struct HPMHookPoint *HP_skill_validate_unit_layout_pre;
+ struct HPMHookPoint *HP_skill_validate_unit_layout_post;
+ struct HPMHookPoint *HP_skill_validate_unit_range_pre;
+ struct HPMHookPoint *HP_skill_validate_unit_range_post;
+ struct HPMHookPoint *HP_skill_validate_unit_interval_pre;
+ struct HPMHookPoint *HP_skill_validate_unit_interval_post;
+ struct HPMHookPoint *HP_skill_validate_unit_flag_sub_pre;
+ struct HPMHookPoint *HP_skill_validate_unit_flag_sub_post;
struct HPMHookPoint *HP_skill_validate_unit_flag_pre;
struct HPMHookPoint *HP_skill_validate_unit_flag_post;
+ struct HPMHookPoint *HP_skill_validate_unit_target_sub_pre;
+ struct HPMHookPoint *HP_skill_validate_unit_target_sub_post;
+ struct HPMHookPoint *HP_skill_validate_unit_target_pre;
+ struct HPMHookPoint *HP_skill_validate_unit_target_post;
+ struct HPMHookPoint *HP_skill_validate_unit_pre;
+ struct HPMHookPoint *HP_skill_validate_unit_post;
struct HPMHookPoint *HP_skill_validate_additional_fields_pre;
struct HPMHookPoint *HP_skill_validate_additional_fields_post;
- struct HPMHookPoint *HP_skill_validate_skilldb_pre;
- struct HPMHookPoint *HP_skill_validate_skilldb_post;
- struct HPMHookPoint *HP_skill_validate_weapontype_sub_pre;
- struct HPMHookPoint *HP_skill_validate_weapontype_sub_post;
- struct HPMHookPoint *HP_skill_validate_ammotype_sub_pre;
- struct HPMHookPoint *HP_skill_validate_ammotype_sub_post;
- struct HPMHookPoint *HP_skill_validate_unit_flag_sub_pre;
- struct HPMHookPoint *HP_skill_validate_unit_flag_sub_post;
struct HPMHookPoint *HP_skill_read_skilldb_pre;
struct HPMHookPoint *HP_skill_read_skilldb_post;
struct HPMHookPoint *HP_skill_config_set_level_pre;
@@ -6186,6 +6348,8 @@ struct {
struct HPMHookPoint *HP_skill_check_npc_chaospanic_post;
struct HPMHookPoint *HP_skill_count_wos_pre;
struct HPMHookPoint *HP_skill_count_wos_post;
+ struct HPMHookPoint *HP_skill_get_linked_song_dance_id_pre;
+ struct HPMHookPoint *HP_skill_get_linked_song_dance_id_post;
struct HPMHookPoint *HP_sockt_init_pre;
struct HPMHookPoint *HP_sockt_init_post;
struct HPMHookPoint *HP_sockt_final_pre;
@@ -6786,22 +6950,24 @@ struct {
struct HPMHookPoint *HP_unit_final_post;
struct HPMHookPoint *HP_unit_bl2ud_pre;
struct HPMHookPoint *HP_unit_bl2ud_post;
+ struct HPMHookPoint *HP_unit_cbl2ud_pre;
+ struct HPMHookPoint *HP_unit_cbl2ud_post;
struct HPMHookPoint *HP_unit_bl2ud2_pre;
struct HPMHookPoint *HP_unit_bl2ud2_post;
struct HPMHookPoint *HP_unit_init_ud_pre;
struct HPMHookPoint *HP_unit_init_ud_post;
struct HPMHookPoint *HP_unit_attack_timer_pre;
struct HPMHookPoint *HP_unit_attack_timer_post;
- struct HPMHookPoint *HP_unit_walktoxy_timer_pre;
- struct HPMHookPoint *HP_unit_walktoxy_timer_post;
- struct HPMHookPoint *HP_unit_walktoxy_sub_pre;
- struct HPMHookPoint *HP_unit_walktoxy_sub_post;
- struct HPMHookPoint *HP_unit_delay_walktoxy_timer_pre;
- struct HPMHookPoint *HP_unit_delay_walktoxy_timer_post;
- struct HPMHookPoint *HP_unit_walktoxy_pre;
- struct HPMHookPoint *HP_unit_walktoxy_post;
- struct HPMHookPoint *HP_unit_walktobl_sub_pre;
- struct HPMHookPoint *HP_unit_walktobl_sub_post;
+ struct HPMHookPoint *HP_unit_walk_toxy_timer_pre;
+ struct HPMHookPoint *HP_unit_walk_toxy_timer_post;
+ struct HPMHookPoint *HP_unit_walk_toxy_sub_pre;
+ struct HPMHookPoint *HP_unit_walk_toxy_sub_post;
+ struct HPMHookPoint *HP_unit_delay_walk_toxy_timer_pre;
+ struct HPMHookPoint *HP_unit_delay_walk_toxy_timer_post;
+ struct HPMHookPoint *HP_unit_walk_toxy_pre;
+ struct HPMHookPoint *HP_unit_walk_toxy_post;
+ struct HPMHookPoint *HP_unit_walktobl_timer_pre;
+ struct HPMHookPoint *HP_unit_walktobl_timer_post;
struct HPMHookPoint *HP_unit_walktobl_pre;
struct HPMHookPoint *HP_unit_walktobl_post;
struct HPMHookPoint *HP_unit_run_pre;
@@ -6812,20 +6978,22 @@ struct {
struct HPMHookPoint *HP_unit_escape_post;
struct HPMHookPoint *HP_unit_movepos_pre;
struct HPMHookPoint *HP_unit_movepos_post;
- struct HPMHookPoint *HP_unit_setdir_pre;
- struct HPMHookPoint *HP_unit_setdir_post;
+ struct HPMHookPoint *HP_unit_set_dir_pre;
+ struct HPMHookPoint *HP_unit_set_dir_post;
struct HPMHookPoint *HP_unit_getdir_pre;
struct HPMHookPoint *HP_unit_getdir_post;
struct HPMHookPoint *HP_unit_blown_pre;
struct HPMHookPoint *HP_unit_blown_post;
struct HPMHookPoint *HP_unit_warp_pre;
struct HPMHookPoint *HP_unit_warp_post;
+ struct HPMHookPoint *HP_unit_warpto_master_pre;
+ struct HPMHookPoint *HP_unit_warpto_master_post;
struct HPMHookPoint *HP_unit_stop_walking_pre;
struct HPMHookPoint *HP_unit_stop_walking_post;
struct HPMHookPoint *HP_unit_skilluse_id_pre;
struct HPMHookPoint *HP_unit_skilluse_id_post;
- struct HPMHookPoint *HP_unit_step_timer_pre;
- struct HPMHookPoint *HP_unit_step_timer_post;
+ struct HPMHookPoint *HP_unit_steptimer_pre;
+ struct HPMHookPoint *HP_unit_steptimer_post;
struct HPMHookPoint *HP_unit_stop_stepaction_pre;
struct HPMHookPoint *HP_unit_stop_stepaction_post;
struct HPMHookPoint *HP_unit_is_walking_pre;
@@ -7871,6 +8039,10 @@ struct {
int HP_clif_chatname_ack_post;
int HP_clif_elemname_ack_pre;
int HP_clif_elemname_ack_post;
+ int HP_clif_skillname_ack_pre;
+ int HP_clif_skillname_ack_post;
+ int HP_clif_itemname_ack_pre;
+ int HP_clif_itemname_ack_post;
int HP_clif_unknownname_ack_pre;
int HP_clif_unknownname_ack_post;
int HP_clif_monster_hp_bar_pre;
@@ -9131,6 +9303,8 @@ struct {
int HP_clif_attendance_getendtime_post;
int HP_clif_pOpenUIRequest_pre;
int HP_clif_pOpenUIRequest_post;
+ int HP_clif_open_ui_send_pre;
+ int HP_clif_open_ui_send_post;
int HP_clif_open_ui_pre;
int HP_clif_open_ui_post;
int HP_clif_pAttendanceRewardRequest_pre;
@@ -9223,6 +9397,14 @@ struct {
int HP_clif_plapineDdukDdak_ack_post;
int HP_clif_plapineDdukDdak_close_pre;
int HP_clif_plapineDdukDdak_close_post;
+ int HP_clif_lapineUpgrade_open_pre;
+ int HP_clif_lapineUpgrade_open_post;
+ int HP_clif_lapineUpgrade_result_pre;
+ int HP_clif_lapineUpgrade_result_post;
+ int HP_clif_pLapineUpgrade_close_pre;
+ int HP_clif_pLapineUpgrade_close_post;
+ int HP_clif_pLapineUpgrade_makeItem_pre;
+ int HP_clif_pLapineUpgrade_makeItem_post;
int HP_clif_pReqGearOff_pre;
int HP_clif_pReqGearOff_post;
int HP_cmdline_init_pre;
@@ -10687,20 +10869,32 @@ struct {
int HP_mapit_prev_post;
int HP_mapit_exists_pre;
int HP_mapit_exists_post;
- int HP_mapreg_init_pre;
- int HP_mapreg_init_post;
- int HP_mapreg_final_pre;
- int HP_mapreg_final_post;
int HP_mapreg_readreg_pre;
int HP_mapreg_readreg_post;
int HP_mapreg_readregstr_pre;
int HP_mapreg_readregstr_post;
+ int HP_mapreg_set_num_db_pre;
+ int HP_mapreg_set_num_db_post;
+ int HP_mapreg_delete_num_db_pre;
+ int HP_mapreg_delete_num_db_post;
int HP_mapreg_setreg_pre;
int HP_mapreg_setreg_post;
+ int HP_mapreg_set_str_db_pre;
+ int HP_mapreg_set_str_db_post;
+ int HP_mapreg_delete_str_db_pre;
+ int HP_mapreg_delete_str_db_post;
int HP_mapreg_setregstr_pre;
int HP_mapreg_setregstr_post;
+ int HP_mapreg_load_num_db_pre;
+ int HP_mapreg_load_num_db_post;
+ int HP_mapreg_load_str_db_pre;
+ int HP_mapreg_load_str_db_post;
int HP_mapreg_load_pre;
int HP_mapreg_load_post;
+ int HP_mapreg_save_num_db_pre;
+ int HP_mapreg_save_num_db_post;
+ int HP_mapreg_save_str_db_pre;
+ int HP_mapreg_save_str_db_post;
int HP_mapreg_save_pre;
int HP_mapreg_save_post;
int HP_mapreg_save_timer_pre;
@@ -10709,8 +10903,12 @@ struct {
int HP_mapreg_destroyreg_post;
int HP_mapreg_reload_pre;
int HP_mapreg_reload_post;
- int HP_mapreg_config_read_pre;
- int HP_mapreg_config_read_post;
+ int HP_mapreg_config_read_registry_pre;
+ int HP_mapreg_config_read_registry_post;
+ int HP_mapreg_final_pre;
+ int HP_mapreg_final_post;
+ int HP_mapreg_init_pre;
+ int HP_mapreg_init_post;
int HP_md5_string_pre;
int HP_md5_string_post;
int HP_md5_binary_pre;
@@ -11291,6 +11489,10 @@ struct {
int HP_npc_questinfo_clear_post;
int HP_npc_secure_timeout_timer_pre;
int HP_npc_secure_timeout_timer_post;
+ int HP_nullpo_init_pre;
+ int HP_nullpo_init_post;
+ int HP_nullpo_final_pre;
+ int HP_nullpo_final_post;
int HP_nullpo_assert_report_pre;
int HP_nullpo_assert_report_post;
int HP_packets_init_pre;
@@ -11635,8 +11837,14 @@ struct {
int HP_pc_checkitem_post;
int HP_pc_useitem_pre;
int HP_pc_useitem_post;
- int HP_pc_itemskill_clear_pre;
- int HP_pc_itemskill_clear_post;
+ int HP_pc_autocast_clear_current_pre;
+ int HP_pc_autocast_clear_current_post;
+ int HP_pc_autocast_clear_pre;
+ int HP_pc_autocast_clear_post;
+ int HP_pc_autocast_set_current_pre;
+ int HP_pc_autocast_set_current_post;
+ int HP_pc_autocast_remove_pre;
+ int HP_pc_autocast_remove_post;
int HP_pc_skillatk_bonus_pre;
int HP_pc_skillatk_bonus_post;
int HP_pc_skillheal_bonus_pre;
@@ -11657,6 +11865,10 @@ struct {
int HP_pc_percentheal_post;
int HP_pc_jobchange_pre;
int HP_pc_jobchange_post;
+ int HP_pc_hide_pre;
+ int HP_pc_hide_post;
+ int HP_pc_unhide_pre;
+ int HP_pc_unhide_post;
int HP_pc_setoption_pre;
int HP_pc_setoption_post;
int HP_pc_setcart_pre;
@@ -11943,6 +12155,10 @@ struct {
int HP_pet_final_post;
int HP_pet_hungry_val_pre;
int HP_pet_hungry_val_post;
+ int HP_pet_set_hunger_pre;
+ int HP_pet_set_hunger_post;
+ int HP_pet_get_card4_value_pre;
+ int HP_pet_get_card4_value_post;
int HP_pet_set_intimate_pre;
int HP_pet_set_intimate_post;
int HP_pet_create_egg_pre;
@@ -11967,6 +12183,8 @@ struct {
int HP_pet_return_egg_post;
int HP_pet_data_init_pre;
int HP_pet_data_init_post;
+ int HP_pet_spawn_pre;
+ int HP_pet_spawn_post;
int HP_pet_birth_process_pre;
int HP_pet_birth_process_post;
int HP_pet_recv_petdata_pre;
@@ -12303,6 +12521,8 @@ struct {
int HP_script_parse_syntax_close_sub_post;
int HP_script_parse_syntax_pre;
int HP_script_parse_syntax_post;
+ int HP_script_parse_syntax_function_pre;
+ int HP_script_parse_syntax_function_post;
int HP_script_get_com_pre;
int HP_script_get_com_post;
int HP_script_get_num_pre;
@@ -12367,6 +12587,8 @@ struct {
int HP_script_print_line_post;
int HP_script_errorwarning_sub_pre;
int HP_script_errorwarning_sub_post;
+ int HP_script_is_permanent_variable_pre;
+ int HP_script_is_permanent_variable_post;
int HP_script_set_reg_pre;
int HP_script_set_reg_post;
int HP_script_set_reg_ref_str_pre;
@@ -12599,6 +12821,8 @@ struct {
int HP_skill_get_hp_post;
int HP_skill_get_mhp_pre;
int HP_skill_get_mhp_post;
+ int HP_skill_get_msp_pre;
+ int HP_skill_get_msp_post;
int HP_skill_get_sp_pre;
int HP_skill_get_sp_post;
int HP_skill_get_hp_rate_pre;
@@ -12609,10 +12833,20 @@ struct {
int HP_skill_get_state_post;
int HP_skill_get_spiritball_pre;
int HP_skill_get_spiritball_post;
+ int HP_skill_get_item_index_pre;
+ int HP_skill_get_item_index_post;
int HP_skill_get_itemid_pre;
int HP_skill_get_itemid_post;
int HP_skill_get_itemqty_pre;
int HP_skill_get_itemqty_post;
+ int HP_skill_get_item_any_flag_pre;
+ int HP_skill_get_item_any_flag_post;
+ int HP_skill_get_equip_id_pre;
+ int HP_skill_get_equip_id_post;
+ int HP_skill_get_equip_amount_pre;
+ int HP_skill_get_equip_amount_post;
+ int HP_skill_get_equip_any_flag_pre;
+ int HP_skill_get_equip_any_flag_post;
int HP_skill_get_zeny_pre;
int HP_skill_get_zeny_post;
int HP_skill_get_num_pre;
@@ -12727,12 +12961,18 @@ struct {
int HP_skill_vf_cast_fix_post;
int HP_skill_delay_fix_pre;
int HP_skill_delay_fix_post;
- int HP_skill_is_item_skill_pre;
- int HP_skill_is_item_skill_post;
+ int HP_skill_check_condition_required_equip_pre;
+ int HP_skill_check_condition_required_equip_post;
int HP_skill_check_condition_castbegin_pre;
int HP_skill_check_condition_castbegin_post;
+ int HP_skill_check_condition_required_items_pre;
+ int HP_skill_check_condition_required_items_post;
+ int HP_skill_items_required_pre;
+ int HP_skill_items_required_post;
int HP_skill_check_condition_castend_pre;
int HP_skill_check_condition_castend_post;
+ int HP_skill_get_any_item_index_pre;
+ int HP_skill_get_any_item_index_post;
int HP_skill_consume_requirement_pre;
int HP_skill_consume_requirement_post;
int HP_skill_get_requirement_pre;
@@ -12779,6 +13019,8 @@ struct {
int HP_skill_not_ok_hom_unknown_post;
int HP_skill_not_ok_mercenary_pre;
int HP_skill_not_ok_mercenary_post;
+ int HP_skill_validate_autocast_data_pre;
+ int HP_skill_validate_autocast_data_post;
int HP_skill_chastle_mob_changetarget_pre;
int HP_skill_chastle_mob_changetarget_post;
int HP_skill_can_produce_mix_pre;
@@ -12899,42 +13141,130 @@ struct {
int HP_skill_init_unit_layout_post;
int HP_skill_init_unit_layout_unknown_pre;
int HP_skill_init_unit_layout_unknown_post;
+ int HP_skill_validate_id_pre;
+ int HP_skill_validate_id_post;
+ int HP_skill_name_contains_invalid_character_pre;
+ int HP_skill_name_contains_invalid_character_post;
+ int HP_skill_validate_name_pre;
+ int HP_skill_validate_name_post;
+ int HP_skill_validate_max_level_pre;
+ int HP_skill_validate_max_level_post;
+ int HP_skill_validate_description_pre;
+ int HP_skill_validate_description_post;
+ int HP_skill_validate_range_pre;
+ int HP_skill_validate_range_post;
int HP_skill_validate_hittype_pre;
int HP_skill_validate_hittype_post;
int HP_skill_validate_skilltype_pre;
int HP_skill_validate_skilltype_post;
+ int HP_skill_validate_skillinfo_pre;
+ int HP_skill_validate_skillinfo_post;
int HP_skill_validate_attacktype_pre;
int HP_skill_validate_attacktype_post;
int HP_skill_validate_element_pre;
int HP_skill_validate_element_post;
- int HP_skill_validate_skillinfo_pre;
- int HP_skill_validate_skillinfo_post;
int HP_skill_validate_damagetype_pre;
int HP_skill_validate_damagetype_post;
+ int HP_skill_validate_splash_range_pre;
+ int HP_skill_validate_splash_range_post;
+ int HP_skill_validate_number_of_hits_pre;
+ int HP_skill_validate_number_of_hits_post;
+ int HP_skill_validate_interrupt_cast_pre;
+ int HP_skill_validate_interrupt_cast_post;
+ int HP_skill_validate_cast_def_rate_pre;
+ int HP_skill_validate_cast_def_rate_post;
+ int HP_skill_validate_number_of_instances_pre;
+ int HP_skill_validate_number_of_instances_post;
+ int HP_skill_validate_knock_back_tiles_pre;
+ int HP_skill_validate_knock_back_tiles_post;
+ int HP_skill_validate_cast_time_pre;
+ int HP_skill_validate_cast_time_post;
+ int HP_skill_validate_act_delay_pre;
+ int HP_skill_validate_act_delay_post;
+ int HP_skill_validate_walk_delay_pre;
+ int HP_skill_validate_walk_delay_post;
+ int HP_skill_validate_skill_data1_pre;
+ int HP_skill_validate_skill_data1_post;
+ int HP_skill_validate_skill_data2_pre;
+ int HP_skill_validate_skill_data2_post;
+ int HP_skill_validate_cooldown_pre;
+ int HP_skill_validate_cooldown_post;
+ int HP_skill_validate_fixed_cast_time_pre;
+ int HP_skill_validate_fixed_cast_time_post;
int HP_skill_validate_castnodex_pre;
int HP_skill_validate_castnodex_post;
+ int HP_skill_validate_hp_cost_pre;
+ int HP_skill_validate_hp_cost_post;
+ int HP_skill_validate_sp_cost_pre;
+ int HP_skill_validate_sp_cost_post;
+ int HP_skill_validate_hp_rate_cost_pre;
+ int HP_skill_validate_hp_rate_cost_post;
+ int HP_skill_validate_sp_rate_cost_pre;
+ int HP_skill_validate_sp_rate_cost_post;
+ int HP_skill_validate_max_hp_trigger_pre;
+ int HP_skill_validate_max_hp_trigger_post;
+ int HP_skill_validate_max_sp_trigger_pre;
+ int HP_skill_validate_max_sp_trigger_post;
+ int HP_skill_validate_zeny_cost_pre;
+ int HP_skill_validate_zeny_cost_post;
+ int HP_skill_validate_weapontype_sub_pre;
+ int HP_skill_validate_weapontype_sub_post;
int HP_skill_validate_weapontype_pre;
int HP_skill_validate_weapontype_post;
+ int HP_skill_validate_ammotype_sub_pre;
+ int HP_skill_validate_ammotype_sub_post;
int HP_skill_validate_ammotype_pre;
int HP_skill_validate_ammotype_post;
+ int HP_skill_validate_ammo_amount_pre;
+ int HP_skill_validate_ammo_amount_post;
+ int HP_skill_validate_state_sub_pre;
+ int HP_skill_validate_state_sub_post;
int HP_skill_validate_state_pre;
int HP_skill_validate_state_post;
+ int HP_skill_validate_spirit_sphere_cost_pre;
+ int HP_skill_validate_spirit_sphere_cost_post;
+ int HP_skill_validate_item_requirements_sub_item_amount_pre;
+ int HP_skill_validate_item_requirements_sub_item_amount_post;
+ int HP_skill_validate_item_requirements_sub_items_pre;
+ int HP_skill_validate_item_requirements_sub_items_post;
+ int HP_skill_validate_item_requirements_sub_any_flag_pre;
+ int HP_skill_validate_item_requirements_sub_any_flag_post;
int HP_skill_validate_item_requirements_pre;
int HP_skill_validate_item_requirements_post;
- int HP_skill_validate_unit_target_pre;
- int HP_skill_validate_unit_target_post;
+ int HP_skill_validate_equip_requirements_sub_item_amount_pre;
+ int HP_skill_validate_equip_requirements_sub_item_amount_post;
+ int HP_skill_validate_equip_requirements_sub_items_pre;
+ int HP_skill_validate_equip_requirements_sub_items_post;
+ int HP_skill_validate_equip_requirements_sub_any_flag_pre;
+ int HP_skill_validate_equip_requirements_sub_any_flag_post;
+ int HP_skill_validate_equip_requirements_pre;
+ int HP_skill_validate_equip_requirements_post;
+ int HP_skill_validate_requirements_item_name_pre;
+ int HP_skill_validate_requirements_item_name_post;
+ int HP_skill_validate_requirements_pre;
+ int HP_skill_validate_requirements_post;
+ int HP_skill_validate_unit_id_sub_pre;
+ int HP_skill_validate_unit_id_sub_post;
+ int HP_skill_validate_unit_id_pre;
+ int HP_skill_validate_unit_id_post;
+ int HP_skill_validate_unit_layout_pre;
+ int HP_skill_validate_unit_layout_post;
+ int HP_skill_validate_unit_range_pre;
+ int HP_skill_validate_unit_range_post;
+ int HP_skill_validate_unit_interval_pre;
+ int HP_skill_validate_unit_interval_post;
+ int HP_skill_validate_unit_flag_sub_pre;
+ int HP_skill_validate_unit_flag_sub_post;
int HP_skill_validate_unit_flag_pre;
int HP_skill_validate_unit_flag_post;
+ int HP_skill_validate_unit_target_sub_pre;
+ int HP_skill_validate_unit_target_sub_post;
+ int HP_skill_validate_unit_target_pre;
+ int HP_skill_validate_unit_target_post;
+ int HP_skill_validate_unit_pre;
+ int HP_skill_validate_unit_post;
int HP_skill_validate_additional_fields_pre;
int HP_skill_validate_additional_fields_post;
- int HP_skill_validate_skilldb_pre;
- int HP_skill_validate_skilldb_post;
- int HP_skill_validate_weapontype_sub_pre;
- int HP_skill_validate_weapontype_sub_post;
- int HP_skill_validate_ammotype_sub_pre;
- int HP_skill_validate_ammotype_sub_post;
- int HP_skill_validate_unit_flag_sub_pre;
- int HP_skill_validate_unit_flag_sub_post;
int HP_skill_read_skilldb_pre;
int HP_skill_read_skilldb_post;
int HP_skill_config_set_level_pre;
@@ -13057,6 +13387,8 @@ struct {
int HP_skill_check_npc_chaospanic_post;
int HP_skill_count_wos_pre;
int HP_skill_count_wos_post;
+ int HP_skill_get_linked_song_dance_id_pre;
+ int HP_skill_get_linked_song_dance_id_post;
int HP_sockt_init_pre;
int HP_sockt_init_post;
int HP_sockt_final_pre;
@@ -13657,22 +13989,24 @@ struct {
int HP_unit_final_post;
int HP_unit_bl2ud_pre;
int HP_unit_bl2ud_post;
+ int HP_unit_cbl2ud_pre;
+ int HP_unit_cbl2ud_post;
int HP_unit_bl2ud2_pre;
int HP_unit_bl2ud2_post;
int HP_unit_init_ud_pre;
int HP_unit_init_ud_post;
int HP_unit_attack_timer_pre;
int HP_unit_attack_timer_post;
- int HP_unit_walktoxy_timer_pre;
- int HP_unit_walktoxy_timer_post;
- int HP_unit_walktoxy_sub_pre;
- int HP_unit_walktoxy_sub_post;
- int HP_unit_delay_walktoxy_timer_pre;
- int HP_unit_delay_walktoxy_timer_post;
- int HP_unit_walktoxy_pre;
- int HP_unit_walktoxy_post;
- int HP_unit_walktobl_sub_pre;
- int HP_unit_walktobl_sub_post;
+ int HP_unit_walk_toxy_timer_pre;
+ int HP_unit_walk_toxy_timer_post;
+ int HP_unit_walk_toxy_sub_pre;
+ int HP_unit_walk_toxy_sub_post;
+ int HP_unit_delay_walk_toxy_timer_pre;
+ int HP_unit_delay_walk_toxy_timer_post;
+ int HP_unit_walk_toxy_pre;
+ int HP_unit_walk_toxy_post;
+ int HP_unit_walktobl_timer_pre;
+ int HP_unit_walktobl_timer_post;
int HP_unit_walktobl_pre;
int HP_unit_walktobl_post;
int HP_unit_run_pre;
@@ -13683,20 +14017,22 @@ struct {
int HP_unit_escape_post;
int HP_unit_movepos_pre;
int HP_unit_movepos_post;
- int HP_unit_setdir_pre;
- int HP_unit_setdir_post;
+ int HP_unit_set_dir_pre;
+ int HP_unit_set_dir_post;
int HP_unit_getdir_pre;
int HP_unit_getdir_post;
int HP_unit_blown_pre;
int HP_unit_blown_post;
int HP_unit_warp_pre;
int HP_unit_warp_post;
+ int HP_unit_warpto_master_pre;
+ int HP_unit_warpto_master_post;
int HP_unit_stop_walking_pre;
int HP_unit_stop_walking_post;
int HP_unit_skilluse_id_pre;
int HP_unit_skilluse_id_post;
- int HP_unit_step_timer_pre;
- int HP_unit_step_timer_post;
+ int HP_unit_steptimer_pre;
+ int HP_unit_steptimer_post;
int HP_unit_stop_stepaction_pre;
int HP_unit_stop_stepaction_post;
int HP_unit_is_walking_pre;
diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
index 672b94dd8..34f968c12 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
@@ -524,6 +524,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->mobname_normal_ack, HP_clif_mobname_normal_ack) },
{ HP_POP(clif->chatname_ack, HP_clif_chatname_ack) },
{ HP_POP(clif->elemname_ack, HP_clif_elemname_ack) },
+ { HP_POP(clif->skillname_ack, HP_clif_skillname_ack) },
+ { HP_POP(clif->itemname_ack, HP_clif_itemname_ack) },
{ HP_POP(clif->unknownname_ack, HP_clif_unknownname_ack) },
{ HP_POP(clif->monster_hp_bar, HP_clif_monster_hp_bar) },
{ HP_POP(clif->hpmeter, HP_clif_hpmeter) },
@@ -1154,6 +1156,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->attendance_timediff, HP_clif_attendance_timediff) },
{ HP_POP(clif->attendance_getendtime, HP_clif_attendance_getendtime) },
{ HP_POP(clif->pOpenUIRequest, HP_clif_pOpenUIRequest) },
+ { HP_POP(clif->open_ui_send, HP_clif_open_ui_send) },
{ HP_POP(clif->open_ui, HP_clif_open_ui) },
{ HP_POP(clif->pAttendanceRewardRequest, HP_clif_pAttendanceRewardRequest) },
{ HP_POP(clif->ui_action, HP_clif_ui_action) },
@@ -1200,6 +1203,10 @@ struct HookingPointData HookingPoints[] = {
{ 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) },
+ { HP_POP(clif->lapineUpgrade_open, HP_clif_lapineUpgrade_open) },
+ { HP_POP(clif->lapineUpgrade_result, HP_clif_lapineUpgrade_result) },
+ { HP_POP(clif->pLapineUpgrade_close, HP_clif_pLapineUpgrade_close) },
+ { HP_POP(clif->pLapineUpgrade_makeItem, HP_clif_pLapineUpgrade_makeItem) },
{ HP_POP(clif->pReqGearOff, HP_clif_pReqGearOff) },
/* cmdline_interface */
{ HP_POP(cmdline->init, HP_cmdline_init) },
@@ -1954,18 +1961,26 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(mapit->prev, HP_mapit_prev) },
{ HP_POP(mapit->exists, HP_mapit_exists) },
/* mapreg_interface */
- { HP_POP(mapreg->init, HP_mapreg_init) },
- { HP_POP(mapreg->final, HP_mapreg_final) },
{ HP_POP(mapreg->readreg, HP_mapreg_readreg) },
{ HP_POP(mapreg->readregstr, HP_mapreg_readregstr) },
+ { HP_POP(mapreg->set_num_db, HP_mapreg_set_num_db) },
+ { HP_POP(mapreg->delete_num_db, HP_mapreg_delete_num_db) },
{ HP_POP(mapreg->setreg, HP_mapreg_setreg) },
+ { HP_POP(mapreg->set_str_db, HP_mapreg_set_str_db) },
+ { HP_POP(mapreg->delete_str_db, HP_mapreg_delete_str_db) },
{ HP_POP(mapreg->setregstr, HP_mapreg_setregstr) },
+ { HP_POP(mapreg->load_num_db, HP_mapreg_load_num_db) },
+ { HP_POP(mapreg->load_str_db, HP_mapreg_load_str_db) },
{ HP_POP(mapreg->load, HP_mapreg_load) },
+ { HP_POP(mapreg->save_num_db, HP_mapreg_save_num_db) },
+ { HP_POP(mapreg->save_str_db, HP_mapreg_save_str_db) },
{ HP_POP(mapreg->save, HP_mapreg_save) },
{ HP_POP(mapreg->save_timer, HP_mapreg_save_timer) },
{ HP_POP(mapreg->destroyreg, HP_mapreg_destroyreg) },
{ HP_POP(mapreg->reload, HP_mapreg_reload) },
- { HP_POP(mapreg->config_read, HP_mapreg_config_read) },
+ { HP_POP(mapreg->config_read_registry, HP_mapreg_config_read_registry) },
+ { HP_POP(mapreg->final, HP_mapreg_final) },
+ { HP_POP(mapreg->init, HP_mapreg_init) },
/* md5_interface */
{ HP_POP(md5->string, HP_md5_string) },
{ HP_POP(md5->binary, HP_md5_binary) },
@@ -2263,6 +2278,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(npc->questinfo_clear, HP_npc_questinfo_clear) },
{ HP_POP(npc->secure_timeout_timer, HP_npc_secure_timeout_timer) },
/* nullpo_interface */
+ { HP_POP(nullpo->init, HP_nullpo_init) },
+ { HP_POP(nullpo->final, HP_nullpo_final) },
{ HP_POP(nullpo->assert_report, HP_nullpo_assert_report) },
/* packets_interface */
{ HP_POP(packets->init, HP_packets_init) },
@@ -2440,7 +2457,10 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(pc->unequipitem_pos, HP_pc_unequipitem_pos) },
{ HP_POP(pc->checkitem, HP_pc_checkitem) },
{ HP_POP(pc->useitem, HP_pc_useitem) },
- { HP_POP(pc->itemskill_clear, HP_pc_itemskill_clear) },
+ { HP_POP(pc->autocast_clear_current, HP_pc_autocast_clear_current) },
+ { HP_POP(pc->autocast_clear, HP_pc_autocast_clear) },
+ { HP_POP(pc->autocast_set_current, HP_pc_autocast_set_current) },
+ { HP_POP(pc->autocast_remove, HP_pc_autocast_remove) },
{ HP_POP(pc->skillatk_bonus, HP_pc_skillatk_bonus) },
{ HP_POP(pc->skillheal_bonus, HP_pc_skillheal_bonus) },
{ HP_POP(pc->skillheal2_bonus, HP_pc_skillheal2_bonus) },
@@ -2451,6 +2471,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(pc->itemheal, HP_pc_itemheal) },
{ HP_POP(pc->percentheal, HP_pc_percentheal) },
{ HP_POP(pc->jobchange, HP_pc_jobchange) },
+ { HP_POP(pc->hide, HP_pc_hide) },
+ { HP_POP(pc->unhide, HP_pc_unhide) },
{ HP_POP(pc->setoption, HP_pc_setoption) },
{ HP_POP(pc->setcart, HP_pc_setcart) },
{ HP_POP(pc->setfalcon, HP_pc_setfalcon) },
@@ -2596,6 +2618,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(pet->init, HP_pet_init) },
{ HP_POP(pet->final, HP_pet_final) },
{ HP_POP(pet->hungry_val, HP_pet_hungry_val) },
+ { HP_POP(pet->set_hunger, HP_pet_set_hunger) },
+ { HP_POP(pet->get_card4_value, HP_pet_get_card4_value) },
{ HP_POP(pet->set_intimate, HP_pet_set_intimate) },
{ HP_POP(pet->create_egg, HP_pet_create_egg) },
{ HP_POP(pet->unlocktarget, HP_pet_unlocktarget) },
@@ -2608,6 +2632,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(pet->performance, HP_pet_performance) },
{ HP_POP(pet->return_egg, HP_pet_return_egg) },
{ HP_POP(pet->data_init, HP_pet_data_init) },
+ { HP_POP(pet->spawn, HP_pet_spawn) },
{ HP_POP(pet->birth_process, HP_pet_birth_process) },
{ HP_POP(pet->recv_petdata, HP_pet_recv_petdata) },
{ HP_POP(pet->select_egg, HP_pet_select_egg) },
@@ -2782,6 +2807,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(script->parse_syntax_close, HP_script_parse_syntax_close) },
{ HP_POP(script->parse_syntax_close_sub, HP_script_parse_syntax_close_sub) },
{ HP_POP(script->parse_syntax, HP_script_parse_syntax) },
+ { HP_POP(script->parse_syntax_function, HP_script_parse_syntax_function) },
{ HP_POP(script->get_com, HP_script_get_com) },
{ HP_POP(script->get_num, HP_script_get_num) },
{ HP_POP(script->op2name, HP_script_op2name) },
@@ -2814,6 +2840,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(script->load_parameters, HP_script_load_parameters) },
{ HP_POP(script->print_line, HP_script_print_line) },
{ HP_POP(script->errorwarning_sub, HP_script_errorwarning_sub) },
+ { HP_POP(script->is_permanent_variable, HP_script_is_permanent_variable) },
{ HP_POP(script->set_reg, HP_script_set_reg) },
{ HP_POP(script->set_reg_ref_str, HP_script_set_reg_ref_str) },
{ HP_POP(script->set_reg_pc_ref_str, HP_script_set_reg_pc_ref_str) },
@@ -2933,13 +2960,19 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(skill->get_splash, HP_skill_get_splash) },
{ HP_POP(skill->get_hp, HP_skill_get_hp) },
{ HP_POP(skill->get_mhp, HP_skill_get_mhp) },
+ { HP_POP(skill->get_msp, HP_skill_get_msp) },
{ HP_POP(skill->get_sp, HP_skill_get_sp) },
{ HP_POP(skill->get_hp_rate, HP_skill_get_hp_rate) },
{ HP_POP(skill->get_sp_rate, HP_skill_get_sp_rate) },
{ HP_POP(skill->get_state, HP_skill_get_state) },
{ HP_POP(skill->get_spiritball, HP_skill_get_spiritball) },
+ { HP_POP(skill->get_item_index, HP_skill_get_item_index) },
{ HP_POP(skill->get_itemid, HP_skill_get_itemid) },
{ HP_POP(skill->get_itemqty, HP_skill_get_itemqty) },
+ { HP_POP(skill->get_item_any_flag, HP_skill_get_item_any_flag) },
+ { HP_POP(skill->get_equip_id, HP_skill_get_equip_id) },
+ { HP_POP(skill->get_equip_amount, HP_skill_get_equip_amount) },
+ { HP_POP(skill->get_equip_any_flag, HP_skill_get_equip_any_flag) },
{ HP_POP(skill->get_zeny, HP_skill_get_zeny) },
{ HP_POP(skill->get_num, HP_skill_get_num) },
{ HP_POP(skill->get_cast, HP_skill_get_cast) },
@@ -2997,9 +3030,12 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(skill->cast_fix_sc, HP_skill_cast_fix_sc) },
{ HP_POP(skill->vf_cast_fix, HP_skill_vf_cast_fix) },
{ HP_POP(skill->delay_fix, HP_skill_delay_fix) },
- { HP_POP(skill->is_item_skill, HP_skill_is_item_skill) },
+ { HP_POP(skill->check_condition_required_equip, HP_skill_check_condition_required_equip) },
{ HP_POP(skill->check_condition_castbegin, HP_skill_check_condition_castbegin) },
+ { HP_POP(skill->check_condition_required_items, HP_skill_check_condition_required_items) },
+ { HP_POP(skill->items_required, HP_skill_items_required) },
{ HP_POP(skill->check_condition_castend, HP_skill_check_condition_castend) },
+ { HP_POP(skill->get_any_item_index, HP_skill_get_any_item_index) },
{ HP_POP(skill->consume_requirement, HP_skill_consume_requirement) },
{ HP_POP(skill->get_requirement, HP_skill_get_requirement) },
{ HP_POP(skill->check_pc_partner, HP_skill_check_pc_partner) },
@@ -3023,6 +3059,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(skill->not_ok_hom, HP_skill_not_ok_hom) },
{ HP_POP(skill->not_ok_hom_unknown, HP_skill_not_ok_hom_unknown) },
{ HP_POP(skill->not_ok_mercenary, HP_skill_not_ok_mercenary) },
+ { HP_POP(skill->validate_autocast_data, HP_skill_validate_autocast_data) },
{ HP_POP(skill->chastle_mob_changetarget, HP_skill_chastle_mob_changetarget) },
{ HP_POP(skill->can_produce_mix, HP_skill_can_produce_mix) },
{ HP_POP(skill->produce_mix, HP_skill_produce_mix) },
@@ -3083,24 +3120,68 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(skill->unit_timer_sub, HP_skill_unit_timer_sub) },
{ HP_POP(skill->init_unit_layout, HP_skill_init_unit_layout) },
{ HP_POP(skill->init_unit_layout_unknown, HP_skill_init_unit_layout_unknown) },
+ { HP_POP(skill->validate_id, HP_skill_validate_id) },
+ { HP_POP(skill->name_contains_invalid_character, HP_skill_name_contains_invalid_character) },
+ { HP_POP(skill->validate_name, HP_skill_validate_name) },
+ { HP_POP(skill->validate_max_level, HP_skill_validate_max_level) },
+ { HP_POP(skill->validate_description, HP_skill_validate_description) },
+ { HP_POP(skill->validate_range, HP_skill_validate_range) },
{ HP_POP(skill->validate_hittype, HP_skill_validate_hittype) },
{ HP_POP(skill->validate_skilltype, HP_skill_validate_skilltype) },
+ { HP_POP(skill->validate_skillinfo, HP_skill_validate_skillinfo) },
{ HP_POP(skill->validate_attacktype, HP_skill_validate_attacktype) },
{ HP_POP(skill->validate_element, HP_skill_validate_element) },
- { HP_POP(skill->validate_skillinfo, HP_skill_validate_skillinfo) },
{ HP_POP(skill->validate_damagetype, HP_skill_validate_damagetype) },
+ { HP_POP(skill->validate_splash_range, HP_skill_validate_splash_range) },
+ { HP_POP(skill->validate_number_of_hits, HP_skill_validate_number_of_hits) },
+ { HP_POP(skill->validate_interrupt_cast, HP_skill_validate_interrupt_cast) },
+ { HP_POP(skill->validate_cast_def_rate, HP_skill_validate_cast_def_rate) },
+ { HP_POP(skill->validate_number_of_instances, HP_skill_validate_number_of_instances) },
+ { HP_POP(skill->validate_knock_back_tiles, HP_skill_validate_knock_back_tiles) },
+ { HP_POP(skill->validate_cast_time, HP_skill_validate_cast_time) },
+ { HP_POP(skill->validate_act_delay, HP_skill_validate_act_delay) },
+ { HP_POP(skill->validate_walk_delay, HP_skill_validate_walk_delay) },
+ { HP_POP(skill->validate_skill_data1, HP_skill_validate_skill_data1) },
+ { HP_POP(skill->validate_skill_data2, HP_skill_validate_skill_data2) },
+ { HP_POP(skill->validate_cooldown, HP_skill_validate_cooldown) },
+ { HP_POP(skill->validate_fixed_cast_time, HP_skill_validate_fixed_cast_time) },
{ HP_POP(skill->validate_castnodex, HP_skill_validate_castnodex) },
+ { HP_POP(skill->validate_hp_cost, HP_skill_validate_hp_cost) },
+ { HP_POP(skill->validate_sp_cost, HP_skill_validate_sp_cost) },
+ { HP_POP(skill->validate_hp_rate_cost, HP_skill_validate_hp_rate_cost) },
+ { HP_POP(skill->validate_sp_rate_cost, HP_skill_validate_sp_rate_cost) },
+ { HP_POP(skill->validate_max_hp_trigger, HP_skill_validate_max_hp_trigger) },
+ { HP_POP(skill->validate_max_sp_trigger, HP_skill_validate_max_sp_trigger) },
+ { HP_POP(skill->validate_zeny_cost, HP_skill_validate_zeny_cost) },
+ { HP_POP(skill->validate_weapontype_sub, HP_skill_validate_weapontype_sub) },
{ HP_POP(skill->validate_weapontype, HP_skill_validate_weapontype) },
+ { HP_POP(skill->validate_ammotype_sub, HP_skill_validate_ammotype_sub) },
{ HP_POP(skill->validate_ammotype, HP_skill_validate_ammotype) },
+ { HP_POP(skill->validate_ammo_amount, HP_skill_validate_ammo_amount) },
+ { HP_POP(skill->validate_state_sub, HP_skill_validate_state_sub) },
{ HP_POP(skill->validate_state, HP_skill_validate_state) },
+ { HP_POP(skill->validate_spirit_sphere_cost, HP_skill_validate_spirit_sphere_cost) },
+ { HP_POP(skill->validate_item_requirements_sub_item_amount, HP_skill_validate_item_requirements_sub_item_amount) },
+ { HP_POP(skill->validate_item_requirements_sub_items, HP_skill_validate_item_requirements_sub_items) },
+ { HP_POP(skill->validate_item_requirements_sub_any_flag, HP_skill_validate_item_requirements_sub_any_flag) },
{ HP_POP(skill->validate_item_requirements, HP_skill_validate_item_requirements) },
- { HP_POP(skill->validate_unit_target, HP_skill_validate_unit_target) },
+ { HP_POP(skill->validate_equip_requirements_sub_item_amount, HP_skill_validate_equip_requirements_sub_item_amount) },
+ { HP_POP(skill->validate_equip_requirements_sub_items, HP_skill_validate_equip_requirements_sub_items) },
+ { HP_POP(skill->validate_equip_requirements_sub_any_flag, HP_skill_validate_equip_requirements_sub_any_flag) },
+ { HP_POP(skill->validate_equip_requirements, HP_skill_validate_equip_requirements) },
+ { HP_POP(skill->validate_requirements_item_name, HP_skill_validate_requirements_item_name) },
+ { HP_POP(skill->validate_requirements, HP_skill_validate_requirements) },
+ { HP_POP(skill->validate_unit_id_sub, HP_skill_validate_unit_id_sub) },
+ { HP_POP(skill->validate_unit_id, HP_skill_validate_unit_id) },
+ { HP_POP(skill->validate_unit_layout, HP_skill_validate_unit_layout) },
+ { HP_POP(skill->validate_unit_range, HP_skill_validate_unit_range) },
+ { HP_POP(skill->validate_unit_interval, HP_skill_validate_unit_interval) },
+ { HP_POP(skill->validate_unit_flag_sub, HP_skill_validate_unit_flag_sub) },
{ HP_POP(skill->validate_unit_flag, HP_skill_validate_unit_flag) },
+ { HP_POP(skill->validate_unit_target_sub, HP_skill_validate_unit_target_sub) },
+ { HP_POP(skill->validate_unit_target, HP_skill_validate_unit_target) },
+ { HP_POP(skill->validate_unit, HP_skill_validate_unit) },
{ HP_POP(skill->validate_additional_fields, HP_skill_validate_additional_fields) },
- { HP_POP(skill->validate_skilldb, HP_skill_validate_skilldb) },
- { HP_POP(skill->validate_weapontype_sub, HP_skill_validate_weapontype_sub) },
- { HP_POP(skill->validate_ammotype_sub, HP_skill_validate_ammotype_sub) },
- { HP_POP(skill->validate_unit_flag_sub, HP_skill_validate_unit_flag_sub) },
{ HP_POP(skill->read_skilldb, HP_skill_read_skilldb) },
{ HP_POP(skill->config_set_level, HP_skill_config_set_level) },
{ HP_POP(skill->level_set_value, HP_skill_level_set_value) },
@@ -3162,6 +3243,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(skill->splash_target, HP_skill_splash_target) },
{ HP_POP(skill->check_npc_chaospanic, HP_skill_check_npc_chaospanic) },
{ HP_POP(skill->count_wos, HP_skill_count_wos) },
+ { HP_POP(skill->get_linked_song_dance_id, HP_skill_get_linked_song_dance_id) },
/* socket_interface */
{ HP_POP(sockt->init, HP_sockt_init) },
{ HP_POP(sockt->final, HP_sockt_final) },
@@ -3475,26 +3557,28 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(unit->init, HP_unit_init) },
{ HP_POP(unit->final, HP_unit_final) },
{ HP_POP(unit->bl2ud, HP_unit_bl2ud) },
+ { HP_POP(unit->cbl2ud, HP_unit_cbl2ud) },
{ HP_POP(unit->bl2ud2, HP_unit_bl2ud2) },
{ HP_POP(unit->init_ud, HP_unit_init_ud) },
{ HP_POP(unit->attack_timer, HP_unit_attack_timer) },
- { HP_POP(unit->walktoxy_timer, HP_unit_walktoxy_timer) },
- { HP_POP(unit->walktoxy_sub, HP_unit_walktoxy_sub) },
- { HP_POP(unit->delay_walktoxy_timer, HP_unit_delay_walktoxy_timer) },
- { HP_POP(unit->walktoxy, HP_unit_walktoxy) },
- { HP_POP(unit->walktobl_sub, HP_unit_walktobl_sub) },
+ { HP_POP(unit->walk_toxy_timer, HP_unit_walk_toxy_timer) },
+ { HP_POP(unit->walk_toxy_sub, HP_unit_walk_toxy_sub) },
+ { HP_POP(unit->delay_walk_toxy_timer, HP_unit_delay_walk_toxy_timer) },
+ { HP_POP(unit->walk_toxy, HP_unit_walk_toxy) },
+ { HP_POP(unit->walktobl_timer, HP_unit_walktobl_timer) },
{ HP_POP(unit->walktobl, HP_unit_walktobl) },
{ HP_POP(unit->run, HP_unit_run) },
{ HP_POP(unit->run_hit, HP_unit_run_hit) },
{ HP_POP(unit->escape, HP_unit_escape) },
{ HP_POP(unit->movepos, HP_unit_movepos) },
- { HP_POP(unit->setdir, HP_unit_setdir) },
+ { HP_POP(unit->set_dir, HP_unit_set_dir) },
{ HP_POP(unit->getdir, HP_unit_getdir) },
{ HP_POP(unit->blown, HP_unit_blown) },
{ HP_POP(unit->warp, HP_unit_warp) },
+ { HP_POP(unit->warpto_master, HP_unit_warpto_master) },
{ HP_POP(unit->stop_walking, HP_unit_stop_walking) },
{ HP_POP(unit->skilluse_id, HP_unit_skilluse_id) },
- { HP_POP(unit->step_timer, HP_unit_step_timer) },
+ { HP_POP(unit->steptimer, HP_unit_steptimer) },
{ HP_POP(unit->stop_stepaction, HP_unit_stop_stepaction) },
{ HP_POP(unit->is_walking, HP_unit_is_walking) },
{ HP_POP(unit->can_move, HP_unit_can_move) },
@@ -3532,4 +3616,4 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(vending->searchall, HP_vending_searchall) },
};
-int HookingPointsLenMax = 49;
+int HookingPointsLenMax = 50;
diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
index 423490182..8cb425011 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
@@ -13035,6 +13035,58 @@ void HP_clif_elemname_ack(int fd, struct block_list *bl) {
}
return;
}
+void HP_clif_skillname_ack(int fd, struct block_list *bl) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_skillname_ack_pre > 0) {
+ void (*preHookFunc) (int *fd, struct block_list **bl);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_skillname_ack_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_skillname_ack_pre[hIndex].func;
+ preHookFunc(&fd, &bl);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.skillname_ack(fd, bl);
+ }
+ if (HPMHooks.count.HP_clif_skillname_ack_post > 0) {
+ void (*postHookFunc) (int fd, struct block_list *bl);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_skillname_ack_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_skillname_ack_post[hIndex].func;
+ postHookFunc(fd, bl);
+ }
+ }
+ return;
+}
+void HP_clif_itemname_ack(int fd, struct block_list *bl) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_itemname_ack_pre > 0) {
+ void (*preHookFunc) (int *fd, struct block_list **bl);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_itemname_ack_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_itemname_ack_pre[hIndex].func;
+ preHookFunc(&fd, &bl);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.itemname_ack(fd, bl);
+ }
+ if (HPMHooks.count.HP_clif_itemname_ack_post > 0) {
+ void (*postHookFunc) (int fd, struct block_list *bl);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_itemname_ack_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_itemname_ack_post[hIndex].func;
+ postHookFunc(fd, bl);
+ }
+ }
+ return;
+}
void HP_clif_unknownname_ack(int fd, struct block_list *bl) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_unknownname_ack_pre > 0) {
@@ -29456,6 +29508,32 @@ void HP_clif_pOpenUIRequest(int fd, struct map_session_data *sd) {
}
return;
}
+void HP_clif_open_ui_send(struct map_session_data *sd, enum zc_ui_types ui_type) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_open_ui_send_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, enum zc_ui_types *ui_type);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_open_ui_send_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_open_ui_send_pre[hIndex].func;
+ preHookFunc(&sd, &ui_type);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.open_ui_send(sd, ui_type);
+ }
+ if (HPMHooks.count.HP_clif_open_ui_send_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, enum zc_ui_types ui_type);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_open_ui_send_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_open_ui_send_post[hIndex].func;
+ postHookFunc(sd, ui_type);
+ }
+ }
+ return;
+}
void HP_clif_open_ui(struct map_session_data *sd, enum cz_ui_types uiType) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_open_ui_pre > 0) {
@@ -30663,6 +30741,112 @@ void HP_clif_plapineDdukDdak_close(int fd, struct map_session_data *sd) {
}
return;
}
+bool HP_clif_lapineUpgrade_open(struct map_session_data *sd, int item_id) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_clif_lapineUpgrade_open_pre > 0) {
+ bool (*preHookFunc) (struct map_session_data **sd, int *item_id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_lapineUpgrade_open_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_lapineUpgrade_open_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &item_id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clif.lapineUpgrade_open(sd, item_id);
+ }
+ if (HPMHooks.count.HP_clif_lapineUpgrade_open_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, int item_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_lapineUpgrade_open_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_lapineUpgrade_open_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, item_id);
+ }
+ }
+ return retVal___;
+}
+bool HP_clif_lapineUpgrade_result(struct map_session_data *sd, enum lapineUpgrade_result result) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_clif_lapineUpgrade_result_pre > 0) {
+ bool (*preHookFunc) (struct map_session_data **sd, enum lapineUpgrade_result *result);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_lapineUpgrade_result_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_lapineUpgrade_result_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &result);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clif.lapineUpgrade_result(sd, result);
+ }
+ if (HPMHooks.count.HP_clif_lapineUpgrade_result_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, enum lapineUpgrade_result result);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_lapineUpgrade_result_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_lapineUpgrade_result_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, result);
+ }
+ }
+ return retVal___;
+}
+void HP_clif_pLapineUpgrade_close(int fd, struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_pLapineUpgrade_close_pre > 0) {
+ void (*preHookFunc) (int *fd, struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pLapineUpgrade_close_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_pLapineUpgrade_close_pre[hIndex].func;
+ preHookFunc(&fd, &sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.pLapineUpgrade_close(fd, sd);
+ }
+ if (HPMHooks.count.HP_clif_pLapineUpgrade_close_post > 0) {
+ void (*postHookFunc) (int fd, struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pLapineUpgrade_close_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_pLapineUpgrade_close_post[hIndex].func;
+ postHookFunc(fd, sd);
+ }
+ }
+ return;
+}
+void HP_clif_pLapineUpgrade_makeItem(int fd, struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_pLapineUpgrade_makeItem_pre > 0) {
+ void (*preHookFunc) (int *fd, struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pLapineUpgrade_makeItem_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_pLapineUpgrade_makeItem_pre[hIndex].func;
+ preHookFunc(&fd, &sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.pLapineUpgrade_makeItem(fd, sd);
+ }
+ if (HPMHooks.count.HP_clif_pLapineUpgrade_makeItem_post > 0) {
+ void (*postHookFunc) (int fd, struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pLapineUpgrade_makeItem_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_pLapineUpgrade_makeItem_post[hIndex].func;
+ postHookFunc(fd, sd);
+ }
+ }
+ return;
+}
void HP_clif_pReqGearOff(int fd, struct map_session_data *sd) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_pReqGearOff_pre > 0) {
@@ -48284,11 +48468,11 @@ void HP_map_reloadnpc(bool clear) {
}
return;
}
-int HP_map_check_dir(int s_dir, int t_dir) {
+int HP_map_check_dir(enum unit_dir s_dir, enum unit_dir t_dir) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_map_check_dir_pre > 0) {
- int (*preHookFunc) (int *s_dir, int *t_dir);
+ int (*preHookFunc) (enum unit_dir *s_dir, enum unit_dir *t_dir);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_map_check_dir_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_map_check_dir_pre[hIndex].func;
@@ -48303,7 +48487,7 @@ int HP_map_check_dir(int s_dir, int t_dir) {
retVal___ = HPMHooks.source.map.check_dir(s_dir, t_dir);
}
if (HPMHooks.count.HP_map_check_dir_post > 0) {
- int (*postHookFunc) (int retVal___, int s_dir, int t_dir);
+ int (*postHookFunc) (int retVal___, enum unit_dir s_dir, enum unit_dir t_dir);
for (hIndex = 0; hIndex < HPMHooks.count.HP_map_check_dir_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_map_check_dir_post[hIndex].func;
retVal___ = postHookFunc(retVal___, s_dir, t_dir);
@@ -48311,11 +48495,11 @@ int HP_map_check_dir(int s_dir, int t_dir) {
}
return retVal___;
}
-uint8 HP_map_calc_dir(struct block_list *src, int16 x, int16 y) {
+enum unit_dir HP_map_calc_dir(const struct block_list *src, int16 x, int16 y) {
int hIndex = 0;
- uint8 retVal___ = 0;
+ enum unit_dir retVal___ = UNIT_DIR_UNDEFINED;
if (HPMHooks.count.HP_map_calc_dir_pre > 0) {
- uint8 (*preHookFunc) (struct block_list **src, int16 *x, int16 *y);
+ enum unit_dir (*preHookFunc) (const struct block_list **src, int16 *x, int16 *y);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_map_calc_dir_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_map_calc_dir_pre[hIndex].func;
@@ -48330,7 +48514,7 @@ uint8 HP_map_calc_dir(struct block_list *src, int16 x, int16 y) {
retVal___ = HPMHooks.source.map.calc_dir(src, x, y);
}
if (HPMHooks.count.HP_map_calc_dir_post > 0) {
- uint8 (*postHookFunc) (uint8 retVal___, struct block_list *src, int16 x, int16 y);
+ enum unit_dir (*postHookFunc) (enum unit_dir retVal___, const struct block_list *src, int16 x, int16 y);
for (hIndex = 0; hIndex < HPMHooks.count.HP_map_calc_dir_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_map_calc_dir_post[hIndex].func;
retVal___ = postHookFunc(retVal___, src, x, y);
@@ -50460,58 +50644,6 @@ bool HP_mapit_exists(struct s_mapiterator *iter) {
return retVal___;
}
/* mapreg_interface */
-void HP_mapreg_init(void) {
- int hIndex = 0;
- if (HPMHooks.count.HP_mapreg_init_pre > 0) {
- void (*preHookFunc) (void);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_init_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapreg_init_pre[hIndex].func;
- preHookFunc();
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return;
- }
- }
- {
- HPMHooks.source.mapreg.init();
- }
- if (HPMHooks.count.HP_mapreg_init_post > 0) {
- void (*postHookFunc) (void);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_init_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapreg_init_post[hIndex].func;
- postHookFunc();
- }
- }
- return;
-}
-void HP_mapreg_final(void) {
- int hIndex = 0;
- if (HPMHooks.count.HP_mapreg_final_pre > 0) {
- void (*preHookFunc) (void);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_final_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapreg_final_pre[hIndex].func;
- preHookFunc();
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return;
- }
- }
- {
- HPMHooks.source.mapreg.final();
- }
- if (HPMHooks.count.HP_mapreg_final_post > 0) {
- void (*postHookFunc) (void);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_final_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapreg_final_post[hIndex].func;
- postHookFunc();
- }
- }
- return;
-}
int HP_mapreg_readreg(int64 uid) {
int hIndex = 0;
int retVal___ = 0;
@@ -50566,6 +50698,60 @@ char* HP_mapreg_readregstr(int64 uid) {
}
return retVal___;
}
+bool HP_mapreg_set_num_db(int64 uid, const char *name, unsigned int index, int value) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_mapreg_set_num_db_pre > 0) {
+ bool (*preHookFunc) (int64 *uid, const char **name, unsigned int *index, int *value);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_set_num_db_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_mapreg_set_num_db_pre[hIndex].func;
+ retVal___ = preHookFunc(&uid, &name, &index, &value);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.mapreg.set_num_db(uid, name, index, value);
+ }
+ if (HPMHooks.count.HP_mapreg_set_num_db_post > 0) {
+ bool (*postHookFunc) (bool retVal___, int64 uid, const char *name, unsigned int index, int value);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_set_num_db_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_mapreg_set_num_db_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, uid, name, index, value);
+ }
+ }
+ return retVal___;
+}
+bool HP_mapreg_delete_num_db(int64 uid, const char *name, unsigned int index) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_mapreg_delete_num_db_pre > 0) {
+ bool (*preHookFunc) (int64 *uid, const char **name, unsigned int *index);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_delete_num_db_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_mapreg_delete_num_db_pre[hIndex].func;
+ retVal___ = preHookFunc(&uid, &name, &index);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.mapreg.delete_num_db(uid, name, index);
+ }
+ if (HPMHooks.count.HP_mapreg_delete_num_db_post > 0) {
+ bool (*postHookFunc) (bool retVal___, int64 uid, const char *name, unsigned int index);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_delete_num_db_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_mapreg_delete_num_db_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, uid, name, index);
+ }
+ }
+ return retVal___;
+}
bool HP_mapreg_setreg(int64 uid, int val) {
int hIndex = 0;
bool retVal___ = false;
@@ -50593,6 +50779,60 @@ bool HP_mapreg_setreg(int64 uid, int val) {
}
return retVal___;
}
+bool HP_mapreg_set_str_db(int64 uid, const char *name, unsigned int index, const char *value) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_mapreg_set_str_db_pre > 0) {
+ bool (*preHookFunc) (int64 *uid, const char **name, unsigned int *index, const char **value);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_set_str_db_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_mapreg_set_str_db_pre[hIndex].func;
+ retVal___ = preHookFunc(&uid, &name, &index, &value);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.mapreg.set_str_db(uid, name, index, value);
+ }
+ if (HPMHooks.count.HP_mapreg_set_str_db_post > 0) {
+ bool (*postHookFunc) (bool retVal___, int64 uid, const char *name, unsigned int index, const char *value);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_set_str_db_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_mapreg_set_str_db_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, uid, name, index, value);
+ }
+ }
+ return retVal___;
+}
+bool HP_mapreg_delete_str_db(int64 uid, const char *name, unsigned int index) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_mapreg_delete_str_db_pre > 0) {
+ bool (*preHookFunc) (int64 *uid, const char **name, unsigned int *index);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_delete_str_db_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_mapreg_delete_str_db_pre[hIndex].func;
+ retVal___ = preHookFunc(&uid, &name, &index);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.mapreg.delete_str_db(uid, name, index);
+ }
+ if (HPMHooks.count.HP_mapreg_delete_str_db_post > 0) {
+ bool (*postHookFunc) (bool retVal___, int64 uid, const char *name, unsigned int index);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_delete_str_db_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_mapreg_delete_str_db_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, uid, name, index);
+ }
+ }
+ return retVal___;
+}
bool HP_mapreg_setregstr(int64 uid, const char *str) {
int hIndex = 0;
bool retVal___ = false;
@@ -50620,6 +50860,58 @@ bool HP_mapreg_setregstr(int64 uid, const char *str) {
}
return retVal___;
}
+void HP_mapreg_load_num_db(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_mapreg_load_num_db_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_load_num_db_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_mapreg_load_num_db_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.mapreg.load_num_db();
+ }
+ if (HPMHooks.count.HP_mapreg_load_num_db_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_load_num_db_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_mapreg_load_num_db_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
+void HP_mapreg_load_str_db(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_mapreg_load_str_db_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_load_str_db_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_mapreg_load_str_db_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.mapreg.load_str_db();
+ }
+ if (HPMHooks.count.HP_mapreg_load_str_db_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_load_str_db_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_mapreg_load_str_db_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
void HP_mapreg_load(void) {
int hIndex = 0;
if (HPMHooks.count.HP_mapreg_load_pre > 0) {
@@ -50646,6 +50938,58 @@ void HP_mapreg_load(void) {
}
return;
}
+void HP_mapreg_save_num_db(const char *name, unsigned int index, int value) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_mapreg_save_num_db_pre > 0) {
+ void (*preHookFunc) (const char **name, unsigned int *index, int *value);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_save_num_db_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_mapreg_save_num_db_pre[hIndex].func;
+ preHookFunc(&name, &index, &value);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.mapreg.save_num_db(name, index, value);
+ }
+ if (HPMHooks.count.HP_mapreg_save_num_db_post > 0) {
+ void (*postHookFunc) (const char *name, unsigned int index, int value);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_save_num_db_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_mapreg_save_num_db_post[hIndex].func;
+ postHookFunc(name, index, value);
+ }
+ }
+ return;
+}
+void HP_mapreg_save_str_db(const char *name, unsigned int index, const char *value) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_mapreg_save_str_db_pre > 0) {
+ void (*preHookFunc) (const char **name, unsigned int *index, const char **value);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_save_str_db_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_mapreg_save_str_db_pre[hIndex].func;
+ preHookFunc(&name, &index, &value);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.mapreg.save_str_db(name, index, value);
+ }
+ if (HPMHooks.count.HP_mapreg_save_str_db_post > 0) {
+ void (*postHookFunc) (const char *name, unsigned int index, const char *value);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_save_str_db_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_mapreg_save_str_db_post[hIndex].func;
+ postHookFunc(name, index, value);
+ }
+ }
+ return;
+}
void HP_mapreg_save(void) {
int hIndex = 0;
if (HPMHooks.count.HP_mapreg_save_pre > 0) {
@@ -50758,14 +51102,14 @@ void HP_mapreg_reload(void) {
}
return;
}
-bool HP_mapreg_config_read(const char *filename, const struct config_setting_t *config, bool imported) {
+bool HP_mapreg_config_read_registry(const char *filename, const struct config_setting_t *config, bool imported) {
int hIndex = 0;
bool retVal___ = false;
- if (HPMHooks.count.HP_mapreg_config_read_pre > 0) {
+ if (HPMHooks.count.HP_mapreg_config_read_registry_pre > 0) {
bool (*preHookFunc) (const char **filename, const struct config_setting_t **config, bool *imported);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_config_read_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapreg_config_read_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_config_read_registry_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_mapreg_config_read_registry_pre[hIndex].func;
retVal___ = preHookFunc(&filename, &config, &imported);
}
if (*HPMforce_return) {
@@ -50774,17 +51118,69 @@ bool HP_mapreg_config_read(const char *filename, const struct config_setting_t *
}
}
{
- retVal___ = HPMHooks.source.mapreg.config_read(filename, config, imported);
+ retVal___ = HPMHooks.source.mapreg.config_read_registry(filename, config, imported);
}
- if (HPMHooks.count.HP_mapreg_config_read_post > 0) {
+ if (HPMHooks.count.HP_mapreg_config_read_registry_post > 0) {
bool (*postHookFunc) (bool retVal___, const char *filename, const struct config_setting_t *config, bool imported);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_config_read_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapreg_config_read_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_config_read_registry_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_mapreg_config_read_registry_post[hIndex].func;
retVal___ = postHookFunc(retVal___, filename, config, imported);
}
}
return retVal___;
}
+void HP_mapreg_final(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_mapreg_final_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_final_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_mapreg_final_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.mapreg.final();
+ }
+ if (HPMHooks.count.HP_mapreg_final_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_final_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_mapreg_final_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
+void HP_mapreg_init(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_mapreg_init_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_init_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_mapreg_init_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.mapreg.init();
+ }
+ if (HPMHooks.count.HP_mapreg_init_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mapreg_init_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_mapreg_init_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
/* md5_interface */
void HP_md5_string(const char *string, char *output) {
int hIndex = 0;
@@ -53703,11 +54099,11 @@ int HP_mob_getfriendstatus_sub(struct block_list *bl, va_list ap) {
}
return retVal___;
}
-struct mob_data* HP_mob_getfriendstatus(struct mob_data *md, int cond1, int cond2) {
+struct block_list* HP_mob_getfriendstatus(struct mob_data *md, int cond1, int cond2) {
int hIndex = 0;
- struct mob_data* retVal___ = NULL;
+ struct block_list* retVal___ = NULL;
if (HPMHooks.count.HP_mob_getfriendstatus_pre > 0) {
- struct mob_data* (*preHookFunc) (struct mob_data **md, int *cond1, int *cond2);
+ struct block_list* (*preHookFunc) (struct mob_data **md, int *cond1, int *cond2);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_mob_getfriendstatus_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_mob_getfriendstatus_pre[hIndex].func;
@@ -53722,7 +54118,7 @@ struct mob_data* HP_mob_getfriendstatus(struct mob_data *md, int cond1, int cond
retVal___ = HPMHooks.source.mob.getfriendstatus(md, cond1, cond2);
}
if (HPMHooks.count.HP_mob_getfriendstatus_post > 0) {
- struct mob_data* (*postHookFunc) (struct mob_data* retVal___, struct mob_data *md, int cond1, int cond2);
+ struct block_list* (*postHookFunc) (struct block_list* retVal___, struct mob_data *md, int cond1, int cond2);
for (hIndex = 0; hIndex < HPMHooks.count.HP_mob_getfriendstatus_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_mob_getfriendstatus_post[hIndex].func;
retVal___ = postHookFunc(retVal___, md, cond1, cond2);
@@ -57108,11 +57504,11 @@ bool HP_npc_viewisid(const char *viewid) {
}
return retVal___;
}
-struct npc_data* HP_npc_create_npc(enum npc_subtype subtype, int m, int x, int y, uint8 dir, int class_) {
+struct npc_data* HP_npc_create_npc(enum npc_subtype subtype, int m, int x, int y, enum unit_dir dir, int class_) {
int hIndex = 0;
struct npc_data* retVal___ = NULL;
if (HPMHooks.count.HP_npc_create_npc_pre > 0) {
- struct npc_data* (*preHookFunc) (enum npc_subtype *subtype, int *m, int *x, int *y, uint8 *dir, int *class_);
+ struct npc_data* (*preHookFunc) (enum npc_subtype *subtype, int *m, int *x, int *y, enum unit_dir *dir, int *class_);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_npc_create_npc_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_npc_create_npc_pre[hIndex].func;
@@ -57127,7 +57523,7 @@ struct npc_data* HP_npc_create_npc(enum npc_subtype subtype, int m, int x, int y
retVal___ = HPMHooks.source.npc.create_npc(subtype, m, x, y, dir, class_);
}
if (HPMHooks.count.HP_npc_create_npc_post > 0) {
- struct npc_data* (*postHookFunc) (struct npc_data* retVal___, enum npc_subtype subtype, int m, int x, int y, uint8 dir, int class_);
+ struct npc_data* (*postHookFunc) (struct npc_data* retVal___, enum npc_subtype subtype, int m, int x, int y, enum unit_dir dir, int class_);
for (hIndex = 0; hIndex < HPMHooks.count.HP_npc_create_npc_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_npc_create_npc_post[hIndex].func;
retVal___ = postHookFunc(retVal___, subtype, m, x, y, dir, class_);
@@ -58718,6 +59114,58 @@ int HP_npc_secure_timeout_timer(int tid, int64 tick, int id, intptr_t data) {
return retVal___;
}
/* nullpo_interface */
+void HP_nullpo_init(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_nullpo_init_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_nullpo_init_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_nullpo_init_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.nullpo.init();
+ }
+ if (HPMHooks.count.HP_nullpo_init_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_nullpo_init_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_nullpo_init_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
+void HP_nullpo_final(void) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_nullpo_final_pre > 0) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_nullpo_final_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_nullpo_final_pre[hIndex].func;
+ preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.nullpo.final();
+ }
+ if (HPMHooks.count.HP_nullpo_final_post > 0) {
+ void (*postHookFunc) (void);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_nullpo_final_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_nullpo_final_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
void HP_nullpo_assert_report(const char *file, int line, const char *func, const char *targetname, const char *title) {
int hIndex = 0;
if (HPMHooks.count.HP_nullpo_assert_report_pre > 0) {
@@ -63359,32 +63807,109 @@ int HP_pc_useitem(struct map_session_data *sd, int n) {
}
return retVal___;
}
-int HP_pc_itemskill_clear(struct map_session_data *sd) {
+void HP_pc_autocast_clear_current(struct map_session_data *sd) {
int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_pc_itemskill_clear_pre > 0) {
- int (*preHookFunc) (struct map_session_data **sd);
+ if (HPMHooks.count.HP_pc_autocast_clear_current_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_itemskill_clear_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_pc_itemskill_clear_pre[hIndex].func;
- retVal___ = preHookFunc(&sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_autocast_clear_current_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_pc_autocast_clear_current_pre[hIndex].func;
+ preHookFunc(&sd);
}
if (*HPMforce_return) {
*HPMforce_return = false;
- return retVal___;
+ return;
}
}
{
- retVal___ = HPMHooks.source.pc.itemskill_clear(sd);
+ HPMHooks.source.pc.autocast_clear_current(sd);
}
- if (HPMHooks.count.HP_pc_itemskill_clear_post > 0) {
- int (*postHookFunc) (int retVal___, struct map_session_data *sd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_itemskill_clear_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_pc_itemskill_clear_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, sd);
+ if (HPMHooks.count.HP_pc_autocast_clear_current_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_autocast_clear_current_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_pc_autocast_clear_current_post[hIndex].func;
+ postHookFunc(sd);
}
}
- return retVal___;
+ return;
+}
+void HP_pc_autocast_clear(struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_pc_autocast_clear_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_autocast_clear_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_pc_autocast_clear_pre[hIndex].func;
+ preHookFunc(&sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.pc.autocast_clear(sd);
+ }
+ if (HPMHooks.count.HP_pc_autocast_clear_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_autocast_clear_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_pc_autocast_clear_post[hIndex].func;
+ postHookFunc(sd);
+ }
+ }
+ return;
+}
+void HP_pc_autocast_set_current(struct map_session_data *sd, int skill_id) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_pc_autocast_set_current_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, int *skill_id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_autocast_set_current_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_pc_autocast_set_current_pre[hIndex].func;
+ preHookFunc(&sd, &skill_id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.pc.autocast_set_current(sd, skill_id);
+ }
+ if (HPMHooks.count.HP_pc_autocast_set_current_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, int skill_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_autocast_set_current_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_pc_autocast_set_current_post[hIndex].func;
+ postHookFunc(sd, skill_id);
+ }
+ }
+ return;
+}
+void HP_pc_autocast_remove(struct map_session_data *sd, enum autocast_type type, int skill_id, int skill_lv) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_pc_autocast_remove_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, enum autocast_type *type, int *skill_id, int *skill_lv);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_autocast_remove_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_pc_autocast_remove_pre[hIndex].func;
+ preHookFunc(&sd, &type, &skill_id, &skill_lv);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.pc.autocast_remove(sd, type, skill_id, skill_lv);
+ }
+ if (HPMHooks.count.HP_pc_autocast_remove_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, enum autocast_type type, int skill_id, int skill_lv);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_autocast_remove_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_pc_autocast_remove_post[hIndex].func;
+ postHookFunc(sd, type, skill_id, skill_lv);
+ }
+ }
+ return;
}
int HP_pc_skillatk_bonus(struct map_session_data *sd, uint16 skill_id) {
int hIndex = 0;
@@ -63653,6 +64178,58 @@ int HP_pc_jobchange(struct map_session_data *sd, int class, int upper) {
}
return retVal___;
}
+void HP_pc_hide(struct map_session_data *sd, bool show_msg) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_pc_hide_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, bool *show_msg);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_hide_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_pc_hide_pre[hIndex].func;
+ preHookFunc(&sd, &show_msg);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.pc.hide(sd, show_msg);
+ }
+ if (HPMHooks.count.HP_pc_hide_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, bool show_msg);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_hide_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_pc_hide_post[hIndex].func;
+ postHookFunc(sd, show_msg);
+ }
+ }
+ return;
+}
+void HP_pc_unhide(struct map_session_data *sd, bool show_msg) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_pc_unhide_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, bool *show_msg);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_unhide_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_pc_unhide_pre[hIndex].func;
+ preHookFunc(&sd, &show_msg);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.pc.unhide(sd, show_msg);
+ }
+ if (HPMHooks.count.HP_pc_unhide_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, bool show_msg);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_unhide_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_pc_unhide_post[hIndex].func;
+ postHookFunc(sd, show_msg);
+ }
+ }
+ return;
+}
int HP_pc_setoption(struct map_session_data *sd, int type) {
int hIndex = 0;
int retVal___ = 0;
@@ -65391,10 +65968,10 @@ int HP_pc_load_combo(struct map_session_data *sd) {
}
return retVal___;
}
-void HP_pc_add_charm(struct map_session_data *sd, int interval, int max, int type) {
+void HP_pc_add_charm(struct map_session_data *sd, int interval, int max, enum spirit_charm_types type) {
int hIndex = 0;
if (HPMHooks.count.HP_pc_add_charm_pre > 0) {
- void (*preHookFunc) (struct map_session_data **sd, int *interval, int *max, int *type);
+ void (*preHookFunc) (struct map_session_data **sd, int *interval, int *max, enum spirit_charm_types *type);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_add_charm_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_pc_add_charm_pre[hIndex].func;
@@ -65409,7 +65986,7 @@ void HP_pc_add_charm(struct map_session_data *sd, int interval, int max, int typ
HPMHooks.source.pc.add_charm(sd, interval, max, type);
}
if (HPMHooks.count.HP_pc_add_charm_post > 0) {
- void (*postHookFunc) (struct map_session_data *sd, int interval, int max, int type);
+ void (*postHookFunc) (struct map_session_data *sd, int interval, int max, enum spirit_charm_types type);
for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_add_charm_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_pc_add_charm_post[hIndex].func;
postHookFunc(sd, interval, max, type);
@@ -65417,10 +65994,10 @@ void HP_pc_add_charm(struct map_session_data *sd, int interval, int max, int typ
}
return;
}
-void HP_pc_del_charm(struct map_session_data *sd, int count, int type) {
+void HP_pc_del_charm(struct map_session_data *sd, int count, enum spirit_charm_types type) {
int hIndex = 0;
if (HPMHooks.count.HP_pc_del_charm_pre > 0) {
- void (*preHookFunc) (struct map_session_data **sd, int *count, int *type);
+ void (*preHookFunc) (struct map_session_data **sd, int *count, enum spirit_charm_types *type);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_del_charm_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_pc_del_charm_pre[hIndex].func;
@@ -65435,7 +66012,7 @@ void HP_pc_del_charm(struct map_session_data *sd, int count, int type) {
HPMHooks.source.pc.del_charm(sd, count, type);
}
if (HPMHooks.count.HP_pc_del_charm_post > 0) {
- void (*postHookFunc) (struct map_session_data *sd, int count, int type);
+ void (*postHookFunc) (struct map_session_data *sd, int count, enum spirit_charm_types type);
for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_del_charm_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_pc_del_charm_post[hIndex].func;
postHookFunc(sd, count, type);
@@ -67509,6 +68086,59 @@ int HP_pet_hungry_val(struct pet_data *pd) {
}
return retVal___;
}
+void HP_pet_set_hunger(struct pet_data *pd, int value) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_pet_set_hunger_pre > 0) {
+ void (*preHookFunc) (struct pet_data **pd, int *value);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pet_set_hunger_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_pet_set_hunger_pre[hIndex].func;
+ preHookFunc(&pd, &value);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.pet.set_hunger(pd, value);
+ }
+ if (HPMHooks.count.HP_pet_set_hunger_post > 0) {
+ void (*postHookFunc) (struct pet_data *pd, int value);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pet_set_hunger_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_pet_set_hunger_post[hIndex].func;
+ postHookFunc(pd, value);
+ }
+ }
+ return;
+}
+int HP_pet_get_card4_value(int rename_flag, int intimacy) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_pet_get_card4_value_pre > 0) {
+ int (*preHookFunc) (int *rename_flag, int *intimacy);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pet_get_card4_value_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_pet_get_card4_value_pre[hIndex].func;
+ retVal___ = preHookFunc(&rename_flag, &intimacy);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.pet.get_card4_value(rename_flag, intimacy);
+ }
+ if (HPMHooks.count.HP_pet_get_card4_value_post > 0) {
+ int (*postHookFunc) (int retVal___, int rename_flag, int intimacy);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pet_get_card4_value_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_pet_get_card4_value_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, rename_flag, intimacy);
+ }
+ }
+ return retVal___;
+}
void HP_pet_set_intimate(struct pet_data *pd, int value) {
int hIndex = 0;
if (HPMHooks.count.HP_pet_set_intimate_pre > 0) {
@@ -67832,6 +68462,33 @@ int HP_pet_data_init(struct map_session_data *sd, struct s_pet *petinfo) {
}
return retVal___;
}
+int HP_pet_spawn(struct map_session_data *sd, bool birth_process) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_pet_spawn_pre > 0) {
+ int (*preHookFunc) (struct map_session_data **sd, bool *birth_process);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pet_spawn_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_pet_spawn_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &birth_process);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.pet.spawn(sd, birth_process);
+ }
+ if (HPMHooks.count.HP_pet_spawn_post > 0) {
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, bool birth_process);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pet_spawn_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_pet_spawn_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, birth_process);
+ }
+ }
+ return retVal___;
+}
int HP_pet_birth_process(struct map_session_data *sd, struct s_pet *petinfo) {
int hIndex = 0;
int retVal___ = 0;
@@ -71461,14 +72118,14 @@ bool HP_script_get_constant(const char *name, int *value) {
}
return retVal___;
}
-void HP_script_label_add(int key, int pos) {
+void HP_script_label_add(int key, int pos, enum script_label_flags flags) {
int hIndex = 0;
if (HPMHooks.count.HP_script_label_add_pre > 0) {
- void (*preHookFunc) (int *key, int *pos);
+ void (*preHookFunc) (int *key, int *pos, enum script_label_flags *flags);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_script_label_add_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_script_label_add_pre[hIndex].func;
- preHookFunc(&key, &pos);
+ preHookFunc(&key, &pos, &flags);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -71476,13 +72133,13 @@ void HP_script_label_add(int key, int pos) {
}
}
{
- HPMHooks.source.script.label_add(key, pos);
+ HPMHooks.source.script.label_add(key, pos, flags);
}
if (HPMHooks.count.HP_script_label_add_post > 0) {
- void (*postHookFunc) (int key, int pos);
+ void (*postHookFunc) (int key, int pos, enum script_label_flags flags);
for (hIndex = 0; hIndex < HPMHooks.count.HP_script_label_add_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_script_label_add_post[hIndex].func;
- postHookFunc(key, pos);
+ postHookFunc(key, pos, flags);
}
}
return;
@@ -72337,6 +72994,33 @@ const char* HP_script_parse_syntax(const char *p) {
}
return retVal___;
}
+const char* HP_script_parse_syntax_function(const char *p, bool is_public) {
+ int hIndex = 0;
+ const char* retVal___ = NULL;
+ if (HPMHooks.count.HP_script_parse_syntax_function_pre > 0) {
+ const char* (*preHookFunc) (const char **p, bool *is_public);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_script_parse_syntax_function_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_script_parse_syntax_function_pre[hIndex].func;
+ retVal___ = preHookFunc(&p, &is_public);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.script.parse_syntax_function(p, is_public);
+ }
+ if (HPMHooks.count.HP_script_parse_syntax_function_post > 0) {
+ const char* (*postHookFunc) (const char* retVal___, const char *p, bool is_public);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_script_parse_syntax_function_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_script_parse_syntax_function_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, p, is_public);
+ }
+ }
+ return retVal___;
+}
c_op HP_script_get_com(const struct script_buf *scriptbuf, int *pos) {
int hIndex = 0;
c_op retVal___ = C_NOP;
@@ -73185,6 +73869,33 @@ void HP_script_errorwarning_sub(StringBuf *buf, const char *src, const char *fil
}
return;
}
+bool HP_script_is_permanent_variable(const char *name) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_script_is_permanent_variable_pre > 0) {
+ bool (*preHookFunc) (const char **name);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_script_is_permanent_variable_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_script_is_permanent_variable_pre[hIndex].func;
+ retVal___ = preHookFunc(&name);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.script.is_permanent_variable(name);
+ }
+ if (HPMHooks.count.HP_script_is_permanent_variable_post > 0) {
+ bool (*postHookFunc) (bool retVal___, const char *name);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_script_is_permanent_variable_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_script_is_permanent_variable_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, name);
+ }
+ }
+ return retVal___;
+}
int HP_script_set_reg(struct script_state *st, struct map_session_data *sd, int64 num, const char *name, const void *value, struct reg_db *ref) {
int hIndex = 0;
int retVal___ = 0;
@@ -76138,15 +76849,15 @@ int HP_skill_get_index(int skill_id) {
}
return retVal___;
}
-int HP_skill_get_type(int skill_id) {
+int HP_skill_get_type(int skill_id, int skill_lv) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_skill_get_type_pre > 0) {
- int (*preHookFunc) (int *skill_id);
+ int (*preHookFunc) (int *skill_id, int *skill_lv);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_type_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_get_type_pre[hIndex].func;
- retVal___ = preHookFunc(&skill_id);
+ retVal___ = preHookFunc(&skill_id, &skill_lv);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -76154,26 +76865,26 @@ int HP_skill_get_type(int skill_id) {
}
}
{
- retVal___ = HPMHooks.source.skill.get_type(skill_id);
+ retVal___ = HPMHooks.source.skill.get_type(skill_id, skill_lv);
}
if (HPMHooks.count.HP_skill_get_type_post > 0) {
- int (*postHookFunc) (int retVal___, int skill_id);
+ int (*postHookFunc) (int retVal___, int skill_id, int skill_lv);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_type_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_get_type_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, skill_id);
+ retVal___ = postHookFunc(retVal___, skill_id, skill_lv);
}
}
return retVal___;
}
-int HP_skill_get_hit(int skill_id) {
+int HP_skill_get_hit(int skill_id, int skill_lv) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_skill_get_hit_pre > 0) {
- int (*preHookFunc) (int *skill_id);
+ int (*preHookFunc) (int *skill_id, int *skill_lv);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_hit_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_get_hit_pre[hIndex].func;
- retVal___ = preHookFunc(&skill_id);
+ retVal___ = preHookFunc(&skill_id, &skill_lv);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -76181,13 +76892,13 @@ int HP_skill_get_hit(int skill_id) {
}
}
{
- retVal___ = HPMHooks.source.skill.get_hit(skill_id);
+ retVal___ = HPMHooks.source.skill.get_hit(skill_id, skill_lv);
}
if (HPMHooks.count.HP_skill_get_hit_post > 0) {
- int (*postHookFunc) (int retVal___, int skill_id);
+ int (*postHookFunc) (int retVal___, int skill_id, int skill_lv);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_hit_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_get_hit_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, skill_id);
+ retVal___ = postHookFunc(retVal___, skill_id, skill_lv);
}
}
return retVal___;
@@ -76435,6 +77146,33 @@ int HP_skill_get_mhp(int skill_id, int skill_lv) {
}
return retVal___;
}
+int HP_skill_get_msp(int skill_id, int skill_lv) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_skill_get_msp_pre > 0) {
+ int (*preHookFunc) (int *skill_id, int *skill_lv);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_msp_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_get_msp_pre[hIndex].func;
+ retVal___ = preHookFunc(&skill_id, &skill_lv);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.get_msp(skill_id, skill_lv);
+ }
+ if (HPMHooks.count.HP_skill_get_msp_post > 0) {
+ int (*postHookFunc) (int retVal___, int skill_id, int skill_lv);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_msp_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_get_msp_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, skill_id, skill_lv);
+ }
+ }
+ return retVal___;
+}
int HP_skill_get_sp(int skill_id, int skill_lv) {
int hIndex = 0;
int retVal___ = 0;
@@ -76516,15 +77254,15 @@ int HP_skill_get_sp_rate(int skill_id, int skill_lv) {
}
return retVal___;
}
-int HP_skill_get_state(int skill_id) {
+int HP_skill_get_state(int skill_id, int skill_lv) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_skill_get_state_pre > 0) {
- int (*preHookFunc) (int *skill_id);
+ int (*preHookFunc) (int *skill_id, int *skill_lv);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_state_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_get_state_pre[hIndex].func;
- retVal___ = preHookFunc(&skill_id);
+ retVal___ = preHookFunc(&skill_id, &skill_lv);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -76532,13 +77270,13 @@ int HP_skill_get_state(int skill_id) {
}
}
{
- retVal___ = HPMHooks.source.skill.get_state(skill_id);
+ retVal___ = HPMHooks.source.skill.get_state(skill_id, skill_lv);
}
if (HPMHooks.count.HP_skill_get_state_post > 0) {
- int (*postHookFunc) (int retVal___, int skill_id);
+ int (*postHookFunc) (int retVal___, int skill_id, int skill_lv);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_state_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_get_state_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, skill_id);
+ retVal___ = postHookFunc(retVal___, skill_id, skill_lv);
}
}
return retVal___;
@@ -76570,6 +77308,33 @@ int HP_skill_get_spiritball(int skill_id, int skill_lv) {
}
return retVal___;
}
+int HP_skill_get_item_index(int skill_id, int skill_lv) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_skill_get_item_index_pre > 0) {
+ int (*preHookFunc) (int *skill_id, int *skill_lv);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_item_index_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_get_item_index_pre[hIndex].func;
+ retVal___ = preHookFunc(&skill_id, &skill_lv);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.get_item_index(skill_id, skill_lv);
+ }
+ if (HPMHooks.count.HP_skill_get_item_index_post > 0) {
+ int (*postHookFunc) (int retVal___, int skill_id, int skill_lv);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_item_index_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_get_item_index_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, skill_id, skill_lv);
+ }
+ }
+ return retVal___;
+}
int HP_skill_get_itemid(int skill_id, int item_idx) {
int hIndex = 0;
int retVal___ = 0;
@@ -76597,15 +77362,15 @@ int HP_skill_get_itemid(int skill_id, int item_idx) {
}
return retVal___;
}
-int HP_skill_get_itemqty(int skill_id, int item_idx) {
+int HP_skill_get_itemqty(int skill_id, int item_idx, int skill_lv) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_skill_get_itemqty_pre > 0) {
- int (*preHookFunc) (int *skill_id, int *item_idx);
+ int (*preHookFunc) (int *skill_id, int *item_idx, int *skill_lv);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_itemqty_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_get_itemqty_pre[hIndex].func;
- retVal___ = preHookFunc(&skill_id, &item_idx);
+ retVal___ = preHookFunc(&skill_id, &item_idx, &skill_lv);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -76613,17 +77378,125 @@ int HP_skill_get_itemqty(int skill_id, int item_idx) {
}
}
{
- retVal___ = HPMHooks.source.skill.get_itemqty(skill_id, item_idx);
+ retVal___ = HPMHooks.source.skill.get_itemqty(skill_id, item_idx, skill_lv);
}
if (HPMHooks.count.HP_skill_get_itemqty_post > 0) {
- int (*postHookFunc) (int retVal___, int skill_id, int item_idx);
+ int (*postHookFunc) (int retVal___, int skill_id, int item_idx, int skill_lv);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_itemqty_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_get_itemqty_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, skill_id, item_idx, skill_lv);
+ }
+ }
+ return retVal___;
+}
+bool HP_skill_get_item_any_flag(int skill_id, int skill_lv) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_skill_get_item_any_flag_pre > 0) {
+ bool (*preHookFunc) (int *skill_id, int *skill_lv);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_item_any_flag_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_get_item_any_flag_pre[hIndex].func;
+ retVal___ = preHookFunc(&skill_id, &skill_lv);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.get_item_any_flag(skill_id, skill_lv);
+ }
+ if (HPMHooks.count.HP_skill_get_item_any_flag_post > 0) {
+ bool (*postHookFunc) (bool retVal___, int skill_id, int skill_lv);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_item_any_flag_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_get_item_any_flag_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, skill_id, skill_lv);
+ }
+ }
+ return retVal___;
+}
+int HP_skill_get_equip_id(int skill_id, int item_idx) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_skill_get_equip_id_pre > 0) {
+ int (*preHookFunc) (int *skill_id, int *item_idx);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_equip_id_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_get_equip_id_pre[hIndex].func;
+ retVal___ = preHookFunc(&skill_id, &item_idx);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.get_equip_id(skill_id, item_idx);
+ }
+ if (HPMHooks.count.HP_skill_get_equip_id_post > 0) {
+ int (*postHookFunc) (int retVal___, int skill_id, int item_idx);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_equip_id_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_get_equip_id_post[hIndex].func;
retVal___ = postHookFunc(retVal___, skill_id, item_idx);
}
}
return retVal___;
}
+int HP_skill_get_equip_amount(int skill_id, int item_idx, int skill_lv) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_skill_get_equip_amount_pre > 0) {
+ int (*preHookFunc) (int *skill_id, int *item_idx, int *skill_lv);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_equip_amount_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_get_equip_amount_pre[hIndex].func;
+ retVal___ = preHookFunc(&skill_id, &item_idx, &skill_lv);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.get_equip_amount(skill_id, item_idx, skill_lv);
+ }
+ if (HPMHooks.count.HP_skill_get_equip_amount_post > 0) {
+ int (*postHookFunc) (int retVal___, int skill_id, int item_idx, int skill_lv);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_equip_amount_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_get_equip_amount_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, skill_id, item_idx, skill_lv);
+ }
+ }
+ return retVal___;
+}
+bool HP_skill_get_equip_any_flag(int skill_id, int skill_lv) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_skill_get_equip_any_flag_pre > 0) {
+ bool (*preHookFunc) (int *skill_id, int *skill_lv);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_equip_any_flag_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_get_equip_any_flag_pre[hIndex].func;
+ retVal___ = preHookFunc(&skill_id, &skill_lv);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.get_equip_any_flag(skill_id, skill_lv);
+ }
+ if (HPMHooks.count.HP_skill_get_equip_any_flag_post > 0) {
+ bool (*postHookFunc) (bool retVal___, int skill_id, int skill_lv);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_equip_any_flag_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_get_equip_any_flag_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, skill_id, skill_lv);
+ }
+ }
+ return retVal___;
+}
int HP_skill_get_zeny(int skill_id, int skill_lv) {
int hIndex = 0;
int retVal___ = 0;
@@ -76867,15 +77740,15 @@ int HP_skill_get_delaynodex(int skill_id, int skill_lv) {
}
return retVal___;
}
-int HP_skill_get_castdef(int skill_id) {
+int HP_skill_get_castdef(int skill_id, int skill_lv) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_skill_get_castdef_pre > 0) {
- int (*preHookFunc) (int *skill_id);
+ int (*preHookFunc) (int *skill_id, int *skill_lv);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_castdef_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_get_castdef_pre[hIndex].func;
- retVal___ = preHookFunc(&skill_id);
+ retVal___ = preHookFunc(&skill_id, &skill_lv);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -76883,13 +77756,13 @@ int HP_skill_get_castdef(int skill_id) {
}
}
{
- retVal___ = HPMHooks.source.skill.get_castdef(skill_id);
+ retVal___ = HPMHooks.source.skill.get_castdef(skill_id, skill_lv);
}
if (HPMHooks.count.HP_skill_get_castdef_post > 0) {
- int (*postHookFunc) (int retVal___, int skill_id);
+ int (*postHookFunc) (int retVal___, int skill_id, int skill_lv);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_castdef_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_get_castdef_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, skill_id);
+ retVal___ = postHookFunc(retVal___, skill_id, skill_lv);
}
}
return retVal___;
@@ -76975,15 +77848,15 @@ int HP_skill_get_ammo_qty(int skill_id, int skill_lv) {
}
return retVal___;
}
-int HP_skill_get_unit_id(int skill_id, int flag) {
+int HP_skill_get_unit_id(int skill_id, int skill_lv, int flag) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_skill_get_unit_id_pre > 0) {
- int (*preHookFunc) (int *skill_id, int *flag);
+ int (*preHookFunc) (int *skill_id, int *skill_lv, int *flag);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_unit_id_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_get_unit_id_pre[hIndex].func;
- retVal___ = preHookFunc(&skill_id, &flag);
+ retVal___ = preHookFunc(&skill_id, &skill_lv, &flag);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -76991,13 +77864,13 @@ int HP_skill_get_unit_id(int skill_id, int flag) {
}
}
{
- retVal___ = HPMHooks.source.skill.get_unit_id(skill_id, flag);
+ retVal___ = HPMHooks.source.skill.get_unit_id(skill_id, skill_lv, flag);
}
if (HPMHooks.count.HP_skill_get_unit_id_post > 0) {
- int (*postHookFunc) (int retVal___, int skill_id, int flag);
+ int (*postHookFunc) (int retVal___, int skill_id, int skill_lv, int flag);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_unit_id_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_get_unit_id_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, skill_id, flag);
+ retVal___ = postHookFunc(retVal___, skill_id, skill_lv, flag);
}
}
return retVal___;
@@ -77029,15 +77902,15 @@ int HP_skill_get_inf2(int skill_id) {
}
return retVal___;
}
-int HP_skill_get_castcancel(int skill_id) {
+int HP_skill_get_castcancel(int skill_id, int skill_lv) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_skill_get_castcancel_pre > 0) {
- int (*preHookFunc) (int *skill_id);
+ int (*preHookFunc) (int *skill_id, int *skill_lv);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_castcancel_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_get_castcancel_pre[hIndex].func;
- retVal___ = preHookFunc(&skill_id);
+ retVal___ = preHookFunc(&skill_id, &skill_lv);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -77045,13 +77918,13 @@ int HP_skill_get_castcancel(int skill_id) {
}
}
{
- retVal___ = HPMHooks.source.skill.get_castcancel(skill_id);
+ retVal___ = HPMHooks.source.skill.get_castcancel(skill_id, skill_lv);
}
if (HPMHooks.count.HP_skill_get_castcancel_post > 0) {
- int (*postHookFunc) (int retVal___, int skill_id);
+ int (*postHookFunc) (int retVal___, int skill_id, int skill_lv);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_castcancel_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_get_castcancel_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, skill_id);
+ retVal___ = postHookFunc(retVal___, skill_id, skill_lv);
}
}
return retVal___;
@@ -77137,15 +78010,15 @@ int HP_skill_get_unit_flag(int skill_id) {
}
return retVal___;
}
-int HP_skill_get_unit_target(int skill_id) {
+int HP_skill_get_unit_target(int skill_id, int skill_lv) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_skill_get_unit_target_pre > 0) {
- int (*preHookFunc) (int *skill_id);
+ int (*preHookFunc) (int *skill_id, int *skill_lv);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_unit_target_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_get_unit_target_pre[hIndex].func;
- retVal___ = preHookFunc(&skill_id);
+ retVal___ = preHookFunc(&skill_id, &skill_lv);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -77153,26 +78026,26 @@ int HP_skill_get_unit_target(int skill_id) {
}
}
{
- retVal___ = HPMHooks.source.skill.get_unit_target(skill_id);
+ retVal___ = HPMHooks.source.skill.get_unit_target(skill_id, skill_lv);
}
if (HPMHooks.count.HP_skill_get_unit_target_post > 0) {
- int (*postHookFunc) (int retVal___, int skill_id);
+ int (*postHookFunc) (int retVal___, int skill_id, int skill_lv);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_unit_target_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_get_unit_target_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, skill_id);
+ retVal___ = postHookFunc(retVal___, skill_id, skill_lv);
}
}
return retVal___;
}
-int HP_skill_get_unit_interval(int skill_id) {
+int HP_skill_get_unit_interval(int skill_id, int skill_lv) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_skill_get_unit_interval_pre > 0) {
- int (*preHookFunc) (int *skill_id);
+ int (*preHookFunc) (int *skill_id, int *skill_lv);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_unit_interval_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_get_unit_interval_pre[hIndex].func;
- retVal___ = preHookFunc(&skill_id);
+ retVal___ = preHookFunc(&skill_id, &skill_lv);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -77180,26 +78053,26 @@ int HP_skill_get_unit_interval(int skill_id) {
}
}
{
- retVal___ = HPMHooks.source.skill.get_unit_interval(skill_id);
+ retVal___ = HPMHooks.source.skill.get_unit_interval(skill_id, skill_lv);
}
if (HPMHooks.count.HP_skill_get_unit_interval_post > 0) {
- int (*postHookFunc) (int retVal___, int skill_id);
+ int (*postHookFunc) (int retVal___, int skill_id, int skill_lv);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_unit_interval_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_get_unit_interval_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, skill_id);
+ retVal___ = postHookFunc(retVal___, skill_id, skill_lv);
}
}
return retVal___;
}
-int HP_skill_get_unit_bl_target(int skill_id) {
+int HP_skill_get_unit_bl_target(int skill_id, int skill_lv) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_skill_get_unit_bl_target_pre > 0) {
- int (*preHookFunc) (int *skill_id);
+ int (*preHookFunc) (int *skill_id, int *skill_lv);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_unit_bl_target_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_get_unit_bl_target_pre[hIndex].func;
- retVal___ = preHookFunc(&skill_id);
+ retVal___ = preHookFunc(&skill_id, &skill_lv);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -77207,13 +78080,13 @@ int HP_skill_get_unit_bl_target(int skill_id) {
}
}
{
- retVal___ = HPMHooks.source.skill.get_unit_bl_target(skill_id);
+ retVal___ = HPMHooks.source.skill.get_unit_bl_target(skill_id, skill_lv);
}
if (HPMHooks.count.HP_skill_get_unit_bl_target_post > 0) {
- int (*postHookFunc) (int retVal___, int skill_id);
+ int (*postHookFunc) (int retVal___, int skill_id, int skill_lv);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_unit_bl_target_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_get_unit_bl_target_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, skill_id);
+ retVal___ = postHookFunc(retVal___, skill_id, skill_lv);
}
}
return retVal___;
@@ -77488,15 +78361,15 @@ int HP_skill_name2id(const char *name) {
}
return retVal___;
}
-int HP_skill_isammotype(struct map_session_data *sd, int skill_id) {
+int HP_skill_isammotype(struct map_session_data *sd, int skill_id, int skill_lv) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_skill_isammotype_pre > 0) {
- int (*preHookFunc) (struct map_session_data **sd, int *skill_id);
+ int (*preHookFunc) (struct map_session_data **sd, int *skill_id, int *skill_lv);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_isammotype_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_isammotype_pre[hIndex].func;
- retVal___ = preHookFunc(&sd, &skill_id);
+ retVal___ = preHookFunc(&sd, &skill_id, &skill_lv);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -77504,13 +78377,13 @@ int HP_skill_isammotype(struct map_session_data *sd, int skill_id) {
}
}
{
- retVal___ = HPMHooks.source.skill.isammotype(sd, skill_id);
+ retVal___ = HPMHooks.source.skill.isammotype(sd, skill_id, skill_lv);
}
if (HPMHooks.count.HP_skill_isammotype_post > 0) {
- int (*postHookFunc) (int retVal___, struct map_session_data *sd, int skill_id);
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, int skill_id, int skill_lv);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_isammotype_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_isammotype_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, sd, skill_id);
+ retVal___ = postHookFunc(retVal___, sd, skill_id, skill_lv);
}
}
return retVal___;
@@ -77704,11 +78577,11 @@ int HP_skill_counter_additional_effect(struct block_list *src, struct block_list
}
return retVal___;
}
-int HP_skill_blown(struct block_list *src, struct block_list *target, int count, int8 dir, int flag) {
+int HP_skill_blown(struct block_list *src, struct block_list *target, int count, enum unit_dir dir, int flag) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_skill_blown_pre > 0) {
- int (*preHookFunc) (struct block_list **src, struct block_list **target, int *count, int8 *dir, int *flag);
+ int (*preHookFunc) (struct block_list **src, struct block_list **target, int *count, enum unit_dir *dir, int *flag);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_blown_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_blown_pre[hIndex].func;
@@ -77723,7 +78596,7 @@ int HP_skill_blown(struct block_list *src, struct block_list *target, int count,
retVal___ = HPMHooks.source.skill.blown(src, target, count, dir, flag);
}
if (HPMHooks.count.HP_skill_blown_post > 0) {
- int (*postHookFunc) (int retVal___, struct block_list *src, struct block_list *target, int count, int8 dir, int flag);
+ int (*postHookFunc) (int retVal___, struct block_list *src, struct block_list *target, int count, enum unit_dir dir, int flag);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_blown_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_blown_post[hIndex].func;
retVal___ = postHookFunc(retVal___, src, target, count, dir, flag);
@@ -77920,15 +78793,15 @@ struct skill_unit_group* HP_skill_init_unitgroup(struct block_list *src, int cou
}
return retVal___;
}
-int HP_skill_del_unitgroup(struct skill_unit_group *group, const char *file, int line, const char *func) {
+int HP_skill_del_unitgroup(struct skill_unit_group *group) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_skill_del_unitgroup_pre > 0) {
- int (*preHookFunc) (struct skill_unit_group **group, const char **file, int *line, const char **func);
+ int (*preHookFunc) (struct skill_unit_group **group);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_del_unitgroup_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_del_unitgroup_pre[hIndex].func;
- retVal___ = preHookFunc(&group, &file, &line, &func);
+ retVal___ = preHookFunc(&group);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -77936,13 +78809,13 @@ int HP_skill_del_unitgroup(struct skill_unit_group *group, const char *file, int
}
}
{
- retVal___ = HPMHooks.source.skill.del_unitgroup(group, file, line, func);
+ retVal___ = HPMHooks.source.skill.del_unitgroup(group);
}
if (HPMHooks.count.HP_skill_del_unitgroup_post > 0) {
- int (*postHookFunc) (int retVal___, struct skill_unit_group *group, const char *file, int line, const char *func);
+ int (*postHookFunc) (int retVal___, struct skill_unit_group *group);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_del_unitgroup_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_del_unitgroup_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, group, file, line, func);
+ retVal___ = postHookFunc(retVal___, group);
}
}
return retVal___;
@@ -78163,14 +79036,14 @@ int HP_skill_delay_fix(struct block_list *bl, uint16 skill_id, uint16 skill_lv)
}
return retVal___;
}
-bool HP_skill_is_item_skill(struct map_session_data *sd, int skill_id, int skill_lv) {
+int HP_skill_check_condition_required_equip(struct map_session_data *sd, int skill_id, int skill_lv) {
int hIndex = 0;
- bool retVal___ = false;
- if (HPMHooks.count.HP_skill_is_item_skill_pre > 0) {
- bool (*preHookFunc) (struct map_session_data **sd, int *skill_id, int *skill_lv);
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_skill_check_condition_required_equip_pre > 0) {
+ int (*preHookFunc) (struct map_session_data **sd, int *skill_id, int *skill_lv);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_is_item_skill_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_skill_is_item_skill_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_check_condition_required_equip_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_check_condition_required_equip_pre[hIndex].func;
retVal___ = preHookFunc(&sd, &skill_id, &skill_lv);
}
if (*HPMforce_return) {
@@ -78179,12 +79052,12 @@ bool HP_skill_is_item_skill(struct map_session_data *sd, int skill_id, int skill
}
}
{
- retVal___ = HPMHooks.source.skill.is_item_skill(sd, skill_id, skill_lv);
+ retVal___ = HPMHooks.source.skill.check_condition_required_equip(sd, skill_id, skill_lv);
}
- if (HPMHooks.count.HP_skill_is_item_skill_post > 0) {
- bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, int skill_id, int skill_lv);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_is_item_skill_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_skill_is_item_skill_post[hIndex].func;
+ if (HPMHooks.count.HP_skill_check_condition_required_equip_post > 0) {
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, int skill_id, int skill_lv);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_check_condition_required_equip_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_check_condition_required_equip_post[hIndex].func;
retVal___ = postHookFunc(retVal___, sd, skill_id, skill_lv);
}
}
@@ -78217,6 +79090,60 @@ int HP_skill_check_condition_castbegin(struct map_session_data *sd, uint16 skill
}
return retVal___;
}
+int HP_skill_check_condition_required_items(struct map_session_data *sd, int skill_id, int skill_lv) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_skill_check_condition_required_items_pre > 0) {
+ int (*preHookFunc) (struct map_session_data **sd, int *skill_id, int *skill_lv);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_check_condition_required_items_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_check_condition_required_items_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &skill_id, &skill_lv);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.check_condition_required_items(sd, skill_id, skill_lv);
+ }
+ if (HPMHooks.count.HP_skill_check_condition_required_items_post > 0) {
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, int skill_id, int skill_lv);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_check_condition_required_items_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_check_condition_required_items_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, skill_id, skill_lv);
+ }
+ }
+ return retVal___;
+}
+bool HP_skill_items_required(struct map_session_data *sd, int skill_id, int skill_lv) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_skill_items_required_pre > 0) {
+ bool (*preHookFunc) (struct map_session_data **sd, int *skill_id, int *skill_lv);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_items_required_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_items_required_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &skill_id, &skill_lv);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.items_required(sd, skill_id, skill_lv);
+ }
+ if (HPMHooks.count.HP_skill_items_required_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, int skill_id, int skill_lv);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_items_required_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_items_required_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, skill_id, skill_lv);
+ }
+ }
+ return retVal___;
+}
int HP_skill_check_condition_castend(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv) {
int hIndex = 0;
int retVal___ = 0;
@@ -78244,6 +79171,33 @@ int HP_skill_check_condition_castend(struct map_session_data *sd, uint16 skill_i
}
return retVal___;
}
+int HP_skill_get_any_item_index(struct map_session_data *sd, int skill_id, int skill_lv) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_skill_get_any_item_index_pre > 0) {
+ int (*preHookFunc) (struct map_session_data **sd, int *skill_id, int *skill_lv);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_any_item_index_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_get_any_item_index_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &skill_id, &skill_lv);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.get_any_item_index(sd, skill_id, skill_lv);
+ }
+ if (HPMHooks.count.HP_skill_get_any_item_index_post > 0) {
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, int skill_id, int skill_lv);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_any_item_index_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_get_any_item_index_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, skill_id, skill_lv);
+ }
+ }
+ return retVal___;
+}
int HP_skill_consume_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv, short type) {
int hIndex = 0;
int retVal___ = 0;
@@ -78867,6 +79821,32 @@ int HP_skill_not_ok_mercenary(uint16 skill_id, struct mercenary_data *md) {
}
return retVal___;
}
+void HP_skill_validate_autocast_data(struct map_session_data *sd, int skill_id, int skill_lv) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_autocast_data_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, int *skill_id, int *skill_lv);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_autocast_data_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_autocast_data_pre[hIndex].func;
+ preHookFunc(&sd, &skill_id, &skill_lv);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_autocast_data(sd, skill_id, skill_lv);
+ }
+ if (HPMHooks.count.HP_skill_validate_autocast_data_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, int skill_id, int skill_lv);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_autocast_data_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_autocast_data_post[hIndex].func;
+ postHookFunc(sd, skill_id, skill_lv);
+ }
+ }
+ return;
+}
int HP_skill_chastle_mob_changetarget(struct block_list *bl, va_list ap) {
int hIndex = 0;
int retVal___ = 0;
@@ -79409,14 +80389,14 @@ int HP_skill_check_unit_range2_sub(struct block_list *bl, va_list ap) {
}
return retVal___;
}
-void HP_skill_toggle_magicpower(struct block_list *bl, uint16 skill_id) {
+void HP_skill_toggle_magicpower(struct block_list *bl, uint16 skill_id, int skill_lv) {
int hIndex = 0;
if (HPMHooks.count.HP_skill_toggle_magicpower_pre > 0) {
- void (*preHookFunc) (struct block_list **bl, uint16 *skill_id);
+ void (*preHookFunc) (struct block_list **bl, uint16 *skill_id, int *skill_lv);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_toggle_magicpower_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_toggle_magicpower_pre[hIndex].func;
- preHookFunc(&bl, &skill_id);
+ preHookFunc(&bl, &skill_id, &skill_lv);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -79424,13 +80404,13 @@ void HP_skill_toggle_magicpower(struct block_list *bl, uint16 skill_id) {
}
}
{
- HPMHooks.source.skill.toggle_magicpower(bl, skill_id);
+ HPMHooks.source.skill.toggle_magicpower(bl, skill_id, skill_lv);
}
if (HPMHooks.count.HP_skill_toggle_magicpower_post > 0) {
- void (*postHookFunc) (struct block_list *bl, uint16 skill_id);
+ void (*postHookFunc) (struct block_list *bl, uint16 skill_id, int skill_lv);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_toggle_magicpower_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_toggle_magicpower_post[hIndex].func;
- postHookFunc(bl, skill_id);
+ postHookFunc(bl, skill_id, skill_lv);
}
}
return;
@@ -80034,10 +81014,10 @@ int HP_skill_check_condition_mob_master_sub(struct block_list *bl, va_list ap) {
}
return retVal___;
}
-void HP_skill_brandishspear_first(struct square *tc, uint8 dir, int16 x, int16 y) {
+void HP_skill_brandishspear_first(struct square *tc, enum unit_dir dir, int16 x, int16 y) {
int hIndex = 0;
if (HPMHooks.count.HP_skill_brandishspear_first_pre > 0) {
- void (*preHookFunc) (struct square **tc, uint8 *dir, int16 *x, int16 *y);
+ void (*preHookFunc) (struct square **tc, enum unit_dir *dir, int16 *x, int16 *y);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_brandishspear_first_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_brandishspear_first_pre[hIndex].func;
@@ -80052,7 +81032,7 @@ void HP_skill_brandishspear_first(struct square *tc, uint8 dir, int16 x, int16 y
HPMHooks.source.skill.brandishspear_first(tc, dir, x, y);
}
if (HPMHooks.count.HP_skill_brandishspear_first_post > 0) {
- void (*postHookFunc) (struct square *tc, uint8 dir, int16 x, int16 y);
+ void (*postHookFunc) (struct square *tc, enum unit_dir dir, int16 x, int16 y);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_brandishspear_first_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_brandishspear_first_post[hIndex].func;
postHookFunc(tc, dir, x, y);
@@ -80060,10 +81040,10 @@ void HP_skill_brandishspear_first(struct square *tc, uint8 dir, int16 x, int16 y
}
return;
}
-void HP_skill_brandishspear_dir(struct square *tc, uint8 dir, int are) {
+void HP_skill_brandishspear_dir(struct square *tc, enum unit_dir dir, int are) {
int hIndex = 0;
if (HPMHooks.count.HP_skill_brandishspear_dir_pre > 0) {
- void (*preHookFunc) (struct square **tc, uint8 *dir, int *are);
+ void (*preHookFunc) (struct square **tc, enum unit_dir *dir, int *are);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_brandishspear_dir_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_brandishspear_dir_pre[hIndex].func;
@@ -80078,7 +81058,7 @@ void HP_skill_brandishspear_dir(struct square *tc, uint8 dir, int are) {
HPMHooks.source.skill.brandishspear_dir(tc, dir, are);
}
if (HPMHooks.count.HP_skill_brandishspear_dir_post > 0) {
- void (*postHookFunc) (struct square *tc, uint8 dir, int are);
+ void (*postHookFunc) (struct square *tc, enum unit_dir dir, int are);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_brandishspear_dir_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_brandishspear_dir_post[hIndex].func;
postHookFunc(tc, dir, are);
@@ -80610,6 +81590,163 @@ void HP_skill_init_unit_layout_unknown(int skill_idx, int pos) {
}
return;
}
+void HP_skill_validate_id(struct config_setting_t *conf, struct s_skill_db *sk, int conf_index) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_id_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk, int *conf_index);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_id_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_id_pre[hIndex].func;
+ preHookFunc(&conf, &sk, &conf_index);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_id(conf, sk, conf_index);
+ }
+ if (HPMHooks.count.HP_skill_validate_id_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk, int conf_index);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_id_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_id_post[hIndex].func;
+ postHookFunc(conf, sk, conf_index);
+ }
+ }
+ return;
+}
+bool HP_skill_name_contains_invalid_character(const char *name) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_skill_name_contains_invalid_character_pre > 0) {
+ bool (*preHookFunc) (const char **name);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_name_contains_invalid_character_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_name_contains_invalid_character_pre[hIndex].func;
+ retVal___ = preHookFunc(&name);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.name_contains_invalid_character(name);
+ }
+ if (HPMHooks.count.HP_skill_name_contains_invalid_character_post > 0) {
+ bool (*postHookFunc) (bool retVal___, const char *name);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_name_contains_invalid_character_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_name_contains_invalid_character_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, name);
+ }
+ }
+ return retVal___;
+}
+void HP_skill_validate_name(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_name_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_name_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_name_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_name(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_name_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_name_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_name_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_max_level(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_max_level_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_max_level_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_max_level_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_max_level(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_max_level_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_max_level_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_max_level_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_description(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_description_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_description_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_description_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_description(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_description_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_description_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_description_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_range(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_range_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_range_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_range_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_range(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_range_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_range_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_range_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
void HP_skill_validate_hittype(struct config_setting_t *conf, struct s_skill_db *sk) {
int hIndex = 0;
if (HPMHooks.count.HP_skill_validate_hittype_pre > 0) {
@@ -80662,6 +81799,32 @@ void HP_skill_validate_skilltype(struct config_setting_t *conf, struct s_skill_d
}
return;
}
+void HP_skill_validate_skillinfo(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_skillinfo_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_skillinfo_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_skillinfo_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_skillinfo(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_skillinfo_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_skillinfo_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_skillinfo_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
void HP_skill_validate_attacktype(struct config_setting_t *conf, struct s_skill_db *sk) {
int hIndex = 0;
if (HPMHooks.count.HP_skill_validate_attacktype_pre > 0) {
@@ -80714,13 +81877,13 @@ void HP_skill_validate_element(struct config_setting_t *conf, struct s_skill_db
}
return;
}
-void HP_skill_validate_skillinfo(struct config_setting_t *conf, struct s_skill_db *sk) {
+void HP_skill_validate_damagetype(struct config_setting_t *conf, struct s_skill_db *sk) {
int hIndex = 0;
- if (HPMHooks.count.HP_skill_validate_skillinfo_pre > 0) {
+ if (HPMHooks.count.HP_skill_validate_damagetype_pre > 0) {
void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_skillinfo_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_skill_validate_skillinfo_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_damagetype_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_damagetype_pre[hIndex].func;
preHookFunc(&conf, &sk);
}
if (*HPMforce_return) {
@@ -80729,24 +81892,24 @@ void HP_skill_validate_skillinfo(struct config_setting_t *conf, struct s_skill_d
}
}
{
- HPMHooks.source.skill.validate_skillinfo(conf, sk);
+ HPMHooks.source.skill.validate_damagetype(conf, sk);
}
- if (HPMHooks.count.HP_skill_validate_skillinfo_post > 0) {
+ if (HPMHooks.count.HP_skill_validate_damagetype_post > 0) {
void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_skillinfo_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_skill_validate_skillinfo_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_damagetype_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_damagetype_post[hIndex].func;
postHookFunc(conf, sk);
}
}
return;
}
-void HP_skill_validate_damagetype(struct config_setting_t *conf, struct s_skill_db *sk) {
+void HP_skill_validate_splash_range(struct config_setting_t *conf, struct s_skill_db *sk) {
int hIndex = 0;
- if (HPMHooks.count.HP_skill_validate_damagetype_pre > 0) {
+ if (HPMHooks.count.HP_skill_validate_splash_range_pre > 0) {
void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_damagetype_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_skill_validate_damagetype_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_splash_range_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_splash_range_pre[hIndex].func;
preHookFunc(&conf, &sk);
}
if (*HPMforce_return) {
@@ -80755,12 +81918,324 @@ void HP_skill_validate_damagetype(struct config_setting_t *conf, struct s_skill_
}
}
{
- HPMHooks.source.skill.validate_damagetype(conf, sk);
+ HPMHooks.source.skill.validate_splash_range(conf, sk);
}
- if (HPMHooks.count.HP_skill_validate_damagetype_post > 0) {
+ if (HPMHooks.count.HP_skill_validate_splash_range_post > 0) {
void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_damagetype_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_skill_validate_damagetype_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_splash_range_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_splash_range_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_number_of_hits(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_number_of_hits_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_number_of_hits_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_number_of_hits_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_number_of_hits(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_number_of_hits_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_number_of_hits_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_number_of_hits_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_interrupt_cast(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_interrupt_cast_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_interrupt_cast_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_interrupt_cast_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_interrupt_cast(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_interrupt_cast_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_interrupt_cast_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_interrupt_cast_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_cast_def_rate(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_cast_def_rate_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_cast_def_rate_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_cast_def_rate_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_cast_def_rate(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_cast_def_rate_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_cast_def_rate_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_cast_def_rate_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_number_of_instances(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_number_of_instances_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_number_of_instances_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_number_of_instances_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_number_of_instances(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_number_of_instances_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_number_of_instances_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_number_of_instances_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_knock_back_tiles(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_knock_back_tiles_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_knock_back_tiles_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_knock_back_tiles_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_knock_back_tiles(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_knock_back_tiles_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_knock_back_tiles_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_knock_back_tiles_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_cast_time(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_cast_time_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_cast_time_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_cast_time_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_cast_time(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_cast_time_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_cast_time_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_cast_time_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_act_delay(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_act_delay_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_act_delay_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_act_delay_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_act_delay(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_act_delay_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_act_delay_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_act_delay_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_walk_delay(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_walk_delay_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_walk_delay_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_walk_delay_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_walk_delay(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_walk_delay_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_walk_delay_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_walk_delay_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_skill_data1(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_skill_data1_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_skill_data1_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_skill_data1_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_skill_data1(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_skill_data1_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_skill_data1_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_skill_data1_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_skill_data2(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_skill_data2_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_skill_data2_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_skill_data2_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_skill_data2(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_skill_data2_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_skill_data2_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_skill_data2_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_cooldown(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_cooldown_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_cooldown_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_cooldown_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_cooldown(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_cooldown_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_cooldown_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_cooldown_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_fixed_cast_time(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_fixed_cast_time_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_fixed_cast_time_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_fixed_cast_time_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_fixed_cast_time(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_fixed_cast_time_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_fixed_cast_time_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_fixed_cast_time_post[hIndex].func;
postHookFunc(conf, sk);
}
}
@@ -80792,6 +82267,215 @@ void HP_skill_validate_castnodex(struct config_setting_t *conf, struct s_skill_d
}
return;
}
+void HP_skill_validate_hp_cost(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_hp_cost_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_hp_cost_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_hp_cost_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_hp_cost(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_hp_cost_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_hp_cost_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_hp_cost_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_sp_cost(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_sp_cost_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_sp_cost_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_sp_cost_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_sp_cost(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_sp_cost_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_sp_cost_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_sp_cost_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_hp_rate_cost(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_hp_rate_cost_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_hp_rate_cost_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_hp_rate_cost_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_hp_rate_cost(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_hp_rate_cost_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_hp_rate_cost_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_hp_rate_cost_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_sp_rate_cost(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_sp_rate_cost_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_sp_rate_cost_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_sp_rate_cost_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_sp_rate_cost(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_sp_rate_cost_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_sp_rate_cost_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_sp_rate_cost_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_max_hp_trigger(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_max_hp_trigger_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_max_hp_trigger_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_max_hp_trigger_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_max_hp_trigger(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_max_hp_trigger_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_max_hp_trigger_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_max_hp_trigger_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_max_sp_trigger(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_max_sp_trigger_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_max_sp_trigger_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_max_sp_trigger_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_max_sp_trigger(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_max_sp_trigger_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_max_sp_trigger_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_max_sp_trigger_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_zeny_cost(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_zeny_cost_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_zeny_cost_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_zeny_cost_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_zeny_cost(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_zeny_cost_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_zeny_cost_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_zeny_cost_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+int HP_skill_validate_weapontype_sub(const char *type, bool on, struct s_skill_db *sk) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_skill_validate_weapontype_sub_pre > 0) {
+ int (*preHookFunc) (const char **type, bool *on, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_weapontype_sub_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_weapontype_sub_pre[hIndex].func;
+ retVal___ = preHookFunc(&type, &on, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.validate_weapontype_sub(type, on, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_weapontype_sub_post > 0) {
+ int (*postHookFunc) (int retVal___, const char *type, bool on, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_weapontype_sub_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_weapontype_sub_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, type, on, sk);
+ }
+ }
+ return retVal___;
+}
void HP_skill_validate_weapontype(struct config_setting_t *conf, struct s_skill_db *sk) {
int hIndex = 0;
if (HPMHooks.count.HP_skill_validate_weapontype_pre > 0) {
@@ -80818,6 +82502,33 @@ void HP_skill_validate_weapontype(struct config_setting_t *conf, struct s_skill_
}
return;
}
+int HP_skill_validate_ammotype_sub(const char *type, bool on, struct s_skill_db *sk) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_skill_validate_ammotype_sub_pre > 0) {
+ int (*preHookFunc) (const char **type, bool *on, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_ammotype_sub_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_ammotype_sub_pre[hIndex].func;
+ retVal___ = preHookFunc(&type, &on, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.validate_ammotype_sub(type, on, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_ammotype_sub_post > 0) {
+ int (*postHookFunc) (int retVal___, const char *type, bool on, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_ammotype_sub_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_ammotype_sub_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, type, on, sk);
+ }
+ }
+ return retVal___;
+}
void HP_skill_validate_ammotype(struct config_setting_t *conf, struct s_skill_db *sk) {
int hIndex = 0;
if (HPMHooks.count.HP_skill_validate_ammotype_pre > 0) {
@@ -80844,6 +82555,59 @@ void HP_skill_validate_ammotype(struct config_setting_t *conf, struct s_skill_db
}
return;
}
+void HP_skill_validate_ammo_amount(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_ammo_amount_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_ammo_amount_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_ammo_amount_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_ammo_amount(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_ammo_amount_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_ammo_amount_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_ammo_amount_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+int HP_skill_validate_state_sub(const char *state) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_skill_validate_state_sub_pre > 0) {
+ int (*preHookFunc) (const char **state);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_state_sub_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_state_sub_pre[hIndex].func;
+ retVal___ = preHookFunc(&state);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.validate_state_sub(state);
+ }
+ if (HPMHooks.count.HP_skill_validate_state_sub_post > 0) {
+ int (*postHookFunc) (int retVal___, const char *state);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_state_sub_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_state_sub_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, state);
+ }
+ }
+ return retVal___;
+}
void HP_skill_validate_state(struct config_setting_t *conf, struct s_skill_db *sk) {
int hIndex = 0;
if (HPMHooks.count.HP_skill_validate_state_pre > 0) {
@@ -80870,6 +82634,110 @@ void HP_skill_validate_state(struct config_setting_t *conf, struct s_skill_db *s
}
return;
}
+void HP_skill_validate_spirit_sphere_cost(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_spirit_sphere_cost_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_spirit_sphere_cost_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_spirit_sphere_cost_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_spirit_sphere_cost(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_spirit_sphere_cost_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_spirit_sphere_cost_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_spirit_sphere_cost_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_item_requirements_sub_item_amount(struct config_setting_t *conf, struct s_skill_db *sk, int item_index) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_item_requirements_sub_item_amount_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk, int *item_index);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_item_requirements_sub_item_amount_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_item_requirements_sub_item_amount_pre[hIndex].func;
+ preHookFunc(&conf, &sk, &item_index);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_item_requirements_sub_item_amount(conf, sk, item_index);
+ }
+ if (HPMHooks.count.HP_skill_validate_item_requirements_sub_item_amount_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk, int item_index);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_item_requirements_sub_item_amount_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_item_requirements_sub_item_amount_post[hIndex].func;
+ postHookFunc(conf, sk, item_index);
+ }
+ }
+ return;
+}
+void HP_skill_validate_item_requirements_sub_items(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_item_requirements_sub_items_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_item_requirements_sub_items_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_item_requirements_sub_items_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_item_requirements_sub_items(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_item_requirements_sub_items_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_item_requirements_sub_items_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_item_requirements_sub_items_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_item_requirements_sub_any_flag(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_item_requirements_sub_any_flag_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_item_requirements_sub_any_flag_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_item_requirements_sub_any_flag_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_item_requirements_sub_any_flag(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_item_requirements_sub_any_flag_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_item_requirements_sub_any_flag_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_item_requirements_sub_any_flag_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
void HP_skill_validate_item_requirements(struct config_setting_t *conf, struct s_skill_db *sk) {
int hIndex = 0;
if (HPMHooks.count.HP_skill_validate_item_requirements_pre > 0) {
@@ -80896,13 +82764,39 @@ void HP_skill_validate_item_requirements(struct config_setting_t *conf, struct s
}
return;
}
-void HP_skill_validate_unit_target(struct config_setting_t *conf, struct s_skill_db *sk) {
+void HP_skill_validate_equip_requirements_sub_item_amount(struct config_setting_t *conf, struct s_skill_db *sk, int item_index) {
int hIndex = 0;
- if (HPMHooks.count.HP_skill_validate_unit_target_pre > 0) {
+ if (HPMHooks.count.HP_skill_validate_equip_requirements_sub_item_amount_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk, int *item_index);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_equip_requirements_sub_item_amount_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_equip_requirements_sub_item_amount_pre[hIndex].func;
+ preHookFunc(&conf, &sk, &item_index);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_equip_requirements_sub_item_amount(conf, sk, item_index);
+ }
+ if (HPMHooks.count.HP_skill_validate_equip_requirements_sub_item_amount_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk, int item_index);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_equip_requirements_sub_item_amount_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_equip_requirements_sub_item_amount_post[hIndex].func;
+ postHookFunc(conf, sk, item_index);
+ }
+ }
+ return;
+}
+void HP_skill_validate_equip_requirements_sub_items(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_equip_requirements_sub_items_pre > 0) {
void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_target_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_skill_validate_unit_target_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_equip_requirements_sub_items_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_equip_requirements_sub_items_pre[hIndex].func;
preHookFunc(&conf, &sk);
}
if (*HPMforce_return) {
@@ -80911,24 +82805,24 @@ void HP_skill_validate_unit_target(struct config_setting_t *conf, struct s_skill
}
}
{
- HPMHooks.source.skill.validate_unit_target(conf, sk);
+ HPMHooks.source.skill.validate_equip_requirements_sub_items(conf, sk);
}
- if (HPMHooks.count.HP_skill_validate_unit_target_post > 0) {
+ if (HPMHooks.count.HP_skill_validate_equip_requirements_sub_items_post > 0) {
void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_target_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_skill_validate_unit_target_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_equip_requirements_sub_items_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_equip_requirements_sub_items_post[hIndex].func;
postHookFunc(conf, sk);
}
}
return;
}
-void HP_skill_validate_unit_flag(struct config_setting_t *conf, struct s_skill_db *sk) {
+void HP_skill_validate_equip_requirements_sub_any_flag(struct config_setting_t *conf, struct s_skill_db *sk) {
int hIndex = 0;
- if (HPMHooks.count.HP_skill_validate_unit_flag_pre > 0) {
+ if (HPMHooks.count.HP_skill_validate_equip_requirements_sub_any_flag_pre > 0) {
void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_flag_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_skill_validate_unit_flag_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_equip_requirements_sub_any_flag_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_equip_requirements_sub_any_flag_pre[hIndex].func;
preHookFunc(&conf, &sk);
}
if (*HPMforce_return) {
@@ -80937,24 +82831,24 @@ void HP_skill_validate_unit_flag(struct config_setting_t *conf, struct s_skill_d
}
}
{
- HPMHooks.source.skill.validate_unit_flag(conf, sk);
+ HPMHooks.source.skill.validate_equip_requirements_sub_any_flag(conf, sk);
}
- if (HPMHooks.count.HP_skill_validate_unit_flag_post > 0) {
+ if (HPMHooks.count.HP_skill_validate_equip_requirements_sub_any_flag_post > 0) {
void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_flag_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_skill_validate_unit_flag_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_equip_requirements_sub_any_flag_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_equip_requirements_sub_any_flag_post[hIndex].func;
postHookFunc(conf, sk);
}
}
return;
}
-void HP_skill_validate_additional_fields(struct config_setting_t *conf, struct s_skill_db *sk) {
+void HP_skill_validate_equip_requirements(struct config_setting_t *conf, struct s_skill_db *sk) {
int hIndex = 0;
- if (HPMHooks.count.HP_skill_validate_additional_fields_pre > 0) {
+ if (HPMHooks.count.HP_skill_validate_equip_requirements_pre > 0) {
void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_additional_fields_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_skill_validate_additional_fields_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_equip_requirements_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_equip_requirements_pre[hIndex].func;
preHookFunc(&conf, &sk);
}
if (*HPMforce_return) {
@@ -80963,26 +82857,26 @@ void HP_skill_validate_additional_fields(struct config_setting_t *conf, struct s
}
}
{
- HPMHooks.source.skill.validate_additional_fields(conf, sk);
+ HPMHooks.source.skill.validate_equip_requirements(conf, sk);
}
- if (HPMHooks.count.HP_skill_validate_additional_fields_post > 0) {
+ if (HPMHooks.count.HP_skill_validate_equip_requirements_post > 0) {
void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_additional_fields_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_skill_validate_additional_fields_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_equip_requirements_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_equip_requirements_post[hIndex].func;
postHookFunc(conf, sk);
}
}
return;
}
-bool HP_skill_validate_skilldb(struct s_skill_db *skt, const char *source) {
+int HP_skill_validate_requirements_item_name(const char *name) {
int hIndex = 0;
- bool retVal___ = false;
- if (HPMHooks.count.HP_skill_validate_skilldb_pre > 0) {
- bool (*preHookFunc) (struct s_skill_db **skt, const char **source);
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_skill_validate_requirements_item_name_pre > 0) {
+ int (*preHookFunc) (const char **name);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_skilldb_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_skill_validate_skilldb_pre[hIndex].func;
- retVal___ = preHookFunc(&skt, &source);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_requirements_item_name_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_requirements_item_name_pre[hIndex].func;
+ retVal___ = preHookFunc(&name);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -80990,53 +82884,52 @@ bool HP_skill_validate_skilldb(struct s_skill_db *skt, const char *source) {
}
}
{
- retVal___ = HPMHooks.source.skill.validate_skilldb(skt, source);
+ retVal___ = HPMHooks.source.skill.validate_requirements_item_name(name);
}
- if (HPMHooks.count.HP_skill_validate_skilldb_post > 0) {
- bool (*postHookFunc) (bool retVal___, struct s_skill_db *skt, const char *source);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_skilldb_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_skill_validate_skilldb_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, skt, source);
+ if (HPMHooks.count.HP_skill_validate_requirements_item_name_post > 0) {
+ int (*postHookFunc) (int retVal___, const char *name);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_requirements_item_name_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_requirements_item_name_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, name);
}
}
return retVal___;
}
-int HP_skill_validate_weapontype_sub(const char *type, bool on, struct s_skill_db *sk) {
+void HP_skill_validate_requirements(struct config_setting_t *conf, struct s_skill_db *sk) {
int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_skill_validate_weapontype_sub_pre > 0) {
- int (*preHookFunc) (const char **type, bool *on, struct s_skill_db **sk);
+ if (HPMHooks.count.HP_skill_validate_requirements_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_weapontype_sub_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_skill_validate_weapontype_sub_pre[hIndex].func;
- retVal___ = preHookFunc(&type, &on, &sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_requirements_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_requirements_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
}
if (*HPMforce_return) {
*HPMforce_return = false;
- return retVal___;
+ return;
}
}
{
- retVal___ = HPMHooks.source.skill.validate_weapontype_sub(type, on, sk);
+ HPMHooks.source.skill.validate_requirements(conf, sk);
}
- if (HPMHooks.count.HP_skill_validate_weapontype_sub_post > 0) {
- int (*postHookFunc) (int retVal___, const char *type, bool on, struct s_skill_db *sk);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_weapontype_sub_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_skill_validate_weapontype_sub_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, type, on, sk);
+ if (HPMHooks.count.HP_skill_validate_requirements_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_requirements_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_requirements_post[hIndex].func;
+ postHookFunc(conf, sk);
}
}
- return retVal___;
+ return;
}
-int HP_skill_validate_ammotype_sub(const char *type, bool on, struct s_skill_db *sk) {
+int HP_skill_validate_unit_id_sub(int unit_id) {
int hIndex = 0;
int retVal___ = 0;
- if (HPMHooks.count.HP_skill_validate_ammotype_sub_pre > 0) {
- int (*preHookFunc) (const char **type, bool *on, struct s_skill_db **sk);
+ if (HPMHooks.count.HP_skill_validate_unit_id_sub_pre > 0) {
+ int (*preHookFunc) (int *unit_id);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_ammotype_sub_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_skill_validate_ammotype_sub_pre[hIndex].func;
- retVal___ = preHookFunc(&type, &on, &sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_id_sub_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_unit_id_sub_pre[hIndex].func;
+ retVal___ = preHookFunc(&unit_id);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -81044,17 +82937,121 @@ int HP_skill_validate_ammotype_sub(const char *type, bool on, struct s_skill_db
}
}
{
- retVal___ = HPMHooks.source.skill.validate_ammotype_sub(type, on, sk);
+ retVal___ = HPMHooks.source.skill.validate_unit_id_sub(unit_id);
}
- if (HPMHooks.count.HP_skill_validate_ammotype_sub_post > 0) {
- int (*postHookFunc) (int retVal___, const char *type, bool on, struct s_skill_db *sk);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_ammotype_sub_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_skill_validate_ammotype_sub_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, type, on, sk);
+ if (HPMHooks.count.HP_skill_validate_unit_id_sub_post > 0) {
+ int (*postHookFunc) (int retVal___, int unit_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_id_sub_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_unit_id_sub_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, unit_id);
}
}
return retVal___;
}
+void HP_skill_validate_unit_id(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_unit_id_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_id_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_unit_id_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_unit_id(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_unit_id_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_id_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_unit_id_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_unit_layout(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_unit_layout_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_layout_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_unit_layout_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_unit_layout(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_unit_layout_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_layout_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_unit_layout_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_unit_range(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_unit_range_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_range_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_unit_range_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_unit_range(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_unit_range_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_range_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_unit_range_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_unit_interval(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_unit_interval_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_interval_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_unit_interval_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_unit_interval(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_unit_interval_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_interval_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_unit_interval_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
int HP_skill_validate_unit_flag_sub(const char *type, bool on, struct s_skill_db *sk) {
int hIndex = 0;
int retVal___ = 0;
@@ -81082,6 +83079,137 @@ int HP_skill_validate_unit_flag_sub(const char *type, bool on, struct s_skill_db
}
return retVal___;
}
+void HP_skill_validate_unit_flag(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_unit_flag_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_flag_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_unit_flag_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_unit_flag(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_unit_flag_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_flag_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_unit_flag_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+int HP_skill_validate_unit_target_sub(const char *target) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_skill_validate_unit_target_sub_pre > 0) {
+ int (*preHookFunc) (const char **target);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_target_sub_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_unit_target_sub_pre[hIndex].func;
+ retVal___ = preHookFunc(&target);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.validate_unit_target_sub(target);
+ }
+ if (HPMHooks.count.HP_skill_validate_unit_target_sub_post > 0) {
+ int (*postHookFunc) (int retVal___, const char *target);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_target_sub_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_unit_target_sub_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, target);
+ }
+ }
+ return retVal___;
+}
+void HP_skill_validate_unit_target(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_unit_target_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_target_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_unit_target_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_unit_target(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_unit_target_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_target_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_unit_target_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_unit(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_unit_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_unit_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_unit(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_unit_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_unit_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_unit_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
+void HP_skill_validate_additional_fields(struct config_setting_t *conf, struct s_skill_db *sk) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_skill_validate_additional_fields_pre > 0) {
+ void (*preHookFunc) (struct config_setting_t **conf, struct s_skill_db **sk);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_additional_fields_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_validate_additional_fields_pre[hIndex].func;
+ preHookFunc(&conf, &sk);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.skill.validate_additional_fields(conf, sk);
+ }
+ if (HPMHooks.count.HP_skill_validate_additional_fields_post > 0) {
+ void (*postHookFunc) (struct config_setting_t *conf, struct s_skill_db *sk);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_validate_additional_fields_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_validate_additional_fields_post[hIndex].func;
+ postHookFunc(conf, sk);
+ }
+ }
+ return;
+}
bool HP_skill_read_skilldb(const char *filename) {
int hIndex = 0;
bool retVal___ = false;
@@ -81995,10 +84123,10 @@ int HP_skill_attack_dir_unknown(int *attack_type, struct block_list *src, struct
}
return retVal___;
}
-void HP_skill_attack_blow_unknown(int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, int8 *dir) {
+void HP_skill_attack_blow_unknown(int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, enum unit_dir *dir) {
int hIndex = 0;
if (HPMHooks.count.HP_skill_attack_blow_unknown_pre > 0) {
- void (*preHookFunc) (int **attack_type, struct block_list **src, struct block_list **dsrc, struct block_list **bl, uint16 **skill_id, uint16 **skill_lv, int64 **tick, int **flag, int **type, struct Damage **dmg, int64 **damage, int8 **dir);
+ void (*preHookFunc) (int **attack_type, struct block_list **src, struct block_list **dsrc, struct block_list **bl, uint16 **skill_id, uint16 **skill_lv, int64 **tick, int **flag, int **type, struct Damage **dmg, int64 **damage, enum unit_dir **dir);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_blow_unknown_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_skill_attack_blow_unknown_pre[hIndex].func;
@@ -82013,7 +84141,7 @@ void HP_skill_attack_blow_unknown(int *attack_type, struct block_list *src, stru
HPMHooks.source.skill.attack_blow_unknown(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag, type, dmg, damage, dir);
}
if (HPMHooks.count.HP_skill_attack_blow_unknown_post > 0) {
- void (*postHookFunc) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, int8 *dir);
+ void (*postHookFunc) (int *attack_type, struct block_list *src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, enum unit_dir *dir);
for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_attack_blow_unknown_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_skill_attack_blow_unknown_post[hIndex].func;
postHookFunc(attack_type, src, dsrc, bl, skill_id, skill_lv, tick, flag, type, dmg, damage, dir);
@@ -82727,6 +84855,33 @@ int HP_skill_count_wos(struct block_list *bl, va_list ap) {
}
return retVal___;
}
+int HP_skill_get_linked_song_dance_id(int skill_id) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_skill_get_linked_song_dance_id_pre > 0) {
+ int (*preHookFunc) (int *skill_id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_linked_song_dance_id_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_skill_get_linked_song_dance_id_pre[hIndex].func;
+ retVal___ = preHookFunc(&skill_id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.skill.get_linked_song_dance_id(skill_id);
+ }
+ if (HPMHooks.count.HP_skill_get_linked_song_dance_id_post > 0) {
+ int (*postHookFunc) (int retVal___, int skill_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_skill_get_linked_song_dance_id_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_skill_get_linked_song_dance_id_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, skill_id);
+ }
+ }
+ return retVal___;
+}
/* socket_interface */
void HP_sockt_init(void) {
int hIndex = 0;
@@ -85475,15 +87630,15 @@ int HP_status_change_start_sub(struct block_list *src, struct block_list *bl, en
}
return retVal___;
}
-int HP_status_change_end_(struct block_list *bl, enum sc_type type, int tid, const char *file, int line) {
+int HP_status_change_end_(struct block_list *bl, enum sc_type type, int tid) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_status_change_end__pre > 0) {
- int (*preHookFunc) (struct block_list **bl, enum sc_type *type, int *tid, const char **file, int *line);
+ int (*preHookFunc) (struct block_list **bl, enum sc_type *type, int *tid);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_status_change_end__pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_status_change_end__pre[hIndex].func;
- retVal___ = preHookFunc(&bl, &type, &tid, &file, &line);
+ retVal___ = preHookFunc(&bl, &type, &tid);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -85491,13 +87646,13 @@ int HP_status_change_end_(struct block_list *bl, enum sc_type type, int tid, con
}
}
{
- retVal___ = HPMHooks.source.status.change_end_(bl, type, tid, file, line);
+ retVal___ = HPMHooks.source.status.change_end_(bl, type, tid);
}
if (HPMHooks.count.HP_status_change_end__post > 0) {
- int (*postHookFunc) (int retVal___, struct block_list *bl, enum sc_type type, int tid, const char *file, int line);
+ int (*postHookFunc) (int retVal___, struct block_list *bl, enum sc_type type, int tid);
for (hIndex = 0; hIndex < HPMHooks.count.HP_status_change_end__post; hIndex++) {
postHookFunc = HPMHooks.list.HP_status_change_end__post[hIndex].func;
- retVal___ = postHookFunc(retVal___, bl, type, tid, file, line);
+ retVal___ = postHookFunc(retVal___, bl, type, tid);
}
}
return retVal___;
@@ -90806,6 +92961,33 @@ struct unit_data* HP_unit_bl2ud(struct block_list *bl) {
}
return retVal___;
}
+const struct unit_data* HP_unit_cbl2ud(const struct block_list *bl) {
+ int hIndex = 0;
+ const struct unit_data* retVal___ = NULL;
+ if (HPMHooks.count.HP_unit_cbl2ud_pre > 0) {
+ const struct unit_data* (*preHookFunc) (const struct block_list **bl);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_cbl2ud_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_unit_cbl2ud_pre[hIndex].func;
+ retVal___ = preHookFunc(&bl);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.unit.cbl2ud(bl);
+ }
+ if (HPMHooks.count.HP_unit_cbl2ud_post > 0) {
+ const struct unit_data* (*postHookFunc) (const struct unit_data* retVal___, const struct block_list *bl);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_cbl2ud_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_unit_cbl2ud_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, bl);
+ }
+ }
+ return retVal___;
+}
struct unit_data* HP_unit_bl2ud2(struct block_list *bl) {
int hIndex = 0;
struct unit_data* retVal___ = NULL;
@@ -90886,14 +93068,14 @@ int HP_unit_attack_timer(int tid, int64 tick, int id, intptr_t data) {
}
return retVal___;
}
-int HP_unit_walktoxy_timer(int tid, int64 tick, int id, intptr_t data) {
+int HP_unit_walk_toxy_timer(int tid, int64 tick, int id, intptr_t data) {
int hIndex = 0;
int retVal___ = 0;
- if (HPMHooks.count.HP_unit_walktoxy_timer_pre > 0) {
+ if (HPMHooks.count.HP_unit_walk_toxy_timer_pre > 0) {
int (*preHookFunc) (int *tid, int64 *tick, int *id, intptr_t *data);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walktoxy_timer_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_unit_walktoxy_timer_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walk_toxy_timer_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_unit_walk_toxy_timer_pre[hIndex].func;
retVal___ = preHookFunc(&tid, &tick, &id, &data);
}
if (*HPMforce_return) {
@@ -90902,25 +93084,25 @@ int HP_unit_walktoxy_timer(int tid, int64 tick, int id, intptr_t data) {
}
}
{
- retVal___ = HPMHooks.source.unit.walktoxy_timer(tid, tick, id, data);
+ retVal___ = HPMHooks.source.unit.walk_toxy_timer(tid, tick, id, data);
}
- if (HPMHooks.count.HP_unit_walktoxy_timer_post > 0) {
+ if (HPMHooks.count.HP_unit_walk_toxy_timer_post > 0) {
int (*postHookFunc) (int retVal___, int tid, int64 tick, int id, intptr_t data);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walktoxy_timer_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_unit_walktoxy_timer_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walk_toxy_timer_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_unit_walk_toxy_timer_post[hIndex].func;
retVal___ = postHookFunc(retVal___, tid, tick, id, data);
}
}
return retVal___;
}
-int HP_unit_walktoxy_sub(struct block_list *bl) {
+int HP_unit_walk_toxy_sub(struct block_list *bl) {
int hIndex = 0;
int retVal___ = 0;
- if (HPMHooks.count.HP_unit_walktoxy_sub_pre > 0) {
+ if (HPMHooks.count.HP_unit_walk_toxy_sub_pre > 0) {
int (*preHookFunc) (struct block_list **bl);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walktoxy_sub_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_unit_walktoxy_sub_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walk_toxy_sub_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_unit_walk_toxy_sub_pre[hIndex].func;
retVal___ = preHookFunc(&bl);
}
if (*HPMforce_return) {
@@ -90929,25 +93111,25 @@ int HP_unit_walktoxy_sub(struct block_list *bl) {
}
}
{
- retVal___ = HPMHooks.source.unit.walktoxy_sub(bl);
+ retVal___ = HPMHooks.source.unit.walk_toxy_sub(bl);
}
- if (HPMHooks.count.HP_unit_walktoxy_sub_post > 0) {
+ if (HPMHooks.count.HP_unit_walk_toxy_sub_post > 0) {
int (*postHookFunc) (int retVal___, struct block_list *bl);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walktoxy_sub_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_unit_walktoxy_sub_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walk_toxy_sub_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_unit_walk_toxy_sub_post[hIndex].func;
retVal___ = postHookFunc(retVal___, bl);
}
}
return retVal___;
}
-int HP_unit_delay_walktoxy_timer(int tid, int64 tick, int id, intptr_t data) {
+int HP_unit_delay_walk_toxy_timer(int tid, int64 tick, int id, intptr_t data) {
int hIndex = 0;
int retVal___ = 0;
- if (HPMHooks.count.HP_unit_delay_walktoxy_timer_pre > 0) {
+ if (HPMHooks.count.HP_unit_delay_walk_toxy_timer_pre > 0) {
int (*preHookFunc) (int *tid, int64 *tick, int *id, intptr_t *data);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_delay_walktoxy_timer_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_unit_delay_walktoxy_timer_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_delay_walk_toxy_timer_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_unit_delay_walk_toxy_timer_pre[hIndex].func;
retVal___ = preHookFunc(&tid, &tick, &id, &data);
}
if (*HPMforce_return) {
@@ -90956,25 +93138,25 @@ int HP_unit_delay_walktoxy_timer(int tid, int64 tick, int id, intptr_t data) {
}
}
{
- retVal___ = HPMHooks.source.unit.delay_walktoxy_timer(tid, tick, id, data);
+ retVal___ = HPMHooks.source.unit.delay_walk_toxy_timer(tid, tick, id, data);
}
- if (HPMHooks.count.HP_unit_delay_walktoxy_timer_post > 0) {
+ if (HPMHooks.count.HP_unit_delay_walk_toxy_timer_post > 0) {
int (*postHookFunc) (int retVal___, int tid, int64 tick, int id, intptr_t data);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_delay_walktoxy_timer_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_unit_delay_walktoxy_timer_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_delay_walk_toxy_timer_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_unit_delay_walk_toxy_timer_post[hIndex].func;
retVal___ = postHookFunc(retVal___, tid, tick, id, data);
}
}
return retVal___;
}
-int HP_unit_walktoxy(struct block_list *bl, short x, short y, int flag) {
+int HP_unit_walk_toxy(struct block_list *bl, short x, short y, int flag) {
int hIndex = 0;
int retVal___ = 0;
- if (HPMHooks.count.HP_unit_walktoxy_pre > 0) {
+ if (HPMHooks.count.HP_unit_walk_toxy_pre > 0) {
int (*preHookFunc) (struct block_list **bl, short *x, short *y, int *flag);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walktoxy_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_unit_walktoxy_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walk_toxy_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_unit_walk_toxy_pre[hIndex].func;
retVal___ = preHookFunc(&bl, &x, &y, &flag);
}
if (*HPMforce_return) {
@@ -90983,25 +93165,25 @@ int HP_unit_walktoxy(struct block_list *bl, short x, short y, int flag) {
}
}
{
- retVal___ = HPMHooks.source.unit.walktoxy(bl, x, y, flag);
+ retVal___ = HPMHooks.source.unit.walk_toxy(bl, x, y, flag);
}
- if (HPMHooks.count.HP_unit_walktoxy_post > 0) {
+ if (HPMHooks.count.HP_unit_walk_toxy_post > 0) {
int (*postHookFunc) (int retVal___, struct block_list *bl, short x, short y, int flag);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walktoxy_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_unit_walktoxy_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walk_toxy_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_unit_walk_toxy_post[hIndex].func;
retVal___ = postHookFunc(retVal___, bl, x, y, flag);
}
}
return retVal___;
}
-int HP_unit_walktobl_sub(int tid, int64 tick, int id, intptr_t data) {
+int HP_unit_walktobl_timer(int tid, int64 tick, int id, intptr_t data) {
int hIndex = 0;
int retVal___ = 0;
- if (HPMHooks.count.HP_unit_walktobl_sub_pre > 0) {
+ if (HPMHooks.count.HP_unit_walktobl_timer_pre > 0) {
int (*preHookFunc) (int *tid, int64 *tick, int *id, intptr_t *data);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walktobl_sub_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_unit_walktobl_sub_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walktobl_timer_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_unit_walktobl_timer_pre[hIndex].func;
retVal___ = preHookFunc(&tid, &tick, &id, &data);
}
if (*HPMforce_return) {
@@ -91010,12 +93192,12 @@ int HP_unit_walktobl_sub(int tid, int64 tick, int id, intptr_t data) {
}
}
{
- retVal___ = HPMHooks.source.unit.walktobl_sub(tid, tick, id, data);
+ retVal___ = HPMHooks.source.unit.walktobl_timer(tid, tick, id, data);
}
- if (HPMHooks.count.HP_unit_walktobl_sub_post > 0) {
+ if (HPMHooks.count.HP_unit_walktobl_timer_post > 0) {
int (*postHookFunc) (int retVal___, int tid, int64 tick, int id, intptr_t data);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walktobl_sub_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_unit_walktobl_sub_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_walktobl_timer_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_unit_walktobl_timer_post[hIndex].func;
retVal___ = postHookFunc(retVal___, tid, tick, id, data);
}
}
@@ -91155,14 +93337,14 @@ int HP_unit_movepos(struct block_list *bl, short dst_x, short dst_y, int easy, b
}
return retVal___;
}
-int HP_unit_setdir(struct block_list *bl, unsigned char dir) {
+int HP_unit_set_dir(struct block_list *bl, enum unit_dir dir) {
int hIndex = 0;
int retVal___ = 0;
- if (HPMHooks.count.HP_unit_setdir_pre > 0) {
- int (*preHookFunc) (struct block_list **bl, unsigned char *dir);
+ if (HPMHooks.count.HP_unit_set_dir_pre > 0) {
+ int (*preHookFunc) (struct block_list **bl, enum unit_dir *dir);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_setdir_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_unit_setdir_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_set_dir_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_unit_set_dir_pre[hIndex].func;
retVal___ = preHookFunc(&bl, &dir);
}
if (*HPMforce_return) {
@@ -91171,22 +93353,22 @@ int HP_unit_setdir(struct block_list *bl, unsigned char dir) {
}
}
{
- retVal___ = HPMHooks.source.unit.setdir(bl, dir);
+ retVal___ = HPMHooks.source.unit.set_dir(bl, dir);
}
- if (HPMHooks.count.HP_unit_setdir_post > 0) {
- int (*postHookFunc) (int retVal___, struct block_list *bl, unsigned char dir);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_setdir_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_unit_setdir_post[hIndex].func;
+ if (HPMHooks.count.HP_unit_set_dir_post > 0) {
+ int (*postHookFunc) (int retVal___, struct block_list *bl, enum unit_dir dir);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_set_dir_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_unit_set_dir_post[hIndex].func;
retVal___ = postHookFunc(retVal___, bl, dir);
}
}
return retVal___;
}
-uint8 HP_unit_getdir(struct block_list *bl) {
+enum unit_dir HP_unit_getdir(const struct block_list *bl) {
int hIndex = 0;
- uint8 retVal___ = 0;
+ enum unit_dir retVal___ = UNIT_DIR_UNDEFINED;
if (HPMHooks.count.HP_unit_getdir_pre > 0) {
- uint8 (*preHookFunc) (struct block_list **bl);
+ enum unit_dir (*preHookFunc) (const struct block_list **bl);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_getdir_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_unit_getdir_pre[hIndex].func;
@@ -91201,7 +93383,7 @@ uint8 HP_unit_getdir(struct block_list *bl) {
retVal___ = HPMHooks.source.unit.getdir(bl);
}
if (HPMHooks.count.HP_unit_getdir_post > 0) {
- uint8 (*postHookFunc) (uint8 retVal___, struct block_list *bl);
+ enum unit_dir (*postHookFunc) (enum unit_dir retVal___, const struct block_list *bl);
for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_getdir_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_unit_getdir_post[hIndex].func;
retVal___ = postHookFunc(retVal___, bl);
@@ -91263,6 +93445,33 @@ int HP_unit_warp(struct block_list *bl, short m, short x, short y, enum clr_type
}
return retVal___;
}
+int HP_unit_warpto_master(struct block_list *master_bl, struct block_list *slave_bl) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_unit_warpto_master_pre > 0) {
+ int (*preHookFunc) (struct block_list **master_bl, struct block_list **slave_bl);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_warpto_master_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_unit_warpto_master_pre[hIndex].func;
+ retVal___ = preHookFunc(&master_bl, &slave_bl);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.unit.warpto_master(master_bl, slave_bl);
+ }
+ if (HPMHooks.count.HP_unit_warpto_master_post > 0) {
+ int (*postHookFunc) (int retVal___, struct block_list *master_bl, struct block_list *slave_bl);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_warpto_master_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_unit_warpto_master_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, master_bl, slave_bl);
+ }
+ }
+ return retVal___;
+}
int HP_unit_stop_walking(struct block_list *bl, int type) {
int hIndex = 0;
int retVal___ = 0;
@@ -91317,14 +93526,14 @@ int HP_unit_skilluse_id(struct block_list *src, int target_id, uint16 skill_id,
}
return retVal___;
}
-int HP_unit_step_timer(int tid, int64 tick, int id, intptr_t data) {
+int HP_unit_steptimer(int tid, int64 tick, int id, intptr_t data) {
int hIndex = 0;
int retVal___ = 0;
- if (HPMHooks.count.HP_unit_step_timer_pre > 0) {
+ if (HPMHooks.count.HP_unit_steptimer_pre > 0) {
int (*preHookFunc) (int *tid, int64 *tick, int *id, intptr_t *data);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_step_timer_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_unit_step_timer_pre[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_steptimer_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_unit_steptimer_pre[hIndex].func;
retVal___ = preHookFunc(&tid, &tick, &id, &data);
}
if (*HPMforce_return) {
@@ -91333,12 +93542,12 @@ int HP_unit_step_timer(int tid, int64 tick, int id, intptr_t data) {
}
}
{
- retVal___ = HPMHooks.source.unit.step_timer(tid, tick, id, data);
+ retVal___ = HPMHooks.source.unit.steptimer(tid, tick, id, data);
}
- if (HPMHooks.count.HP_unit_step_timer_post > 0) {
+ if (HPMHooks.count.HP_unit_steptimer_post > 0) {
int (*postHookFunc) (int retVal___, int tid, int64 tick, int id, intptr_t data);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_step_timer_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_unit_step_timer_post[hIndex].func;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_steptimer_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_unit_steptimer_post[hIndex].func;
retVal___ = postHookFunc(retVal___, tid, tick, id, data);
}
}
@@ -91747,11 +93956,11 @@ bool HP_unit_can_reach_bl(struct block_list *bl, struct block_list *tbl, int ran
}
return retVal___;
}
-int HP_unit_calc_pos(struct block_list *bl, int tx, int ty, uint8 dir) {
+int HP_unit_calc_pos(struct block_list *bl, int tx, int ty, enum unit_dir dir) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_unit_calc_pos_pre > 0) {
- int (*preHookFunc) (struct block_list **bl, int *tx, int *ty, uint8 *dir);
+ int (*preHookFunc) (struct block_list **bl, int *tx, int *ty, enum unit_dir *dir);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_calc_pos_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_unit_calc_pos_pre[hIndex].func;
@@ -91766,7 +93975,7 @@ int HP_unit_calc_pos(struct block_list *bl, int tx, int ty, uint8 dir) {
retVal___ = HPMHooks.source.unit.calc_pos(bl, tx, ty, dir);
}
if (HPMHooks.count.HP_unit_calc_pos_post > 0) {
- int (*postHookFunc) (int retVal___, struct block_list *bl, int tx, int ty, uint8 dir);
+ int (*postHookFunc) (int retVal___, struct block_list *bl, int tx, int ty, enum unit_dir dir);
for (hIndex = 0; hIndex < HPMHooks.count.HP_unit_calc_pos_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_unit_calc_pos_post[hIndex].func;
retVal___ = postHookFunc(retVal___, bl, tx, ty, dir);
diff --git a/src/plugins/Makefile.in b/src/plugins/Makefile.in
index 5527ceb2f..073cd8d41 100644
--- a/src/plugins/Makefile.in
+++ b/src/plugins/Makefile.in
@@ -43,7 +43,7 @@ HPMHOOKING = $(addprefix HPMHooking_, login char map)
ALLPLUGINS = $(filter-out HPMHooking, $(basename $(wildcard *.c))) $(HPMHOOKING)
# Plugins that will be built through 'make plugins' or 'make all'
-PLUGINS = sample db2sql HPMHooking_char HPMHooking_login HPMHooking_map $(MYPLUGINS)
+PLUGINS = sample db2sql constdb2doc generate-translations mapcache script_mapquit HPMHooking_char HPMHooking_login HPMHooking_map $(MYPLUGINS)
COMMON_D = ../common
# Includes private headers (plugins might need them)
@@ -103,7 +103,7 @@ Makefile: Makefile.in
../../plugins/%@DLLEXT@: %.c $(ALL_H) $$(shell ls %/* 2>/dev/null)
@echo " CC $<"
- @$(CC) $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @PLUGINSTATIC@ @DEFS@ @CFLAGS@ @CPPFLAGS@ @LDFLAGS@ @SOFLAGS@ -o $@ $<
+ @$(CC) $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @PLUGINSTATIC@ @DEFS@ @CFLAGS@ @CPPFLAGS@ @LDFLAGS@ @SOFLAGS@ @LIBS@ @MYSQL_LIBS@ -o $@ $<
../../plugins/HPMHooking_login@DLLEXT@: HPMHOOKINGTYPE = LOGIN
../../plugins/HPMHooking_char@DLLEXT@: HPMHOOKINGTYPE = CHAR
diff --git a/src/plugins/db2sql.c b/src/plugins/db2sql.c
index 6ca52a593..8d83c25e2 100644
--- a/src/plugins/db2sql.c
+++ b/src/plugins/db2sql.c
@@ -65,6 +65,8 @@ struct {
bool itemdb2sql_torun = false;
/// Whether the mob_db converter will automatically run.
bool mobdb2sql_torun = false;
+/// mysql handle for escape strings
+static struct Sql *sql_handle = NULL;
/// Backup of the original item_db parser function pointer.
int (*itemdb_readdb_libconfig_sub) (struct config_setting_t *it, int n, const char *source);
@@ -249,11 +251,11 @@ int itemdb2sql_sub(struct config_setting_t *entry, int n, const char *source)
StrBuf->Printf(&buf, "'%u',", (uint32)it->nameid);
// name_english
- SQL->EscapeString(NULL, e_name, it->name);
+ SQL->EscapeString(sql_handle, e_name, it->name);
StrBuf->Printf(&buf, "'%s',", e_name);
// name_japanese
- SQL->EscapeString(NULL, e_name, it->jname);
+ SQL->EscapeString(sql_handle, e_name, it->jname);
StrBuf->Printf(&buf, "'%s',", e_name);
// type
@@ -397,7 +399,7 @@ int itemdb2sql_sub(struct config_setting_t *entry, int n, const char *source)
tosql.buf[0].len = tosql.buf[0].len + strlen(str) + 1000;
RECREATE(tosql.buf[0].p,char,tosql.buf[0].len);
}
- SQL->EscapeString(NULL, tosql.buf[0].p, str);
+ SQL->EscapeString(sql_handle, tosql.buf[0].p, str);
StrBuf->Printf(&buf, "'%s',", tosql.buf[0].p);
} else {
StrBuf->AppendStr(&buf, "'',");
@@ -411,7 +413,7 @@ int itemdb2sql_sub(struct config_setting_t *entry, int n, const char *source)
tosql.buf[1].len = tosql.buf[1].len + strlen(str) + 1000;
RECREATE(tosql.buf[1].p,char,tosql.buf[1].len);
}
- SQL->EscapeString(NULL, tosql.buf[1].p, str);
+ SQL->EscapeString(sql_handle, tosql.buf[1].p, str);
StrBuf->Printf(&buf, "'%s',", tosql.buf[1].p);
} else {
StrBuf->AppendStr(&buf, "'',");
@@ -425,7 +427,7 @@ int itemdb2sql_sub(struct config_setting_t *entry, int n, const char *source)
tosql.buf[2].len = tosql.buf[2].len + strlen(str) + 1000;
RECREATE(tosql.buf[2].p,char,tosql.buf[2].len);
}
- SQL->EscapeString(NULL, tosql.buf[2].p, str);
+ SQL->EscapeString(sql_handle, tosql.buf[2].p, str);
StrBuf->Printf(&buf, "'%s'", tosql.buf[2].p);
} else {
StrBuf->AppendStr(&buf, "''");
@@ -563,15 +565,15 @@ int mobdb2sql_sub(struct config_setting_t *mobt, int n, const char *source)
StrBuf->Printf(&buf, "%d,", md->mob_id);
// Sprite
- SQL->EscapeString(NULL, e_name, md->sprite);
+ SQL->EscapeString(sql_handle, e_name, md->sprite);
StrBuf->Printf(&buf, "'%s',", e_name);
// kName
- SQL->EscapeString(NULL, e_name, md->name);
+ SQL->EscapeString(sql_handle, e_name, md->name);
StrBuf->Printf(&buf, "'%s',", e_name);
// iName
- SQL->EscapeString(NULL, e_name, md->jname);
+ SQL->EscapeString(sql_handle, e_name, md->jname);
StrBuf->Printf(&buf, "'%s',", e_name);
// LV
@@ -967,7 +969,7 @@ bool mobskilldb2sql_sub(struct config_setting_t *it, int n, int mob_id)
StrBuf->Printf(&buf, "%d,", mob_id);
// Info
- SQL->EscapeString(NULL, e_name, md->name);
+ SQL->EscapeString(sql_handle, e_name, md->name);
StrBuf->Printf(&buf, "'%s@%s',", e_name, name);
if (mob->lookup_const(it, "SkillState", &i32) && (i32 < MSS_ANY || i32 > MSS_ANYTARGET)) {
@@ -1215,8 +1217,15 @@ HPExport void plugin_init(void)
HPExport void server_online(void)
{
+ sql_handle = SQL->Malloc();
if (itemdb2sql_torun)
do_itemdb2sql();
if (mobdb2sql_torun)
do_mobdb2sql();
}
+
+HPExport void plugin_final (void)
+{
+ SQL->Free(sql_handle);
+ sql_handle = NULL;
+}
diff --git a/src/plugins/mapcache.c b/src/plugins/mapcache.c
index 3dc6e3b34..2b8e4c6f8 100644
--- a/src/plugins/mapcache.c
+++ b/src/plugins/mapcache.c
@@ -402,7 +402,6 @@ bool fix_md5_truncation_sub(FILE *fp, const char *map_name)
fseek(fp, 0, SEEK_SET);
fwrite(&mheader, sizeof(mheader), 1, fp);
- fclose(fp);
return true;
}
diff --git a/src/test/Makefile.in b/src/test/Makefile.in
index 8399100f1..91263c939 100644
--- a/src/test/Makefile.in
+++ b/src/test/Makefile.in
@@ -36,6 +36,19 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \
LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \
scanctx.h scanner.h strbuf.h wincompat.h)
+ifeq (@USE_LIBBACKTRACE@,yes)
+ LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace
+ LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \
+ dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \
+ simple.o sort.o state.o)
+ LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \
+ backtrace-supported.h config.h filenames.h internal.h)
+else
+ LIBBACKTRACE_D =
+ LIBBACKTRACE_OBJ =
+ LIBBACKTRACE_H =
+endif
+
MT19937AR_D = $(THIRDPARTY_D)/mt19937ar
MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o
MT19937AR_H = $(MT19937AR_D)/mt19937ar.h
@@ -43,7 +56,7 @@ MT19937AR_H = $(MT19937AR_D)/mt19937ar.h
TEST_C = test_libconfig.c test_spinlock.c
TEST_OBJ = $(addprefix obj/, $(patsubst %c,%o,%(TEST_C)))
TEST_H =
-TEST_DEPENDS = $(COMMON_D)/obj_sql/common_sql.a $(COMMON_D)/obj_all/common.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(SYSINFO_INC)
+TEST_DEPENDS = $(COMMON_D)/obj_sql/common_sql.a $(COMMON_D)/obj_all/common.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) $(SYSINFO_INC)
TESTS_ALL = test_libconfig test_spinlock
@@ -70,7 +83,7 @@ clean: buildclean
Makefile: Makefile.in
@$(MAKE) -C ../.. src/test/Makefile
-$(SYSINFO_INC): $(TEST_C) $(TEST_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H)
+$(SYSINFO_INC): $(TEST_C) $(TEST_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H)
@echo " MAKE $@"
@$(MAKE) -C ../.. sysinfo
@@ -88,11 +101,11 @@ $(TESTS_ALL): test_%: ../../test_%@EXEEXT@
../../test_%@EXEEXT@: obj/test_%.o $(TEST_DEPENDS) Makefile
@echo " LD $(notdir $@)"
@$(CC) @STATIC@ @LDFLAGS@ -o $@ $< $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a \
- $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) @LIBS@ @MYSQL_LIBS@
+ $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) @LIBS@ @MYSQL_LIBS@
# object files
-obj/%.o: %.c $(TEST_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) | obj
+obj/%.o: %.c $(TEST_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) | obj
@echo " CC $<"
@$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
@@ -112,3 +125,7 @@ $(MT19937AR_OBJ):
$(LIBCONFIG_OBJ):
@echo " MAKE $@"
@$(MAKE) -C $(LIBCONFIG_D)
+
+$(LIBBACKTRACE_OBJ):
+ @echo " MAKE $@"
+ @$(MAKE) -C $(LIBBACKTRACE_D)
diff --git a/tools/HPMHookGen/HPMHookGen.pl b/tools/HPMHookGen/HPMHookGen.pl
index 3cb81eeb2..cd4f10e2a 100755
--- a/tools/HPMHookGen/HPMHookGen.pl
+++ b/tools/HPMHookGen/HPMHookGen.pl
@@ -246,6 +246,8 @@ sub parse($$) {
$rtinit = ' = THREADPRIO_NORMAL';
} elsif ($x =~ /^enum\s+market_buy_result$/) { # Known enum market_buy_result
$rtinit = ' = MARKET_BUY_RESULT_ERROR';
+ } elsif ($x =~ /^enum\s+unit_dir$/) { # Known enum unit_dir
+ $rtinit = ' = UNIT_DIR_UNDEFINED';
} elsif ($x eq 'DBComparator' or $x eq 'DBHasher' or $x eq 'DBReleaser') { # DB function pointers
$rtinit = ' = NULL';
} elsif ($x =~ /^(?:struct|union)\s+.*$/) { # Structs and unions
diff --git a/tools/authors.sh b/tools/authors.sh
new file mode 100755
index 000000000..da4a576c6
--- /dev/null
+++ b/tools/authors.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env sh
+
+# grep -v "kenpachi2k11" as workaround for avoid .mailmap issue
+git log --format=format:"%aN <%aE>"|grep -v "54d463be-8e91-2dee-dedb-b68131a5f0ec"|grep -v "kenpachi2k11"|sort|uniq
diff --git a/tools/ci/travis.sh b/tools/ci/travis.sh
index 10c653925..a1a3c7700 100755
--- a/tools/ci/travis.sh
+++ b/tools/ci/travis.sh
@@ -37,6 +37,8 @@ function usage {
echo " $0 build [configure args]"
echo " $0 test <dbname> [dbuser] [dbpassword] [dbhost]"
echo " $0 getplugins"
+ echo " $0 startmysql"
+ echo " $0 extratest"
exit 1
}
@@ -71,7 +73,8 @@ function run_server {
function run_test {
echo "Running: test_$1"
sysctl -w kernel.core_pattern=core || true
- ./test_$1 2>runlog.txt
+ rm -rf core* || true
+ CRASH_PLEASE=1 ./test_$1 2>runlog.txt
export errcode=$?
export teststr=$(head -c 10000 runlog.txt)
if [[ -n "${teststr}" ]]; then
@@ -83,6 +86,13 @@ function run_test {
fi
if [ ${errcode} -ne 0 ]; then
echo "test $1 terminated with exit code ${errcode}"
+ echo cat runlog.txt
+ cat runlog.txt
+ echo crash dump
+ COREFILE=$(find . -maxdepth 1 -name "core*" | head -n 1)
+ if [[ -f "$COREFILE" ]]; then
+ gdb -c "$COREFILE" $1 -ex "thread apply all bt" -ex "set pagination 0" -batch
+ fi
aborterror "Test failed"
fi
}
@@ -146,7 +156,14 @@ case "$MODE" in
;;
adduser)
echo "Adding user $NEWUSER as $DBUSER, with access to database $DBNAME..."
- mysql $DBUSER_ARG $DBPASS_ARG $DBHOST_ARG --execute="GRANT SELECT,INSERT,UPDATE,DELETE ON $DBNAME.* TO '$NEWUSER'@'$DBHOST' IDENTIFIED BY '$NEWPASS';"
+ mysql $DBUSER_ARG $DBPASS_ARG $DBHOST_ARG --execute="GRANT SELECT,INSERT,UPDATE,DELETE ON $DBNAME.* TO '$NEWUSER'@'$DBHOST' IDENTIFIED BY '$NEWPASS';" || true
+ mysql $DBUSER_ARG $DBPASS_ARG $DBHOST_ARG --execute="CREATE USER '$NEWUSER'@'$DBHOST' IDENTIFIED BY '$NEWPASS';" || true
+ mysql $DBUSER_ARG $DBPASS_ARG $DBHOST_ARG --execute="GRANT SELECT,INSERT,UPDATE,DELETE ON $DBNAME.* TO '$NEWUSER'@'$DBHOST';" || true
+ mysql $DBUSER_ARG $DBPASS_ARG $DBHOST_ARG --execute="ALTER USER '$NEWUSER'@'$DBHOST' IDENTIFIED BY '$NEWPASS';" || true
+ mysql --defaults-file=/etc/mysql/debian.cnf $DBPASS_ARG $DBHOST_ARG --execute="CREATE USER '$NEWUSER'@'$DBHOST' IDENTIFIED BY '$NEWPASS';" || true
+ mysql --defaults-file=/etc/mysql/debian.cnf $DBPASS_ARG $DBHOST_ARG --execute="GRANT SELECT,INSERT,UPDATE,DELETE ON $DBNAME.* TO '$NEWUSER'@'$DBHOST';" || true
+ mysql --defaults-file=/etc/mysql/debian.cnf $DBPASS_ARG $DBHOST_ARG --execute="ALTER USER '$NEWUSER'@'$DBHOST' IDENTIFIED BY '$NEWPASS';" || true
+
;;
build)
(cd tools && ./validateinterfaces.py silent) || aborterror "Interface validation error."
@@ -207,13 +224,13 @@ EOF
[ $? -eq 0 ] || aborterror "Unable to override inter-server configuration, aborting tests."
ARGS="--load-script npc/dev/test.txt "
ARGS="--load-plugin script_mapquit $ARGS --load-script npc/dev/ci_test.txt"
- PLUGINS="--load-plugin HPMHooking --load-plugin sample"
+ PLUGINS="--load-plugin HPMHooking"
echo "run tests"
if [[ $DBUSER == "travis" ]]; then
echo "Disable leak dection on travis"
- export ASAN_OPTIONS=detect_leaks=0:detect_stack_use_after_return=true:strict_init_order=true
+ export ASAN_OPTIONS=detect_leaks=0:detect_stack_use_after_return=true:strict_init_order=true:detect_odr_violation=0
else
- export ASAN_OPTIONS=detect_stack_use_after_return=true:strict_init_order=true
+ export ASAN_OPTIONS=detect_stack_use_after_return=true:strict_init_order=true:detect_odr_violation=0
fi
# run_test spinlock # Not running the spinlock test for the time being (too time consuming)
run_test libconfig
@@ -221,7 +238,38 @@ EOF
run_server ./login-server
run_server ./char-server
run_server ./map-server "$ARGS"
- echo "run all servers wit HPM"
+ echo "run all servers with HPM"
+ run_server ./login-server "$PLUGINS"
+ run_server ./char-server "$PLUGINS"
+ run_server ./map-server "$ARGS $PLUGINS"
+ echo "run all servers with sample plugin"
+ run_server ./login-server "$PLUGINS --load-plugin sample"
+ run_server ./char-server "$PLUGINS --load-plugin sample"
+ run_server ./map-server "$PLUGINS --load-plugin sample"
+ echo "run all servers with constdb2doc"
+ run_server ./map-server "$PLUGINS --load-plugin constdb2doc --constdb2doc"
+ echo "run all servers with db2sql"
+ run_server ./map-server "$PLUGINS --load-plugin db2sql --db2sql"
+ run_server ./map-server "$PLUGINS --load-plugin db2sql --itemdb2sql"
+ run_server ./map-server "$PLUGINS --load-plugin db2sql --mobdb2sql"
+# look like works on windows only
+# echo "run all servers with dbghelpplug"
+# run_server ./login-server "$PLUGINS --load-plugin dbghelpplug"
+# run_server ./char-server "$PLUGINS --load-plugin dbghelpplug"
+# run_server ./map-server "$PLUGINS --load-plugin dbghelpplug"
+ echo "run all servers with generate-translations"
+ run_server ./map-server "$PLUGINS --load-plugin generate-translations --generate-translations"
+ echo "run all servers with mapcache"
+# for other flags need grf or other files
+ run_server ./map-server "$PLUGINS --load-plugin mapcache --fix-md5"
+ echo "run all servers with script_mapquit"
+ run_server ./map-server "$PLUGINS --load-plugin script_mapquit"
+ ;;
+ extratest)
+ export ASAN_OPTIONS=detect_stack_use_after_return=true:strict_init_order=true:detect_odr_violation=0
+ PLUGINS="--load-plugin HPMHooking"
+ echo "run map server with uncommented old and custom scripts"
+ find ./npc -type f -name "*.conf" -exec ./tools/ci/uncomment.sh {} \;
run_server ./login-server "$PLUGINS"
run_server ./char-server "$PLUGINS"
run_server ./map-server "$ARGS $PLUGINS"
@@ -238,6 +286,13 @@ EOF
# echo "Plugin not found, skipping advanced tests."
#fi
;;
+ startmysql)
+ echo "Starting mysql..."
+ service mysql status || true
+ service mysql stop || true
+ service mysql start || true
+ service mysql status || true
+ ;;
*)
usage
;;
diff --git a/tools/ci/uncomment.sh b/tools/ci/uncomment.sh
new file mode 100755
index 000000000..22fe4e966
--- /dev/null
+++ b/tools/ci/uncomment.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+
+sed -i "s|//\"npc/|\"npc/|g" $1
+sed -i "s|\"npc/location/to/script.txt\"|//\"npc/location/to/script.txt\"|g" $1
diff --git a/tools/doxygen/doxygen.conf b/tools/doxygen/doxygen.conf
index 043b36dc8..95d3b3ebf 100644
--- a/tools/doxygen/doxygen.conf
+++ b/tools/doxygen/doxygen.conf
@@ -1,25 +1,181 @@
-# Doxyfile 1.8.8
+# Doxyfile 1.8.16
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the configuration
+# file that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
+# The default value is: UTF-8.
+
DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
PROJECT_NAME = "Hercules"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
PROJECT_NUMBER =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
PROJECT_LOGO = Hercules48.png
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
OUTPUT_DIRECTORY = docs
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
CREATE_SUBDIRS = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
ALLOW_UNICODE_NAMES = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
OUTPUT_LANGUAGE = English
+
+# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all generated output in the proper direction.
+# Possible values are: None, LTR, RTL and Context.
+# The default value is: None.
+
+OUTPUT_TEXT_DIRECTION = None
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
FULL_PATH_NAMES = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
STRIP_FROM_PATH = ../../
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
STRIP_FROM_INC_PATH = ../../
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
SHORT_NAMES = NO
# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
@@ -28,22 +184,56 @@ SHORT_NAMES = NO
# style comments (thus requiring an explicit @brief command for a brief
# description.)
# The default value is: NO.
+
JAVADOC_AUTOBRIEF = NO
+# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
+# such as
+# /***************
+# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
+# Javadoc-style will behave just like regular comments and it will not be
+# interpreted by doxygen.
+# The default value is: NO.
+
+JAVADOC_BANNER = NO
+
# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
# line (until the first dot) of a Qt-style comment as the brief description. If
# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
# requiring an explicit \brief command for a brief description.)
# The default value is: NO.
+
QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
MULTILINE_CPP_IS_BRIEF = NO
# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
# documentation from any documented member that it re-implements.
# The default value is: YES.
-INHERIT_DOCS = YES
+INHERIT_DOCS = NO
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
TAB_SIZE = 8
# This tag can be used to specify a number of aliases that act as commands in
@@ -54,41 +244,161 @@ TAB_SIZE = 8
# will allow you to put the command \sideeffect (or @sideeffect) in the
# documentation, which will result in a user-defined paragraph with heading
# "Side Effects:". You can put \n's in the value part of an alias to insert
-# newlines.
+# newlines (in the resulting output). You can put ^^ in the value part of an
+# alias to insert a newline as if a physical newline was in the original file.
+# When you need a literal { or } or , in the value part of an alias you have to
+# escape them by means of a backslash (\), this can lead to conflicts with the
+# commands \{ and \} for these it is advised to use the version @{ and @} or use
+# a double escape (\\{ and \\})
+
ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
OPTIMIZE_OUTPUT_VHDL = NO
+
+# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
+# sources only. Doxygen will then generate output that is more tailored for that
+# language. For instance, namespaces will be presented as modules, types will be
+# separated into more groups, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_SLICE = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice,
+# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
+# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
+# tries to guess whether the code is fixed or free formatted code, this is the
+# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat
+# .inc files as Fortran files (default is PHP), and .f files as C (default is
+# Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
EXTENSION_MAPPING = h=C
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See https://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
MARKDOWN_SUPPORT = YES
+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
+# to that level are automatically included in the table of contents, even if
+# they do not have an id attribute.
+# Note: This feature currently applies only to Markdown headings.
+# Minimum value: 0, maximum value: 99, default value: 5.
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+
+TOC_INCLUDE_HEADINGS = 5
+
# When enabled doxygen tries to link words that correspond to documented
# classes, or namespaces to their corresponding documentation. Such a link can
-# be prevented in individual cases by by putting a % sign in front of the word
-# or globally by setting AUTOLINK_SUPPORT to NO.
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
# The default value is: YES.
+
AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
IDL_PROPERTY_SUPPORT = NO
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
+# tag is set to YES then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
-# The default value is: NNO
+# The default value is: NO.
+
DISTRIBUTE_GROUP_DOC = NO
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
# Set the SUBGROUPING tag to YES to allow class member groups of the same type
# (for instance a group of public functions) to be put as a subgroup of that
# type (e.g. under the Public Functions section). Set it to NO to prevent
# subgrouping. Alternatively, this can be done per class using the
# \nosubgrouping command.
-# The default value is: YENO
-SUBGROUPING = YES
+# The default value is: YES.
+
+SUBGROUPING = NO
# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
# are shown inside the group in which they are included (e.g. using \ingroup)
@@ -97,7 +407,8 @@ SUBGROUPING = YES
#
# Note that this feature does not work in combination with
# SEPARATE_MEMBER_PAGES.
-# The default value is: NNO
+# The default value is: NO.
+
INLINE_GROUPED_CLASSES = NO
# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
@@ -106,8 +417,19 @@ INLINE_GROUPED_CLASSES = NO
# namespace, or group documentation), provided this scope is documented. If set
# to NO, structs, classes, and unions are shown on a separate page (for HTML and
# Man pages) or section (for LaTeX and RTF).
-# The default value is: NNO
+# The default value is: NO.
+
INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
TYPEDEF_HIDES_STRUCT = NO
# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
@@ -120,173 +442,796 @@ TYPEDEF_HIDES_STRUCT = NO
# symbols. At the end of a run doxygen will report the cache usage and suggest
# the optimal cache size from a speed point of view.
# Minimum value: 0, maximum value: 9, default value: 0.
+
LOOKUP_CACHE_SIZE = 0
+
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
# documentation are documented, even if no documentation was available. Private
# class members and static file members will be hidden unless the
# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
# Note: This will also disable the warnings about undocumented members that are
# normally produced when WARNINGS is set to YES.
# The default value is: NO.
-EXTRACT_ALL = NO
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
EXTRACT_PRIVATE = YES
-# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
+# methods of a class will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIV_VIRTUAL = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
# scope will be included in the documentation.
# The default value is: NO.
+
EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
EXTRACT_STATIC = YES
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
-# locally in source files will be included in the documentation. If set to NO
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
# only classes defined in header files are included. Does not have any effect
# for Java sources.
# The default value is: YES.
+
EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
+
EXTRACT_LOCAL_METHODS = YES
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# (including Cygwin) ands Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
HIDE_SCOPE_NAMES = NO
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
SHOW_INCLUDE_FILES = YES
# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
# grouped member an include statement to the documentation, telling the reader
# which file to include in order to use the member.
# The default value is: NO.
+
SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
FILE_VERSION_FILTER = "git log -n 1 --pretty=format:%h -- "
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
LAYOUT_FILE = layoutFile.xml
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
CITE_BIB_FILES =
+
#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
WARNINGS = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
WARN_IF_UNDOCUMENTED = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation. If
+# EXTRACT_ALL is set to YES then this flag will automatically be disabled.
+# The default value is: NO.
+
WARN_NO_PARAMDOC = YES
+
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+# a warning is encountered.
+# The default value is: NO.
+
+WARN_AS_ERROR = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
WARN_LOGFILE =
+
#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
INPUT = ../../src/map \
../../src/common \
../../src/char \
../../src/login \
../../src/config
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: https://www.gnu.org/software/libiconv/) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
+# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.
+
FILE_PATTERNS = *.c \
*.h
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
FILTER_SOURCE_PATTERNS =
# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
# is part of the input, its contents will be placed on the main page
# (index.html). This can be useful if you have a project on for instance GitHub
# and want to reuse the introduction page also for the doxygen output.
+
USE_MDFILE_AS_MAINPAGE =
+
#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
STRIP_CODE_COMMENTS = YES
# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
-# function all documented functions referencing it will be listed.
+# entity all documented functions referencing it will be listed.
# The default value is: NO.
+
REFERENCED_BY_RELATION = NO
# If the REFERENCES_RELATION tag is set to YES then for each documented function
# all documented entities called/used by that function will be listed.
# The default value is: NO.
+
REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
SOURCE_TOOLTIPS = YES
-USE_HTAGS = NO
-VERBATIM_HEADERS = YES
-# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the
-# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
-# cost of reduced performance. This can be particularly helpful with template
-# rich C++ code for which doxygen's built-in parser lacks the necessary type
-# information.
-# Note: The availability of this option depends on whether or not doxygen was
-# compiled with the --with-libclang option.
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see https://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
# The default value is: NO.
-CLANG_ASSISTED_PARSING = NO
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS = NO
-# If clang assisted parsing is enabled you can provide the compiler with command
-# line options that you would normally use when invoking the compiler. Note that
-# the include paths will already be set by doxygen for the files and directories
-# specified with INPUT and INCLUDE_PATH.
-# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
-CLANG_OPTIONS =
#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
ALPHABETICAL_INDEX = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
IGNORE_PREFIX =
+
#---------------------------------------------------------------------------
# Configuration options related to the HTML output
#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
+
GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
HTML_COLORSTYLE_HUE = 30
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
HTML_TIMESTAMP = YES
+# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
+# documentation will contain a main index with vertical navigation menus that
+# are dynamically created via Javascript. If disabled, the navigation index will
+# consists of multiple levels of tabs that are statically embedded in every HTML
+# page. Disable this option to support browsers that do not have Javascript,
+# like the Qt help browser.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_MENUS = YES
+
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
+
HTML_DYNAMIC_SECTIONS = NO
# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
@@ -299,116 +1244,864 @@ HTML_DYNAMIC_SECTIONS = NO
# tree by default.
# Minimum value: 0, maximum value: 9999, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.
+
HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: https://developer.apple.com/xcode/), introduced with OSX
+# 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
+# genXcode/_index.html for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
GENERATE_DOCSET = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
GENERATE_HTMLHELP = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
CHM_FILE =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
HHC_LOCATION =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
GENERATE_CHI = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
CHM_INDEX_ENCODING =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
QHP_VIRTUAL_FOLDER = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
QHP_SECT_FILTER_ATTRS =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
ECLIPSE_DOC_ID = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
GENERATE_TREEVIEW = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
TREEVIEW_WIDTH = 250
+
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# https://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
USE_MATHJAX = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from https://www.mathjax.org before deployment.
+# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
MATHJAX_EXTENSIONS =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
MATHJAX_CODEFILE =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
SEARCHENGINE = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
SERVER_BASED_SEARCH = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: https://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
EXTERNAL_SEARCH = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: https://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
SEARCHENGINE_URL =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
SEARCHDATA_FILE = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
EXTERNAL_SEARCH_ID =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
EXTRA_SEARCH_MAPPINGS =
+
#---------------------------------------------------------------------------
# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
+
GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when not enabling USE_PDFLATEX the default is latex when enabling
+# USE_PDFLATEX the default is pdflatex and when in the later case latex is
+# chosen this is overwritten by pdflatex. For specific output languages the
+# default can have been set differently, this depends on the implementation of
+# the output language.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# Note: This tag is used in the Makefile / make.bat.
+# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
+# (.tex).
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
MAKEINDEX_CMD_NAME = makeindex
+
+# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
+# generate index for LaTeX. In case there is no backslash (\) as first character
+# it will be automatically added in the LaTeX code.
+# Note: This tag is used in the generated output file (.tex).
+# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
+# The default value is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_MAKEINDEX_CMD = makeindex
+
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
PAPER_TYPE = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
LATEX_FOOTER =
+
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
LATEX_EXTRA_FILES =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
LATEX_BATCHMODE = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
LATEX_HIDE_INDICES = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
LATEX_BIB_STYLE = plain
+
+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_TIMESTAMP = NO
+
+# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
+# path from which the emoji images will be read. If a relative path is entered,
+# it will be relative to the LATEX_OUTPUT directory. If left blank the
+# LATEX_OUTPUT directory will be used.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EMOJI_DIRECTORY =
+
#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# configuration file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's configuration file. A template extensions file can be
+# generated using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
RTF_EXTENSIONS_FILE =
+
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE = NO
+
#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
MAN_EXTENSION = .3
+
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
MAN_SUBDIR =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
MAN_LINKS = NO
+
#---------------------------------------------------------------------------
# Configuration options related to the XML output
#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
XML_OUTPUT = xml
+
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
XML_PROGRAMLISTING = YES
+
+# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
+# namespace members in file scope as well, matching the HTML output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_NS_MEMB_FILE_SCOPE = NO
+
#---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
GENERATE_DOCBOOK = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
DOCBOOK_OUTPUT = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
DOCBOOK_PROGRAMLISTING = NO
+
#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
+# the structure of the code including all documentation. Note that this feature
+# is still experimental and incomplete at the moment.
+# The default value is: NO.
+
GENERATE_AUTOGEN_DEF = NO
+
#---------------------------------------------------------------------------
# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
PERLMOD_MAKEVAR_PREFIX =
+
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
INCLUDE_PATH = ../../src \
../../3rdparty
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
INCLUDE_FILE_PATTERNS =
# The PREDEFINED tag can be used to specify one or more macro names that are
@@ -418,6 +2111,7 @@ INCLUDE_FILE_PATTERNS =
# is assumed. To prevent a macro definition from being undefined via #undef or
# recursively expanded use the := operator instead of the = operator.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
PREDEFINED =
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
@@ -426,34 +2120,108 @@ PREDEFINED =
# tag if you want to use a different macro definition that overrules the
# definition found in the source code.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
SKIP_FUNCTION_MACROS = NO
+
#---------------------------------------------------------------------------
# Configuration options related to external references
#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
GENERATE_TAGFILE =
-# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
-# class index. If set to NO only the inherited external classes will be listed.
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
# The default value is: NO.
+
ALLEXTERNALS = NO
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
-# the modules index. If set to NO, only the current project's groups will be
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
# listed.
# The default value is: YES.
+
EXTERNAL_GROUPS = YES
+
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
EXTERNAL_PAGES = YES
-PERL_PATH = /usr/bin/perl
+
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
CLASS_DIAGRAMS = YES
-MSCGEN_PATH =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
DIA_PATH =
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
HIDE_UNDOC_RELATIONS = NO
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
+
HAVE_DOT = YES
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
DOT_NUM_THREADS = 0
# When you want a differently looking font in the dot files that doxygen
@@ -463,19 +2231,66 @@ DOT_NUM_THREADS = 0
# setting DOT_FONTPATH to the directory containing the font.
# The default value is: Helvetica.
# This tag requires that the tag HAVE_DOT is set to YES.
+
DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
DOT_FONTPATH =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
GROUP_GRAPHS = YES
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
+
UML_LOOK = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
UML_LIMIT_NUM_FIELDS = 10
# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
@@ -483,23 +2298,193 @@ UML_LIMIT_NUM_FIELDS = 10
# instances.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
+
TEMPLATE_RELATIONS = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
INCLUDE_GRAPH = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
CALL_GRAPH = YES
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
CALLER_GRAPH = YES
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
DOT_IMAGE_FORMAT = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
INTERACTIVE_SVG = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
MSCFILE_DIRS =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
DIAFILE_DIRS =
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+
PLANTUML_JAR_PATH =
+
+# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
+# configuration file for plantuml.
+
+PLANTUML_CFG_FILE =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
DOT_GRAPH_MAX_NODES = 100
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
DOT_TRANSPARENT = YES
+
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
DOT_MULTI_TARGETS = YES
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
DOT_CLEANUP = YES
diff --git a/tools/utils/libconf.py b/tools/utils/libconf.py
index 3858b93b5..d40418a02 100644
--- a/tools/utils/libconf.py
+++ b/tools/utils/libconf.py
@@ -141,7 +141,9 @@ class IntToken(Token):
super(IntToken, self).__init__(*args, **kwargs)
self.is_long = self.text.endswith('L')
self.is_hex = (self.text[1:2].lower() == 'x')
- self.value = int(self.text.rstrip('L'), 0)
+ self.is_oct = (self.text[1:2].lower() == 'o')
+ self.is_bin = (self.text[1:2].lower() == 'b')
+ self.value = int(self.text.replace('_', '').rstrip('L'), 0)
class BoolToken(Token):
@@ -182,14 +184,18 @@ class Tokenizer:
token_map = compile_regexes([
(FltToken, 'float', r'([-+]?(\d+)?\.\d*([eE][-+]?\d+)?)|'
r'([-+]?(\d+)(\.\d*)?[eE][-+]?\d+)'),
- (IntToken, 'hex64', r'0[Xx][0-9A-Fa-f]+(L(L)?)'),
- (IntToken, 'hex', r'0[Xx][0-9A-Fa-f]+'),
+ (IntToken, 'hex64', r'0[Xx][0-9A-Fa-f_]+(L(L)?)'),
+ (IntToken, 'hex', r'0[Xx][0-9A-Fa-f_]+'),
+ (IntToken, 'oct64', r'0[Oo][0-7_]+(L(L)?)'),
+ (IntToken, 'oct', r'0[Oo][0-7_]+'),
+ (IntToken, 'bin64', r'0[Bb][01_]+(L(L)?)'),
+ (IntToken, 'bin', r'0[Bb][01_]+'),
(BoolToken, 'boolean', r'(?i)(true|false)\b'),
(StrToken, 'string', r'"([^"\\]|\\.)*"'),
(StrToken, 'string', r'<"(?<=<")([\S\s]*?)(?=">)">'),
(Token, 'name', r'[0-9]*[A-Za-z\*][-A-Za-z0-9_\*]*'),
- (IntToken, 'integer64', r'[-+]?[0-9]+L(L)?'),
- (IntToken, 'integer', r'[-+]?[0-9]+'),
+ (IntToken, 'integer64', r'[-+]?[0-9_]+L(L)?'),
+ (IntToken, 'integer', r'[-+]?[0-9_]+'),
(Token, '}', r'\}'),
(Token, '{', r'\{'),
(Token, ')', r'\)'),
@@ -422,7 +428,8 @@ class Parser:
def scalar_value(self):
# This list is ordered so that more common tokens are checked first.
acceptable = [self.string, self.boolean, self.integer, self.float,
- self.hex, self.integer64, self.hex64]
+ self.hex, self.oct, self.bin, self.integer64, self.hex64,
+ self.oct64, self.bin64]
return self._parse_any_of(acceptable)
def value_list_or_empty(self):
@@ -455,6 +462,18 @@ class Parser:
def hex64(self):
return self._create_value_node('hex64')
+ def oct(self):
+ return self._create_value_node('oct')
+
+ def oct64(self):
+ return self._create_value_node('oct64')
+
+ def bin(self):
+ return self._create_value_node('bin')
+
+ def bin64(self):
+ return self._create_value_node('bin64')
+
def float(self):
return self._create_value_node('float')
diff --git a/tools/validateinterfaces.py b/tools/validateinterfaces.py
index e031c34ab..324a2aeec 100755
--- a/tools/validateinterfaces.py
+++ b/tools/validateinterfaces.py
@@ -23,7 +23,6 @@
import os
import re
import sys
-from sets import Set
interfaceRe = re.compile("struct (?P<name1>[a-z_]+)_interface (?P<name2>[a-z_]+)_s;")
@@ -44,7 +43,7 @@ def searchStructStart(r, ifname):
return False
def readCFile(tracker, cFile):
- methods = Set()
+ methods = set()
shortIfName = ""
with open(cFile, "r") as r:
for line in r:
@@ -78,7 +77,7 @@ def readCFile(tracker, cFile):
return (None, shortIfName, methods)
def readHFile(tracker, hFile, ifname):
- methods = Set()
+ methods = set()
with open(hFile, "r") as r:
if searchStructStart(r, ifname) == False:
return methods
@@ -108,7 +107,7 @@ def checkIfFile(tracker, cFile, hFile):
tracker.arr[ifname + "_" + method] = list()
tracker.methods.add(ifname + "_" + method)
if method not in cMethods:
- print "Missing initialisation in file {0}: {1}".format(cFile, method)
+ print("Missing initialisation in file {0}: {1}".format(cFile, method))
tracker.retCode = 1
# for method in cMethods:
# if method not in hMethods:
@@ -175,13 +174,13 @@ def processDir(tracker, srcDir):
checkFile(tracker, cPath)
def reportMethods(tracker):
- print "\n"
+ print("\n")
for method in tracker.methods:
if len(tracker.arr[method]) > 2:
- print method
+ print(method)
for t in tracker.arr[method]:
- print t
- print "\n"
+ print(t)
+ print("\n")
def checkLostFile(tracker, cFile):
@@ -198,7 +197,7 @@ def checkLostFile(tracker, cFile):
continue
if name not in tracker.fullmethods:
# print "src : " + line
- print name
+ print(name)
def processLostDir(tracker, srcDir):
files = os.listdir(srcDir)
@@ -232,9 +231,9 @@ def runLong():
tracker = Tracker()
tracker.arr = dict()
-tracker.methods = Set()
-tracker.fullmethods = Set()
-tracker.interfaces = Set()
+tracker.methods = set()
+tracker.fullmethods = set()
+tracker.interfaces = set()
tracker.retCode = 0
if len(sys.argv) > 1:
@@ -245,19 +244,19 @@ else:
if cmd == "silent":
runIf()
elif cmd == "init":
- print "Checking interfaces initialisation"
+ print("Checking interfaces initialisation")
runIf()
elif cmd == "lost":
- print "Checking not added functions to interfaces"
+ print("Checking not added functions to interfaces")
runLost();
elif cmd == "long":
- print "Checking interfaces usage"
+ print("Checking interfaces usage")
runLong();
else:
- print "Checking interfaces initialisation"
+ print("Checking interfaces initialisation")
runIf()
- print "Checking not added functions to interfaces"
+ print("Checking not added functions to interfaces")
runLost();
- print "Checking interfaces usage"
+ print("Checking interfaces usage")
runLong();
exit(tracker.retCode)