diff options
155 files changed, 62732 insertions, 24139 deletions
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 @@ -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/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 = ¬e->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 = §ions[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='[0m' + tc_bold='[1m'; tc_standout='[7m' + tc_red='[31m'; tc_green='[32m' + tc_blue='[34m'; tc_cyan='[36m' + 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 *) <_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, + ¤t_found_sym, ¤t_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, §s_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, §s_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, §s_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, §s_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 = §s[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, §s_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, §s_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); +} @@ -1,3 +1,221 @@ +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 Henrique <carloshlfzanon@gmail.com> +Christian <txandy@gmail.com> +csnv <ctt@csnv.es> +daegaladh <Daegaladh@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> +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 8e196fe2e..3bcb8b3f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,107 @@ 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.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 @@ -1263,6 +1360,9 @@ 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.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 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/pet.conf b/conf/map/battle/pet.conf index fa0057564..5797bb2a5 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). 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" @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 9bce92f63. +# From configure.ac 2b51b41ab. # 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,11 +6315,395 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi + + { $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 + + @@ -8518,6 +8995,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 +9508,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 +11323,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 +11428,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..1d02fdf79 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]) @@ -1392,6 +1433,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 +1718,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 1770ab06f..70f5569b4 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -440,17 +440,20 @@ constants_db: { mf_nogstorage: 60 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 @@ -458,12 +461,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 @@ -1429,6 +1435,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/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/item_db.conf b/db/pre-re/item_db.conf index fa204f04b..493a758cc 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); "> }, { @@ -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); "> }, { @@ -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 @@ -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 @@ -73162,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" @@ -74233,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" @@ -93997,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" @@ -94465,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" diff --git a/db/pre-re/mob_db.conf b/db/pre-re/mob_db.conf index 78e255f36..92fd149f3 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) 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 1222aa1a0..446df3c86 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) @@ -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 + } } } }, @@ -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 + } } } }, @@ -22134,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 } } }, @@ -22460,9 +22498,11 @@ skill_db: ( SPCost: 25 State: "MadoGear" Items: { - Hovering_Booster: 0 Magic_Gear_Fuel: 1 } + Equip: { + Hovering_Booster: 1 + } } }, { @@ -22589,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 } @@ -22898,6 +22946,17 @@ skill_db: ( } State: "MadoGear" Items: { + RepairA: { + Lv1: 1 + Lv2: 1 + } + RepairB: { + Lv3: 1 + Lv4: 1 + } + RepairC: { + Lv5: 1 + } Repair_Kit: 0 } } @@ -27587,7 +27646,7 @@ skill_db: ( Lv7: 20 Lv8: 22 Lv9: 24 - Lv10: 26 + Lv10: 25 } CastTime: 1000 AfterCastActDelay: 1000 @@ -27642,7 +27701,7 @@ skill_db: ( Lv7: 20 Lv8: 22 Lv9: 24 - Lv10: 26 + Lv10: 25 } CastTime: 1000 AfterCastActDelay: 1000 @@ -28507,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 + } } } }, @@ -28566,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 + } } } }, @@ -28625,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 + } } } }, @@ -28684,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 + } } } }, @@ -28800,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: { @@ -28849,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: { @@ -28898,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: { @@ -28947,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: { @@ -29540,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 + } } } }, @@ -32602,7 +32695,6 @@ skill_db: ( InterruptCast: true CastTime: 1000 AfterCastActDelay: 1000 - FixedCastTime: 0 Requirements: { SPCost: 10 } @@ -32623,7 +32715,6 @@ skill_db: ( AfterCastActDelay: 1000 SkillData1: -1 CoolDown: 15000 - FixedCastTime: 0 Requirements: { SPCost: 30 } @@ -32659,7 +32750,6 @@ skill_db: ( Lv9: 1 Lv10: 1 } - FixedCastTime: 0 Requirements: { SPCost: { Lv1: 20 @@ -32691,7 +32781,6 @@ skill_db: ( AfterCastActDelay: 1000 SkillData1: 6000 CoolDown: 15000 - FixedCastTime: 0 Requirements: { SPCost: 10 } @@ -32735,7 +32824,6 @@ skill_db: ( Lv9: 18000 Lv10: 20000 } - FixedCastTime: 0 Requirements: { SPCost: { Lv1: 30 @@ -32787,7 +32875,6 @@ skill_db: ( CastTime: 2500 AfterCastActDelay: 1000 SkillData1: 10000 - FixedCastTime: 0 Requirements: { SPCost: { Lv1: 40 @@ -32835,7 +32922,6 @@ skill_db: ( Lv4: 6000 Lv5: 7000 } - FixedCastTime: 0 Requirements: { SPCost: { Lv1: 40 @@ -32909,7 +32995,6 @@ skill_db: ( Lv5: 6000 } - FixedCastTime: 0 Requirements: { SPCost: { Lv1: 20 @@ -32961,7 +33046,6 @@ skill_db: ( Lv10: 25000 } CoolDown: 3000 - FixedCastTime: 0 Requirements: { SPCost: { Lv1: 10 @@ -33002,7 +33086,6 @@ skill_db: ( } SkillInstances: 1 AfterCastActDelay: 1000 - FixedCastTime: 0 Requirements: { SPCost: 1 } @@ -33031,7 +33114,6 @@ skill_db: ( AfterCastActDelay: 1000 SkillData1: 9000 SkillData2: 1000 - FixedCastTime: 0 Requirements: { SPCost: { Lv1: 10 @@ -33063,7 +33145,6 @@ skill_db: ( InterruptCast: true CastTime: 2500 AfterCastActDelay: 1000 - FixedCastTime: 0 Requirements: { SPCost: { Lv1: 10 @@ -33093,7 +33174,6 @@ skill_db: ( NumberOfHits: -5 InterruptCast: true AfterCastActDelay: 1000 - FixedCastTime: 0 Requirements: { SPCost: 1 } @@ -33126,7 +33206,6 @@ skill_db: ( Lv10: 150000 } CoolDown: 10000 - FixedCastTime: 0 Requirements: { SPCost: { Lv1: 12 @@ -33186,7 +33265,6 @@ skill_db: ( AfterCastActDelay: 1000 SkillData1: 1000 CoolDown: 8000 - FixedCastTime: 0 Requirements: { SPCost: { Lv1: 15 @@ -33237,7 +33315,6 @@ skill_db: ( Lv9: 24000 Lv10: 26000 } - FixedCastTime: 0 Requirements: { SPCost: { Lv1: 20 @@ -33270,7 +33347,6 @@ skill_db: ( AfterCastActDelay: 1000 SkillData1: 30000 CoolDown: 20000 - FixedCastTime: 0 Requirements: { SPCost: { Lv1: 20 @@ -33315,7 +33391,6 @@ skill_db: ( Lv10: 330000 } CoolDown: 10000 - FixedCastTime: 0 Requirements: { SPCost: { Lv1: 44 @@ -33353,7 +33428,6 @@ skill_db: ( AfterCastActDelay: 1000 SkillData1: 120000 CoolDown: 7000 - FixedCastTime: 0 Requirements: { SPCost: { Lv1: 22 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 dbe3531b0..408fb3ef8 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); "> }, { @@ -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); "> }, { @@ -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 @@ -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 @@ -94088,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 @@ -96029,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" @@ -127064,6 +127389,7 @@ item_db: ( Name: "Activation Potion Box" Type: "IT_CASH" Buy: 20 + Weight: 10 Trade: { nodrop: true notrade: true @@ -127073,6 +127399,7 @@ item_db: ( nomail: true noauction: true } + Script: <" getitem(Acti_Potion, 5); "> }, { Id: 16257 @@ -130581,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" @@ -148684,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" @@ -153631,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" @@ -153676,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" @@ -154471,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 ============================================ { @@ -156340,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" @@ -157805,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" @@ -157864,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 376fba179..ecca6e2e4 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) @@ -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 + } } } }, @@ -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 } @@ -22738,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 } } }, @@ -23078,9 +23109,11 @@ skill_db: ( SPCost: 25 State: "MadoGear" Items: { - Hovering_Booster: 0 Magic_Gear_Fuel: 1 } + Equip: { + Hovering_Booster: 1 + } } }, { @@ -23208,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 } @@ -23522,6 +23563,17 @@ skill_db: ( } State: "MadoGear" Items: { + RepairA: { + Lv1: 1 + Lv2: 1 + } + RepairB: { + Lv3: 1 + Lv4: 1 + } + RepairC: { + Lv5: 1 + } Repair_Kit: 0 } } @@ -28297,7 +28349,7 @@ skill_db: ( Lv7: 20 Lv8: 22 Lv9: 24 - Lv10: 26 + Lv10: 25 } CastTime: 1000 AfterCastActDelay: 1000 @@ -28352,7 +28404,7 @@ skill_db: ( Lv7: 20 Lv8: 22 Lv9: 24 - Lv10: 26 + Lv10: 25 } CastTime: 1000 AfterCastActDelay: 1000 @@ -29316,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 + } } } }, @@ -29376,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 + } } } }, @@ -29436,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 + } } } }, @@ -29496,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 + } } } }, @@ -29614,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: { @@ -29664,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: { @@ -29714,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: { @@ -29764,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: { @@ -30362,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 fb175ce83..5feb3736d 100644 --- a/doc/constants.md +++ b/doc/constants.md @@ -375,9 +375,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 +389,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 +1347,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 @@ -4665,8 +4680,8 @@ - `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 @@ -5022,6 +5037,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 @@ -5061,6 +5095,7 @@ - `MSC_MASTERATTACKED`: 20 - `MSC_ALCHEMIST`: 21 - `MSC_SPAWN`: 22 +- `MSC_MAGICATTACKED`: 23 ### monster skill targets @@ -5079,6 +5114,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 @@ -8161,17 +8202,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 @@ -12700,6 +12772,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 @@ -12711,6 +12785,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 @@ -13724,9 +13802,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 @@ -13753,6 +13844,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 @@ -13797,7 +13898,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 @@ -13921,6 +14025,7 @@ - `Trance_Candy_Y`: 11594 - `Trance_Candy_G`: 11595 - `Catnip_Fruit`: 11602 +- `Cookie_Bat`: 11605 - `Crepe`: 11607 - `Chocolate_Egg`: 11608 - `Yummy_Cookie_Egg`: 11609 @@ -13928,6 +14033,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 @@ -14774,6 +14880,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 @@ -16642,6 +16749,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 @@ -18142,6 +18250,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 @@ -18795,6 +18906,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 @@ -18804,6 +18918,7 @@ - `Happiness_Clover`: 25295 - `Golden_Corn`: 25340 - `Mightysoul_Essence`: 25375 +- `Luxurious_Pet_Food`: 25377 - `Captured_Savage`: 25390 - `Goodly_Bough`: 25391 - `Free_Pass_Ticket`: 25392 @@ -18955,6 +19070,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 @@ -19102,6 +19219,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 @@ -19285,6 +19403,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 @@ -19407,6 +19526,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 a15baf2c2..707aab9d6 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -558,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 @@ -1732,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. --------------------------------------- @@ -1964,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; @@ -2024,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. @@ -6597,17 +6623,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 diff --git a/npc/dev/test.txt b/npc/dev/test.txt index 842c90f55..291671913 100644 --- a/npc/dev/test.txt +++ b/npc/dev/test.txt @@ -116,6 +116,40 @@ 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; @@ -794,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/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/sql-files/item_db.sql b/sql-files/item_db.sql index 90a0844e5..70ecb2094 100644 --- a/sql-files/item_db.sql +++ b/sql-files/item_db.sql @@ -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;','',''); @@ -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;','',''); @@ -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','','',''); @@ -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','','',''); @@ -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;','',''); @@ -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','','',''); diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql index 143600284..c378bbc88 100644 --- a/sql-files/item_db_re.sql +++ b/sql-files/item_db_re.sql @@ -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;','',''); @@ -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;','',''); @@ -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; }','',''); @@ -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','','',''); @@ -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;','',''); @@ -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. */','',''); @@ -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;','',''); @@ -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_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..c61b6107a 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) { @@ -2898,13 +2902,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; 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/cbasetypes.h b/src/common/cbasetypes.h index 83c7c8d60..31d89d66b 100644 --- a/src/common/cbasetypes.h +++ b/src/common/cbasetypes.h @@ -95,7 +95,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__ "" 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/mmo.h b/src/common/mmo.h index 25ad350c0..d2f3aa8f1 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -380,7 +380,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 +1381,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 2a6058f65..4b7273775 100644 --- a/src/common/packets/packets2020_len_main.h +++ b/src/common/packets/packets2020_len_main.h @@ -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,7 +4629,9 @@ packetLen(0x0b71, 177) #endif // Packet: 0x0b72 -#if PACKETVER >= 20200122 +#if PACKETVER >= 20200318 +packetLen(0x0b72, -1) +#elif PACKETVER >= 20200122 packetLen(0x0b72, 4) #endif @@ -4646,5 +4650,30 @@ packetLen(0x0b74, 1026) 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 + #endif /* COMMON_PACKETS2020_LEN_MAIN_H */ diff --git a/src/common/packets/packets2020_len_zero.h b/src/common/packets/packets2020_len_zero.h index c1ffbecf6..2aa2ccc96 100644 --- a/src/common/packets/packets2020_len_zero.h +++ b/src/common/packets/packets2020_len_zero.h @@ -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,7 +4629,9 @@ packetLen(0x0b71, 177) #endif // Packet: 0x0b72 -#if PACKETVER >= 20200129 +#if PACKETVER >= 20200401 +packetLen(0x0b72, -1) +#elif PACKETVER >= 20200129 packetLen(0x0b72, 4) #endif @@ -4646,5 +4650,30 @@ packetLen(0x0b74, 1026) 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 + #endif /* COMMON_PACKETS2020_LEN_ZERO_H */ 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..623457b8a 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 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 410cd7af7..76448b237 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; } @@ -2744,42 +2715,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. - pet_id = pet->search_petDB_index(id, PET_CLASS); - if (pet_id < 0) + if (id == 0) + id = atoi(message); // Egg/monster ID. + } + + int pet_id = pet->search_petDB_index(id, PET_CLASS); + + 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 +2776,90 @@ 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->send_petstatus(sd); + } + + 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. + pd->pet.hungry = hungry; + clif->send_petstatus(sd); + } + + clif->message(fd, msg_fd(fd, 185)); // Pet hunger changed. (Send message regardless of value has changed or not.) return true; } @@ -4503,6 +4499,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)); @@ -4537,6 +4534,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; @@ -4592,6 +4590,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; @@ -5671,6 +5670,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; @@ -7865,39 +7866,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; } @@ -8896,13 +8919,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" @@ -10545,9 +10572,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 985d2bca4..236ed70b7 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; } @@ -3750,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: @@ -4124,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 **/ @@ -4958,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 @@ -5928,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 */ @@ -6132,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(); } @@ -6341,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); } } @@ -6456,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); } @@ -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, }, diff --git a/src/map/battle.h b/src/map/battle.h index 2e710f7f8..bb907d5b9 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; 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 c9e018f73..6d67b5114 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); @@ -6766,7 +6777,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; @@ -9382,82 +9393,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 (p != NULL) { + 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 ((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. @@ -9706,10 +9733,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) @@ -9741,62 +9780,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.guild_id > 0 && (g = ssd->guild) != NULL) { + if (ssd->status.party_id != 0) + p = party->search(ssd->status.party_id); + + 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). @@ -10321,7 +10400,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. @@ -10331,7 +10411,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); @@ -10344,15 +10424,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; @@ -10371,7 +10442,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)) @@ -10539,51 +10610,60 @@ static void clif_parse_WantToConnection(int fd, struct map_session_data *sd) chrif->authreq(sd,false); } +/** + * 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->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); } @@ -10654,309 +10734,330 @@ static void clif_parse_LoadEndAck(int fd, struct map_session_data *sd) clif->updatestatus(sd, SP_WEIGHT); clif->updatestatus(sd, SP_MAXWEIGHT); - // guild - // (needs to go before clif_spawn() to show guild emblems correctly) - if(sd->status.guild_id) - guild->send_memberinfoshort(sd,1); + // 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 (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 ) + 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] - // reset the callshop flag if the player changes map - sd->state.callshop = 0; + 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. - map->addblock(&sd->bl); - clif->spawn(&sd->bl); - - // Party - // (needs to go after clif_spawn() to show hp bars correctly) - if(sd->status.party_id) { + // Send character's party info to the client. Call this after clif->spawn() to show HP bars correctly. + if (sd->status.party_id != 0) { 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 (battle_config.pet_no_gvg != 0 && 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. } else { map->addblock(&sd->pd->bl); clif->spawn(&sd->pd->bl); - clif->send_petdata(sd,sd->pd,0,0); + clif->send_petdata(sd,sd->pd, 0, 0); clif->send_petstatus(sd); - //skill->unit_move(&sd->pd->bl,timer->gettick(),1); } } - //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); + 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); + } - if(sd->status.manner < 0) - sc_start(NULL,&sd->bl,SC_NOCHAT,100,0,0); + 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); + } - //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 (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 + // 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->guild != NULL && ((battle_config.guild_notice_changemap == 1 && sd->state.changemap != 0) + || battle_config.guild_notice_changemap == 2)) { + clif->guild_notice(sd, sd->guild); + } } - if( sd->state.changemap ) {// restore information that gets lost on map-change + if (sd->state.changemap != 0) { // Restore information that gets lost on map-change. #if PACKETVER >= 20070918 clif->partyinvitationstate(sd); clif->equpcheckbox(sd); #endif #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); + 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( map->night_flag && map->list[sd->bl.m].flag.nightenabled ) { - //Display night. - if( !sd->state.night ) { + 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 (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); + 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); - 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)); + // 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 ) + // This should be displayed last. + if (sd->guild != NULL && 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 } @@ -11680,7 +11781,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)) @@ -11696,7 +11798,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]; @@ -12706,6 +12808,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] @@ -12756,10 +12868,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; } @@ -12777,16 +12889,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) @@ -12847,6 +12959,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. @@ -12883,11 +13007,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; } @@ -12908,13 +13032,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; @@ -12984,10 +13108,18 @@ static void clif_parse_UseSkillMap(int fd, struct map_session_data *sd) 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))); @@ -15180,58 +15312,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; - if (idx == sd->status.inventorySize) { + 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 (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; + + ARR_FIND(0, MAX_PET_DB, pet_index, pet->db[pet_index].class_ == sd->pd->pet.class_); - if (petIndex == MAX_PET_DB) { - // Which error? - clif->petEvolutionResult(fd, PET_EVOL_UNKNOWN); + 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); @@ -15241,7 +15383,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); @@ -15251,27 +15393,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; } } @@ -15344,6 +15485,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; @@ -19797,9 +19939,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++; } @@ -20091,7 +20233,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; @@ -22169,7 +22311,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 @@ -23666,12 +23808,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; @@ -23732,6 +23877,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 *------------------------------------------*/ @@ -24010,7 +24204,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 @@ -24232,6 +24426,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; @@ -24975,5 +25171,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..fdaaf85e3 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -733,6 +733,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, @@ -952,6 +957,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); @@ -1688,6 +1695,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/guild.c b/src/map/guild.c index f344878e1..90f870f1c 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -1519,7 +1519,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 +2069,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/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..4b06a21d6 100644 --- a/src/map/itemdb.h +++ b/src/map/itemdb.h @@ -606,7 +606,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/map.c b/src/map/map.c index defa56b2e..24d571498 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 @@ -1713,9 +1736,9 @@ static bool map_closest_freecell(int16 m, const struct block_list *bl, int16 *x, tx = *x + dx; ty = *y + dy; if (unit_is_dir_or_opposite(dir, UNIT_DIR_SOUTHWEST)) - tx *= costrange / MOVE_COST; + tx = tx * costrange / MOVE_COST; if (unit_is_dir_or_opposite(dir, UNIT_DIR_NORTHWEST)) - ty *= costrange / MOVE_COST; + 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; @@ -1724,9 +1747,9 @@ static bool map_closest_freecell(int16 m, const struct block_list *bl, int16 *x, tx = *x + dx; ty = *y + dy; if (unit_is_dir_or_opposite(dir, UNIT_DIR_NORTHWEST)) - tx *= costrange / MOVE_COST; + tx = tx * costrange / MOVE_COST; if (unit_is_dir_or_opposite(dir, UNIT_DIR_SOUTHWEST)) - ty *= costrange / MOVE_COST; + 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; @@ -3077,6 +3100,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: @@ -3141,6 +3166,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); @@ -4456,7 +4482,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); @@ -4474,16 +4499,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); } /*======================================= @@ -5265,7 +5288,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; @@ -6047,11 +6070,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; } @@ -6062,7 +6089,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; diff --git a/src/map/map.h b/src/map/map.h index a876539d0..17f210bc3 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -329,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. * @@ -588,6 +596,7 @@ typedef enum { CELL_NOCHAT, CELL_ICEWALL, CELL_NOICEWALL, + CELL_NOSKILL, } cell_t; @@ -612,6 +621,7 @@ typedef enum { CELL_CHKNOCHAT, CELL_CHKICEWALL, CELL_CHKNOICEWALL, + CELL_CHKNOSKILL, } cell_chk; @@ -630,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. @@ -846,7 +857,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; 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 9f5a17662..dab537b6a 100644 --- a/src/map/messages_main.h +++ b/src/map/messages_main.h @@ -24,7 +24,7 @@ /* This file is autogenerated, please do not commit manual changes -Latest version: 20200304 +Latest version: 20200520 */ 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 @@ -22612,6 +22614,28 @@ 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 }; #endif /* MAP_MESSAGES_MAIN_H */ diff --git a/src/map/messages_zero.h b/src/map/messages_zero.h index babe9384c..051d0e9df 100644 --- a/src/map/messages_zero.h +++ b/src/map/messages_zero.h @@ -24,7 +24,7 @@ /* This file is autogenerated, please do not commit manual changes -Latest version: 20200304 +Latest version: 20200520 */ 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 @@ -18701,6 +18703,28 @@ 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 }; #endif /* MAP_MESSAGES_ZERO_H */ diff --git a/src/map/mob.c b/src/map/mob.c index 51a32abd9..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 @@ -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 && @@ -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[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; - //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; + 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 2ac99948b..6ba088a80 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; } @@ -3053,11 +3057,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. @@ -3664,6 +3668,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 +3690,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 +5104,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 ) { @@ -5605,7 +5611,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 +5728,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 1585a2bc8..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 { 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 5fddf9eaf..5a2a1f846 100644 --- a/src/map/packets_keys_main.h +++ b/src/map/packets_keys_main.h @@ -37,7 +37,7 @@ packetKeys(0x49357d72,0x22c370a1,0x5f836591); #endif -// 2010-11-23aRagexeRE, 2010-11-24aRagexeRE, 2010-11-24bRagexeRE, 2010-11-25aRagexeRE, 2010-11-26aRagexeRE, 2010-11-30aRagexeRE, 2010-12-07aRagexeRE, 2010-12-14aRagexeRE, 2010-12-21aRagexeRE, 2010-12-23aRagexeRE, 2010-12-28aRagexeRE, 2011-01-04aRagexeRE, 2011-01-05aRagexeRE, 2011-01-11aRagexeRE, 2011-01-18aRagexeRE, 2011-01-25aRagexeRE, 2011-01-26aRagexeRE, 2011-01-26bRagexeRE, 2011-01-31aRagexeRE, 2011-01-31bRagexeRE, 2011-01-31cRagexeRE, 2011-02-08aRagexeRE, 2011-02-15aRagexeRE, 2011-02-22aRagexeRE, 2011-02-23aRagexeRE, 2011-02-23bRagexeRE, 2011-02-24aRagexeRE, 2011-02-25aRagexeRE, 2011-02-28aRagexeRE, 2011-03-08aRagexeRE, 2011-03-09aRagexeRE, 2011-03-09bRagexeRE, 2011-03-09cRagexeRE, 2011-03-09dRagexeRE, 2011-03-15aRagexeRE, 2011-03-22aRagexeRE, 2011-03-29aRagexeRE, 2011-03-30aRagexeRE, 2011-03-30cRagexeRE, 2011-04-05aRagexeRE, 2011-04-12aRagexeRE, 2011-04-19aRagexeRE, 2011-04-20aRagexeRE, 2011-04-26aRagexeRE, 2011-04-27aRagexeRE, 2011-05-03aRagexeRE, 2011-05-11aRagexeRE, 2011-05-17bRagexeRE, 2011-05-24aRagexeRE, 2011-05-26aRagexeRE, 2011-05-31aRagexeRE, 2011-06-07aRagexeRE, 2011-06-08aRagexeRE, 2011-06-08bRagexeRE, 2011-06-08cRagexeRE, 2011-06-09aRagexeRE, 2011-06-14bRagexeRE, 2011-06-22aRagexeRE, 2011-06-28aRagexeRE, 2011-07-06aRagexeRE, 2011-07-13aRagexeRE, 2011-07-13bRagexeRE, 2011-07-13cRagexeRE, 2011-07-19aRagexeRE, 2011-07-26aRagexeRE, 2011-08-03aRagexeRE, 2011-08-03bRagexeRE, 2011-08-10aRagexeRE, 2013-12-23aRagexeRE, 2014-05-08aRagexe, 2014-05-08aRagexeRE, 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-21aRagexeRE, 2018-03-28bRagexe, 2018-03-28bRagexeRE, 2018-04-04bRagexe, 2018-04-04cRagexeRE, 2018-04-18aRagexe, 2018-04-18bRagexeRE, 2018-04-25cRagexe, 2018-04-25cRagexeRE, 2018-05-02bRagexe, 2018-05-02bRagexeRE, 2018-05-02dRagexeRE, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-16cRagexeRE, 2018-05-23aRagexe, 2018-05-23aRagexeRE, 2018-05-30aRagexe, 2018-05-30bRagexeRE, 2018-05-30cRagexeRE, 2018-06-05bRagexe, 2018-06-05bRagexeRE, 2018-06-12aRagexeRE, 2018-06-12bRagexeRE, 2018-06-20cRagexe, 2018-06-20dRagexeRE, 2018-06-20eRagexe, 2018-06-20eRagexeRE, 2018-06-21aRagexe, 2018-06-21aRagexeRE, 2018-07-04aRagexe, 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexe, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexe, 2018-07-18cRagexeRE, 2018-08-01cRagexe, 2018-08-01cRagexeRE, 2018-08-08bRagexe, 2018-08-08bRagexeRE, 2018-08-22cRagexe, 2018-08-22cRagexeRE, 2018-08-29aRagexe, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-08-31aRagexe, 2018-09-12dRagexe, 2018-09-12dRagexeRE, 2018-09-19aRagexe, 2018-09-19aRagexeRE, 2018-10-02aRagexe, 2018-10-02aRagexeRE, 2018-10-02bRagexe, 2018-10-02bRagexeRE, 2018-10-17_02aRagexe, 2018-10-17_02aRagexeRE, 2018-10-17_03aRagexe, 2018-10-17_03aRagexeRE, 2018-10-17bRagexe, 2018-10-17bRagexeRE, 2018-10-24bRagexe, 2018-10-31aRagexe, 2018-10-31bRagexe, 2018-10-31cRagexeRE, 2018-11-07aRagexe, 2018-11-07aRagexeRE, 2018-11-14cRagexe, 2018-11-14cRagexeRE, 2018-11-14dRagexe, 2018-11-14dRagexeRE, 2018-11-21bRagexe, 2018-11-21cRagexeRE, 2018-11-28aRagexe, 2018-11-28aRagexeRE, 2018-11-28bRagexe, 2018-11-28cRagexe, 2018-12-05aRagexe, 2018-12-05bRagexeRE, 2018-12-12aRagexe, 2018-12-12aRagexeRE, 2018-12-12bRagexe, 2018-12-12bRagexeRE, 2018-12-19bRagexe, 2018-12-19bRagexeRE, 2018-12-26aRagexe, 2018-12-26aRagexeRE, 2019-01-09aRagexe, 2019-01-09bRagexeRE, 2019-01-16bRagexe, 2019-01-16bRagexeRE, 2019-01-16cRagexe, 2019-01-16cRagexeRE, 2019-01-23dRagexe, 2019-01-23dRagexeRE, 2019-02-13IRagexeRE, 2019-02-13bRagexe, 2019-02-13eRagexe, 2019-02-20aRagexeRE, 2019-02-27aRagexe, 2019-02-27bRagexeRE, 2019-02-28aRagexe, 2019-02-28aRagexeRE, 2019-03-06bRagexe, 2019-03-06bRagexeRE, 2019-03-06cRagexe, 2019-03-06cRagexeRE, 2019-03-13aRagexe, 2019-03-20aRagexe, 2019-03-20aRagexeRE, 2019-03-22aRagexe, 2019-03-22aRagexeRE, 2019-03-27bRagexe, 2019-03-27bRagexeRE, 2019-04-03aRagexe, 2019-04-03bRagexeRE, 2019-04-03cRagexeRE, 2019-04-17aRagexe, 2019-04-17cRagexeRE, 2019-04-18aRagexe, 2019-04-18aRagexeRE, 2019-05-08cRagexe, 2019-05-08dRagexeRE, 2019-05-08eRagexeRE, 2019-05-22bRagexe, 2019-05-22bRagexeRE, 2019-05-22cRagexe, 2019-05-22cRagexeRE, 2019-05-23aRagexe, 2019-05-29aRagexe, 2019-05-29bRagexeRE, 2019-05-29cRagexe, 2019-05-29cRagexeRE, 2019-05-30aRagexe, 2019-05-30aRagexeRE, 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 +// 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 #if PACKETVER == 20101123 || \ PACKETVER == 20101124 || \ PACKETVER == 20101125 || \ @@ -189,7 +189,12 @@ PACKETVER == 20200206 || \ PACKETVER == 20200212 || \ PACKETVER == 20200219 || \ - PACKETVER >= 20200304 + PACKETVER == 20200304 || \ + PACKETVER == 20200318 || \ + PACKETVER == 20200401 || \ + PACKETVER == 20200414 || \ + PACKETVER == 20200506 || \ + PACKETVER >= 20200520 packetKeys(0x00000000,0x00000000,0x00000000); #endif diff --git a/src/map/packets_keys_zero.h b/src/map/packets_keys_zero.h index facf0e151..700ff4c6c 100644 --- a/src/map/packets_keys_zero.h +++ b/src/map/packets_keys_zero.h @@ -30,7 +30,7 @@ /* This file is autogenerated, please do not commit manual changes */ -// 2017-10-18aRagexe_zero, 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero, 2018-04-25_3aRagexe_zero, 2018-05-09_3aRagexe_zero, 2018-05-23aRagexe_zero, 2018-06-05bRagexe_zero, 2018-06-05cRagexe_zero, 2018-06-27aRagexe_zero, 2018-07-03aRagexe_zero, 2018-07-11_2aRagexe_zero, 2018-07-25_2aRagexe_zero, 2018-08-01aRagexe_zero, 2018-08-08_2aRagexe_zero, 2018-08-22aRagexe_zero, 2018-08-29aRagexe_zero, 2018-09-05aRagexe_zero, 2018-09-12aRagexe_zero, 2018-09-19aRagexe_zero, 2018-09-28aRagexe_zero, 2018-10-10_2aRagexe_zero, 2018-10-24_2aRagexe_zero, 2018-11-14aRagexe_zero, 2018-11-20aRagexe_zero, 2018-11-28aRagexe_zero, 2018-12-12aRagexe_zero, 2018-12-19aRagexe_zero, 2018-12-26_2aRagexe_zero, 2019-01-16_2aRagexe_zero, 2019-01-17_1aRagexe_zero, 2019-01-30_2aRagexe_zero, 2019-02-13aRagexe_zero, 2019-02-20aRagexe_zero, 2019-02-27aRagexe_zero, 2019-03-13aRagexe_zero, 2019-03-27_2aRagexe_zero, 2019-03-27_3aRagexe_zero, 2019-04-03aRagexe_zero, 2019-04-10bRagexe_zero, 2019-04-24aRagexe_zero, 2019-05-02aRagexe_zero, 2019-05-08_2aRagexe_zero, 2019-05-08aRagexe_zero, 2019-05-15aRagexe_zero, 2019-05-29aRagexe_zero, 2019-05-30aRagexe_zero, 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 +// 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 #if PACKETVER == 20171018 || \ PACKETVER == 20171019 || \ PACKETVER == 20171023 || \ @@ -108,7 +108,12 @@ PACKETVER == 20200129 || \ PACKETVER == 20200212 || \ PACKETVER == 20200226 || \ - PACKETVER >= 20200304 + PACKETVER == 20200304 || \ + PACKETVER == 20200318 || \ + PACKETVER == 20200401 || \ + PACKETVER == 20200414 || \ + PACKETVER == 20200506 || \ + PACKETVER >= 20200520 packetKeys(0x00000000,0x00000000,0x00000000); #endif diff --git a/src/map/packets_shuffle_main.h b/src/map/packets_shuffle_main.h index 25024c9f9..ba234bdb8 100644 --- a/src/map/packets_shuffle_main.h +++ b/src/map/packets_shuffle_main.h @@ -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 #if PACKETVER == 20140611 || \ PACKETVER == 20150225 || \ PACKETVER == 20180315 || \ @@ -3376,6480 +3376,6421 @@ 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 + 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, 2020-02-12aRagexe, 2020-02-19dRagexe, 2020-03-04aRagexe -#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 || \ - PACKETVER == 20200212 || \ - PACKETVER == 20200219 || \ - PACKETVER == 20200304 - 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 490d517fd..46829fec1 100644 --- a/src/map/packets_shuffle_re.h +++ b/src/map/packets_shuffle_re.h @@ -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 #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, 2020-02-12aRagexeRE, 2020-02-19eRagexeRE, 2020-03-04aRagexeRE -#if PACKETVER == 20190904 || \ + PACKETVER == 20190828 || \ + PACKETVER == 20190904 || \ PACKETVER == 20190918 || \ PACKETVER == 20190925 || \ PACKETVER == 20191002 || \ @@ -9766,36 +9702,36 @@ PACKETVER == 20200205 || \ PACKETVER == 20200212 || \ PACKETVER == 20200219 || \ - PACKETVER == 20200304 - 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 >= 20200304 + 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 b7c26dbe7..42459bb87 100644 --- a/src/map/packets_shuffle_zero.h +++ b/src/map/packets_shuffle_zero.h @@ -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 #if PACKETVER == 20171018 || \ PACKETVER == 20171019 || \ PACKETVER == 20171023 || \ @@ -69,238 +69,289 @@ 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 + 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,545 +362,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, 2020-02-12aRagexe_zero, 2020-02-26aRagexe_zero, 2020-02-26bRagexe_zero, 2020-03-04aRagexe_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 || \ - PACKETVER == 20200212 || \ - PACKETVER == 20200226 || \ - PACKETVER == 20200304 - 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 71f986a90..3129a05d9 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; @@ -3891,6 +3891,42 @@ 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 !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..8eeae2215 100644 --- a/src/map/party.c +++ b/src/map/party.c @@ -677,17 +677,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; } } diff --git a/src/map/pc.c b/src/map/pc.c index c604e16dc..4497ef54f 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1279,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] @@ -1605,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, @@ -1688,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) @@ -1740,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); @@ -4206,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; @@ -5295,10 +5296,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) @@ -5337,23 +5334,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_check_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; + } + } } /*========================================== @@ -5703,7 +5756,7 @@ static int pc_steal_coin(struct map_session_data *sd, struct block_list *target, return 0; } - /** +/** * Sets a character's position. * * @param sd The related character. @@ -5720,233 +5773,278 @@ static int pc_steal_coin(struct map_session_data *sd, struct block_list *target, **/ 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); - if( !map_index || !mapindex_id2name(map_index) || ( m = map->mapindex2mapid(map_index) ) == -1 ) { - ShowDebug("pc_setpos: Passed mapindex(%d) is invalid!\n", map_index); + int map_id = map->mapindex2mapid(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 4; //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); + + 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 (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; } @@ -7526,7 +7624,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) @@ -8026,163 +8124,177 @@ 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); + clif->send_petdata(sd, sd->pd, 1, pd->pet.intimate); } - if( sd->pd->target_id ) // Unlock all targets... + + if (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->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 ) {/* 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 (sd->bg_id != 0) { //TODO: Purge when bgqueue is deemed ok. + struct battleground_data *bgd = bg->team_search(sd->bg_id); + + 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->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 ^^; @@ -8194,14 +8306,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 @@ -8209,137 +8322,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; } } @@ -8347,46 +8479,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; @@ -8809,6 +8946,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) @@ -9203,6 +9344,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 *------------------------------------------*/ @@ -9214,7 +9421,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 @@ -11171,7 +11384,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; @@ -11213,7 +11426,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; @@ -12726,7 +12939,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; @@ -12739,6 +12955,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 8d1ae3607..dfc1f886e 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -173,6 +173,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 +192,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 +207,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; @@ -240,10 +251,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_check_conditions : 1; // Used by itemskill() script command, to check skill conditions and 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 +305,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 +440,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 +498,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 +630,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 +650,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 @@ -681,6 +675,7 @@ END_ZEROED_BLOCK; #define pc_isidle(sd) ( (sd)->chat_id != 0 || (sd)->state.vending || (sd)->state.buyingstore || DIFF_TICK(sockt->last_tick, (sd)->idletime) >= battle->bc->idle_no_share ) #define pc_istrading(sd) ( (sd)->npc_id || (sd)->state.vending || (sd)->state.buyingstore || (sd)->state.trading ) #define pc_cant_act(sd) ( (sd)->npc_id || (sd)->state.vending || (sd)->state.buyingstore || (sd)->chat_id != 0 || ((sd)->sc.opt1 && (sd)->sc.opt1 != OPT1_BURNING) || (sd)->state.trading || (sd)->state.storage_flag || (sd)->state.prevend || (sd)->state.refine_ui == 1 || (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) /* 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 +685,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 @@ -1034,7 +1029,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 +1045,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 +1130,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 aeb372c05..299de42c7 100644 --- a/src/map/pet.c +++ b/src/map/pet.c @@ -60,62 +60,101 @@ 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); + pd->pet.hungry = cap_value(value, PET_HUNGER_STARVING, PET_HUNGER_STUFFED); +} + +/** + * 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 = cap_value(value, PET_INTIMACY_NONE, PET_INTIMACY_MAX); - pd->pet.intimate = value; + struct map_session_data *sd = pd->msd; - 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); + status_calc_pc(sd, SCO_NONE); - /* Pet is lost, delete the egg */ - if (value <= 0) { + if (pd->pet.intimate == PET_INTIMACY_NONE) { /// Pet is lost. Delete the egg. 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); - } } } +/** + * 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 +201,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 +259,72 @@ 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; + pet->set_intimate(pd, pd->pet.intimate - pd->petDB->starving_decrement); + + if (pd->pet.intimate == PET_INTIMACY_NONE) pd->status.speed = pd->db->status.speed; - } + status_calc_pet(pd, SCO_NONE); - clif->send_petdata(sd,pd,1,pd->pet.intimate); + 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); + clif->send_petdata(sd, pd, 2, pd->pet.hungry); + 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 +361,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; } @@ -377,78 +433,80 @@ 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; } @@ -563,57 +621,66 @@ 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] + //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; } @@ -670,42 +737,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. + + struct item_data *egg_id = itemdb->exists(sd->pd->petDB->EggID); - 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. + 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; } @@ -830,49 +907,56 @@ 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); + + 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; + 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 (pd->pet.intimate == PET_INTIMACY_NONE) { 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; - 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->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); return 0; } @@ -919,126 +1003,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->walk_toxy(&pd->bl, pd->ud.to_x, pd->ud.to_y, 0) != 0) - pet->randomwalk(pd,tick); + 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; } @@ -1143,45 +1248,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; } @@ -1327,115 +1441,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, "AutoFeed")) && (i32 = libconfig->setting_get_bool(t))) + if ((t = libconfig->setting_get_member(it, "TalkWithEmotes")) != NULL + && (i32 = libconfig->setting_get_bool(t)) != 0) { + pet->db[n].talk_convert_class = i32; + } + + 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); + + 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 (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; + 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_; } @@ -1515,24 +1669,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; } @@ -1626,6 +1797,7 @@ void pet_defaults(void) pet->final = do_final_pet; pet->hungry_val = pet_hungry_val; + pet->set_hunger = pet_set_hunger; pet->set_intimate = pet_set_intimate; pet->create_egg = pet_create_egg; pet->unlocktarget = pet_unlocktarget; diff --git a/src/map/pet.h b/src/map/pet.h index e0a5529a6..fa37e896a 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,7 @@ struct pet_interface { int (*final) (void); /* */ int (*hungry_val) (struct pet_data *pd); + void (*set_hunger) (struct pet_data *pd, int value); 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); 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/script.c b/src/map/script.c index d85f064b7..0d04ea31b 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; } @@ -1324,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); @@ -1659,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) { @@ -2002,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; @@ -2088,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 ) { @@ -2750,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); } @@ -3477,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. @@ -3521,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: %lu! Maximum is %d. Skipping...\n", + name, strlen(str), SCRIPT_STRING_VAR_LENGTH); + + if (st != NULL) { + script->reportsrc(st); + st->state = END; + } + + return 0; + } + switch (prefix) { case '@': if (ref) { @@ -4910,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); @@ -6479,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 *------------------------------------------*/ @@ -11080,36 +11369,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; - pc->itemskill_clear(sd); - 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_check_conditions = ((flag & ISF_CHECKCONDITIONS) == ISF_CHECKCONDITIONS) ? 1 : 0; // Unset in pc_itemskill_clear(). + sd->auto_cast_current.itemskill_check_conditions = ((flag & ISF_CHECKCONDITIONS) == ISF_CHECKCONDITIONS); - if (sd->state.itemskill_check_conditions == 1) { - if (skill->check_condition_castbegin(sd, sd->skillitem, sd->skillitemlv) == 0 - || skill->check_condition_castend(sd, sd->skillitem, sd->skillitemlv) == 0) { - pc->itemskill_clear(sd); + 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; } @@ -15034,10 +15320,10 @@ static BUILDIN(getiteminfo) script_pushint(st, it->nameid); break; case ITEMINFO_AEGISNAME: - script_pushstr(st, it->name); + script_pushstrcopy(st, it->name); break; case ITEMINFO_NAME: - script_pushstr(st, it->jname); + script_pushstrcopy(st, it->jname); break; default: ShowError("buildin_getiteminfo: Invalid item info type %d.\n", type); @@ -16197,7 +16483,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); @@ -16220,11 +16505,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; } /** @@ -18948,7 +19234,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); @@ -19349,12 +19642,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; @@ -19383,12 +19678,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) { @@ -19497,26 +19793,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)); @@ -19524,22 +19819,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)) { @@ -19547,68 +19846,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; @@ -19634,30 +19952,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; @@ -19665,8 +19989,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); @@ -19721,7 +20045,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: @@ -19729,19 +20053,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; @@ -19749,67 +20074,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->walk_toxy(bl, (short)val, (short)val2, 2) != 0) - unit->movepos(bl, (short) val, (short) val2, 0, 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); @@ -19845,112 +20184,115 @@ static BUILDIN(setunitdata) 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; @@ -19960,14 +20302,14 @@ 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->walk_toxy(bl, (short)val, (short)val2, 2) != 0) - unit->movepos(bl, (short) val, (short) val2, 0, 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: @@ -19977,136 +20319,138 @@ static BUILDIN(setunitdata) 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; 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->walk_toxy(bl, (short)val, (short)val2, 2) != 0) - unit->movepos(bl, (short) val, (short) val2, 0, 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: @@ -20116,130 +20460,133 @@ static BUILDIN(setunitdata) 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 - } + + 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->walk_toxy(bl, (short)val, (short)val2, 2) != 0) - unit->movepos(bl, (short) val, (short) val2, 0, 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: @@ -20249,131 +20596,134 @@ static BUILDIN(setunitdata) 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->walk_toxy(bl, (short)val, (short)val2, 2) != 0) - unit->movepos(bl, (short) val, (short) val2, 0, 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: @@ -20383,211 +20733,214 @@ static BUILDIN(setunitdata) 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->walk_toxy(bl, (short)val, (short)val2, 2) != 0) - unit->movepos(bl, (short) val, (short) val2, 0, 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->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; @@ -20624,19 +20977,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; } @@ -21511,7 +21866,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); } @@ -21547,7 +21905,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); } @@ -22103,12 +22464,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: { @@ -27167,8 +27529,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"), @@ -27407,6 +27769,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 @@ -27418,7 +27782,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; @@ -27429,6 +27793,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++; } @@ -27793,6 +28158,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); @@ -27830,6 +28212,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); @@ -27847,6 +28230,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); @@ -28218,6 +28606,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; @@ -28250,6 +28639,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; @@ -28321,6 +28711,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 511497a66..df5297ac0 100644 --- a/src/map/script.h +++ b/src/map/script.h @@ -584,6 +584,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; @@ -725,8 +727,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 { @@ -917,7 +925,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); @@ -948,10 +956,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); @@ -984,6 +993,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 a1a22f74f..1b27fc2ad 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -72,6 +72,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 +124,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 +176,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 +332,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 +369,140 @@ static int skill_get_spiritball(int skill_id, int skill_lv) return skill->dbs->db[idx].spiritball[skill_get_lvl_idx(skill_lv)]; } +/** + * 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)]; +} + +/** + * 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)]; } -static int skill_get_itemqty(int skill_id, int item_idx) +/** + * 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 +610,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 +677,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 +744,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 +796,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 +879,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 +1194,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 +1271,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 +1296,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,6 +1441,33 @@ 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); @@ -2065,9 +2356,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; @@ -2118,11 +2409,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) { @@ -2191,6 +2483,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; @@ -2200,9 +2495,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; @@ -2248,14 +2543,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 ) @@ -2402,6 +2699,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 && @@ -2417,9 +2717,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; @@ -2460,10 +2760,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) { @@ -2475,6 +2776,8 @@ static int skill_counter_additional_effect(struct block_list *src, struct block_ } } } + + dstsd->auto_cast_current.type = ac_type; } //Autobonus when attacked @@ -2935,7 +3238,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] @@ -3715,9 +4018,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; @@ -3733,17 +4036,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 @@ -3776,6 +4078,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 ) @@ -3790,23 +4106,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; @@ -3894,7 +4219,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)) { @@ -3914,7 +4239,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 @@ -3934,7 +4259,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; @@ -3943,7 +4268,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 @@ -4048,7 +4373,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); @@ -4197,11 +4522,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); } /*========================================== @@ -4230,12 +4550,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; } @@ -4443,7 +4763,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: @@ -4454,7 +4774,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: @@ -4626,7 +4946,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); @@ -4701,7 +5021,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; @@ -4709,9 +5029,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: @@ -4971,7 +5291,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: { @@ -5106,7 +5426,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; @@ -5152,7 +5472,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 @@ -5396,7 +5716,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); @@ -5418,7 +5738,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); @@ -5426,7 +5746,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; @@ -5441,7 +5761,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); @@ -5449,7 +5769,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; @@ -5459,7 +5779,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: @@ -5476,7 +5796,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)); @@ -5489,7 +5809,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); } @@ -5513,7 +5833,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; @@ -5573,7 +5893,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; } @@ -5792,7 +6112,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); @@ -5825,7 +6145,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) @@ -5835,7 +6155,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 @@ -5860,8 +6180,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; @@ -5910,16 +6232,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; } @@ -6101,7 +6427,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; @@ -6299,9 +6625,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 @@ -7349,7 +7678,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); } @@ -7430,7 +7759,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; @@ -7467,7 +7796,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); @@ -7616,7 +7945,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; @@ -8244,7 +8573,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) { @@ -10041,9 +10370,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); @@ -10436,7 +10768,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 } @@ -10812,7 +11144,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); @@ -10841,8 +11173,8 @@ 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->set_dir(src, map->calc_dir(src, ud->skillx, ud->skilly)); @@ -10856,13 +11188,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; } @@ -10893,6 +11229,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; +} + /*========================================== * *------------------------------------------*/ @@ -10990,7 +11357,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; @@ -11013,7 +11380,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); @@ -11074,7 +11444,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: @@ -11262,7 +11632,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: @@ -11433,7 +11803,7 @@ static int skill_castend_pos2(struct block_list *src, int x, int y, uint16 skill 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; @@ -11679,7 +12049,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; @@ -11692,7 +12062,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; @@ -11926,10 +12296,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; @@ -11962,8 +12332,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); @@ -12327,12 +12697,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; @@ -12453,7 +12823,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; } @@ -12501,7 +12871,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); @@ -12569,7 +12939,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. */ @@ -12700,7 +13070,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: @@ -12875,7 +13245,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: @@ -12936,7 +13306,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 @@ -12945,7 +13315,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; @@ -13266,7 +13636,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: @@ -13367,7 +13737,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; @@ -13379,11 +13749,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; @@ -13401,7 +13771,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; @@ -13409,7 +13779,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: @@ -13534,7 +13904,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; @@ -13988,16 +14358,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. ); } @@ -14013,19 +14383,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++; + } + } + } + + 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; + } + } - return (sd->skillitem == skill_id && sd->skillitemlv == skill_lv - && sd->itemskill_id == skill_id && sd->itemskill_lv == skill_lv); + 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) @@ -14042,13 +14480,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_check_conditions == 0) - && 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; @@ -14079,30 +14517,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; } @@ -14750,22 +15165,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] && @@ -14968,12 +15367,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; } @@ -15019,25 +15426,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_check_conditions == 0) - && 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; @@ -15064,7 +15586,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; } @@ -15170,56 +15692,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; } @@ -15229,6 +15711,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) @@ -15237,8 +15756,10 @@ static int skill_consume_requirement(struct map_session_data *sd, uint16 skill_i nullpo_ret(sd); - if (sd->state.itemskill_check_conditions == 0 && 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); @@ -15254,7 +15775,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; @@ -15279,16 +15800,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. @@ -15426,61 +15955,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: @@ -15491,8 +15995,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) { @@ -15524,39 +16037,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: @@ -15742,6 +16222,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; } @@ -15843,6 +16325,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] ) @@ -16597,7 +17081,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; } @@ -16956,7 +17440,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; @@ -17245,7 +17729,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; } @@ -17304,7 +17788,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; } @@ -17343,18 +17827,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); @@ -17486,7 +17965,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; } @@ -17645,7 +18124,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); @@ -18772,12 +19251,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]) { @@ -18911,14 +19390,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; @@ -20059,9 +20544,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. @@ -20106,295 +20588,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) +{ + 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) { - const char *type = NULL; + 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: %lu! Maximum is %lu. Skipping skill...\n", + __func__, name, sk->nameid, conf->file, strlen(name), 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: %lu! Maximum is %lu. Trimming...\n", + __func__, description, sk->nameid, conf->file, strlen(description), 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 (strcmpi(type,"Ele_Weapon") == 0) + if (libconfig->setting_lookup_string(conf, "Element", &element) == CONFIG_TRUE) { + int ele = ELE_NEUTRAL; + + 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; } @@ -20403,696 +21139,2516 @@ 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); } } } + + if (sk->nk == NK_NONE) + sk->nk = NK_NO_DAMAGE; } /** - * 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) { - struct config_setting_t *t = NULL, *tt = NULL; + 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); - 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->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) +{ + 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); + + 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); + } } - skill->level_set_value(delay?sk->delaynodex:sk->castnodex, tmpopt); + + 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 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 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); + } + } + + 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 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); + + for (int i = 0; i < MAX_SKILL_LEVEL; i++) + sk->req_equip.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) { + 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); - 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_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); - 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"); + 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) { - const char *type = NULL; + 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); - 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, "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); } +} - if (sk->unit_flag & UF_DEFNOTENEMY && battle_config.defnotenemy) - sk->unit_target = BCT_NOENEMY; +/** + * 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) +{ + 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; - //By default, target just characters. - sk->unit_target |= BL_CHAR; + struct item_data *it = itemdb->exists(item_id); - 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 (it == NULL) + return 0; + + return it->nameid; + } + + if (!script->get_constant(name, &item_id)) + return 0; + + return item_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 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); + + 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; + + return -1; +} + +/** + * 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 (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 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 @@ -21106,293 +23662,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 }; + struct config_setting_t *conf; + int index = 0; + int count = 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; - } - - tmp_db.nameid = skill_id; + while ((conf = libconfig->setting_get_elem(sk, index++)) != NULL) { + struct s_skill_db tmp_db = {0}; - 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); + /** Validate mandatory fields. **/ + skill->validate_id(conf, &tmp_db, index); + if (tmp_db.nameid == 0) continue; - } - if (duplicate[idx]) { - ShowWarning("skill_read_skilldb: Duplicate Skill Id %d in entry %d in '%s', skipping...\n", skill_id, index, filepath); + skill->validate_name(conf, &tmp_db); + if (*tmp_db.name == '\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_max_level(conf, &tmp_db); + if (tmp_db.max == 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); - 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 @@ -21571,6 +23934,7 @@ 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; @@ -21578,6 +23942,10 @@ void skill_defaults(void) skill->get_spiritball = skill_get_spiritball; 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; @@ -21636,9 +24004,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; @@ -21662,6 +24033,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; @@ -21722,24 +24094,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; @@ -21802,4 +24218,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 c65547181..b9178321d 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -50,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)) @@ -60,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 @@ -1724,41 +1728,76 @@ 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. +}; + /** * 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 { @@ -1944,8 +1983,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); @@ -1955,13 +1994,18 @@ 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_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); @@ -1971,19 +2015,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); @@ -1995,7 +2039,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); @@ -2011,7 +2055,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); @@ -2020,9 +2064,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); @@ -2046,6 +2093,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 ); @@ -2065,7 +2113,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); @@ -2106,24 +2154,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); @@ -2191,6 +2283,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 4d798b606..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 @@ -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/unit.c b/src/map/unit.c index a879a125f..a6afb5ee7 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -96,6 +96,8 @@ static struct unit_data *unit_bl2ud(struct block_list *bl) 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); } @@ -128,6 +130,8 @@ static const struct unit_data *unit_cbl2ud(const struct block_list *bl) 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); } @@ -326,7 +330,7 @@ static int unit_warpto_master(struct block_list *master_bl, struct block_list *s 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 || bl->prev == NULL) // Stop moved because it is missing from the block_list + if (bl == NULL) return 1; struct unit_data *ud = unit->bl2ud(bl); if (ud == NULL) @@ -336,8 +340,12 @@ static int unit_walk_toxy_timer(int tid, int64 tick, int id, intptr_t data) ShowError("unit_walk_timer mismatch %d != %d\n",ud->walktimer,tid); return 1; } + ud->walktimer = INVALID_TIMER; + if (bl->prev == NULL) // Stop moved because it is missing from the block_list. + return 1; + if (ud->walkpath.path_pos >= ud->walkpath.path_len) return 1; @@ -428,7 +436,7 @@ static int unit_walk_toxy_timer(int tid, int64 tick, int id, intptr_t data) // 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) == 1) { + && 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) { @@ -898,7 +906,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; @@ -1144,12 +1152,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 && (ret == 0 || !skill->is_item_skill(sd, skill_id, skill_lv))) - pc->itemskill_clear(sd); + if (sd != NULL) + pc->autocast_remove(sd, sd->auto_cast_current.type, sd->auto_cast_current.skill_id, + sd->auto_cast_current.skill_lv); return ret; } @@ -1558,7 +1567,7 @@ static int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill //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(ud->skill_id, ud->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 ) { @@ -1708,7 +1717,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. @@ -1746,7 +1755,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 ) { @@ -1781,12 +1790,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 && (ret == 0 || !skill->is_item_skill(sd, skill_id, skill_lv))) - pc->itemskill_clear(sd); + if (sd != NULL) + pc->autocast_remove(sd, sd->auto_cast_current.type, sd->auto_cast_current.skill_id, + sd->auto_cast_current.skill_lv); return ret; } @@ -1862,7 +1872,7 @@ static int unit_skilluse_pos2(struct block_list *src, short skill_x, short skill 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(ud->skill_id, ud->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) ) @@ -1883,7 +1893,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) { @@ -1914,7 +1924,7 @@ 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. @@ -2333,7 +2343,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; } @@ -2718,7 +2728,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); @@ -2877,6 +2887,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] @@ -2932,7 +2944,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. diff --git a/src/plugins/HPMHooking/HPMHooking.Defs.inc b/src/plugins/HPMHooking/HPMHooking.Defs.inc index 28f81b97f..c04eedb05 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); @@ -2762,6 +2766,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 @@ -5212,20 +5224,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 +5258,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 +5480,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); @@ -5830,6 +5858,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 +6216,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 +6244,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 +6378,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 +6538,8 @@ 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 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); @@ -6836,8 +6880,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 +6946,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 +7012,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 +7230,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 +7252,30 @@ 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_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 +7294,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 +7340,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); @@ -7314,8 +7372,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 +7390,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 +7448,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 +7488,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); @@ -7504,42 +7570,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); @@ -7662,6 +7816,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 +8028,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); 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 f94606bab..60d8b7e20 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; @@ -2352,6 +2356,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 +3828,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 +3862,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 +4448,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 +4796,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 +4824,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 +5114,8 @@ 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_set_intimate_pre; struct HPMHookPoint *HP_pet_set_intimate_post; struct HPMHookPoint *HP_pet_create_egg_pre; @@ -5432,6 +5476,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 +5542,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 +5776,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; @@ -5742,6 +5792,14 @@ struct { 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 +5914,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 +5972,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 +6094,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 +6340,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; @@ -7875,6 +8031,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; @@ -9227,6 +9387,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; @@ -10691,20 +10859,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; @@ -10713,8 +10893,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; @@ -11295,6 +11479,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; @@ -11639,8 +11827,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; @@ -11661,6 +11855,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; @@ -11947,6 +12145,8 @@ 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_set_intimate_pre; int HP_pet_set_intimate_post; int HP_pet_create_egg_pre; @@ -12307,6 +12507,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; @@ -12371,6 +12573,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; @@ -12603,6 +12807,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; @@ -12617,6 +12823,14 @@ struct { 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; @@ -12731,12 +12945,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; @@ -12783,6 +13003,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; @@ -12903,42 +13125,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; @@ -13061,6 +13371,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; diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc index a360b3f53..899f443d1 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) }, @@ -1200,6 +1202,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 +1960,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 +2277,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 +2456,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 +2470,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 +2617,7 @@ 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->set_intimate, HP_pet_set_intimate) }, { HP_POP(pet->create_egg, HP_pet_create_egg) }, { HP_POP(pet->unlocktarget, HP_pet_unlocktarget) }, @@ -2782,6 +2804,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 +2837,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,6 +2957,7 @@ 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) }, @@ -2940,6 +2965,10 @@ struct HookingPointData HookingPoints[] = { { HP_POP(skill->get_spiritball, HP_skill_get_spiritball) }, { 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 +3026,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 +3055,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 +3116,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 +3239,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) }, @@ -3534,4 +3612,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 592279cc4..f6f1b3839 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) { @@ -30663,6 +30715,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) { @@ -50460,58 +50618,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 +50672,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 +50753,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 +50834,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 +50912,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 +51076,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 +51092,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 +54073,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 +54092,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); @@ -58718,6 +59088,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 +63781,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 +64152,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 +65942,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 +65960,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 +65968,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 +65986,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 +68060,32 @@ 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; +} void HP_pet_set_intimate(struct pet_data *pd, int value) { int hIndex = 0; if (HPMHooks.count.HP_pet_set_intimate_pre > 0) { @@ -71461,14 +72038,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 +72053,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 +72914,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 +73789,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 +76769,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 +76785,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 +76812,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 +77066,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 +77174,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 +77190,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___; @@ -76597,15 +77255,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 +77271,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 +77633,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 +77649,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 +77741,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 +77757,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 +77795,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 +77811,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 +77903,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 +77919,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 +77946,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 +77973,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 +78254,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 +78270,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___; @@ -77920,15 +78686,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 +78702,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 +78929,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 +78945,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 +78983,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 +79064,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 +79714,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 +80282,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 +80297,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; @@ -80610,6 +81483,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 +81692,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 +81770,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 +81785,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 +81811,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 +82160,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 +82395,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 +82448,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 +82527,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 +82657,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 +82698,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 +82724,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 +82750,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 +82777,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 +82830,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 +82972,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; @@ -82727,6 +84748,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 +87523,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 +87539,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___; diff --git a/src/plugins/Makefile.in b/src/plugins/Makefile.in index 5527ceb2f..e44412bfa 100644 --- a/src/plugins/Makefile.in +++ b/src/plugins/Makefile.in @@ -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/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/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 |